寫程序主要是爲了之後本身讀起來不費勁,方便查看和維護。ide
//返回錯誤的約定:若是該命令與本站有關則根據設定來決定是否返回錯誤信息,
//若是該命令與本站無關則沒必要返回錯誤信息,接收的所有是16進制的數字
bool Inspect=true;
uint8_t ErrorCode=0; 測試
//CRC檢查
......
//分析文件頭
if (rx_buffer1[0] != 0x59 || rx_buffer1[1] != 0x51 || rx_buffer1[2]!=0x43 || rx_buffer1[3]!=0x59 ){
Inspect=false;
ErrorCode=0x011;//錯誤代碼11:標識文件頭的錯誤
} ui
//分析文件尾
if ( rx_buffer1[66]!=0x59 || rx_buffer1[67]!=0x42 || rx_buffer1[68]!=0x44 || rx_buffer1[69]!=0x57 ){
Inspect=false;
ErrorCode=0x022;//錯誤代碼22:標識文件尾的錯誤
}code
//是不是屬於本線和本站的接收命令
if( rx_buffer1[4]!=0x01 || rx_buffer1[6]!=0x00 ){
Inspect=false;
ErrorCode=0x33;//錯誤代碼33:不是本次的測試命令
}ip
//是不是屬於本線和本站的接收命令
if( rx_buffer1[5]!=YBDWPipeline || rx_buffer1[7]!=YBDWPile ){
Inspect=false;
ErrorCode=0x44;//錯誤代碼44:不是本線或者本站的接收命令
}it
......io
if(Inspect==true){
//準備返回的數據class
//根據具體的命令來進行實際操做
switch(rx_buffer1[9]){
case Set_SystemDatetime: //設置系統日期和時間配置
break;
case Set_EngineeringOffset: //設置工程偏移量程序
break;
case Set_LineAndPile://設置線號和站號、本線的起始和結束站號
break;
case Set_Version://設置版本信息
break;
case Get_LineAndPile://獲取線號和站號、本線的起始和結束站號
break;
case Get_CurrentYBDW://獲取當前的數據
break;
default: //不支持的命令
break; } ......}else{ if(rx_buffer1[17]==0x99 && rx_buffer1[5]!=YBDWPipeline && rx_buffer1[7]!=YBDWPile ){ //根據配置決定是否將錯誤返回,只與本站的信號纔回饋信息 ...... HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10); //串口1向LORA發送整個緩衝區 }