zhyinch
2022-05-24 5b6fe0edc2790d1948c09b191a2a565e8874f875
Ô´Âë/ºËÐİå/Src/application/serial_at_cmd_app.c
@@ -7,6 +7,7 @@
#define MSG_RW       3
#define MSG_WTAG  6
#define MSG_USERDATA       0x10
#define CMD_READ   1
#define CMD_WRITE   2
@@ -62,9 +63,11 @@
   
   UART_PushFrame(send_frame, data_length+9);   
}
u8 remotetag_para[30];
u8 remotetag_para[30],remotetag_paralen,userdata_len,userdata[50];
u8 remotesend_state=0;
u16 rec_checksum;
u16 rec_checksum,userdata_targetid;
u32 getuserdata_tick;
void UsartParseDataHandler(uint8_t data)
{
   static UsartRecvPackState usart_receive_state = UsartReceiveWaitHead0;
@@ -74,7 +77,7 @@
   
   if(usart_receive_state == UsartReceiveWaitChecksum1) {         //若收到校验和包.
   if(usart_receive_state == UsartReceiveWaitChecksum1) {         //???????.
      checksum = 0;
      for(int i = 0; i<pack_length-5; i++) { 
         checksum += mUsartReceivePack[i];
@@ -86,7 +89,7 @@
      checksum += pack_msgtype;
      checksum = ~checksum;
      rec_checksum = rec_checksum|(data<<8);
      if(rec_checksum == checksum)            //校验通过
      if(rec_checksum == checksum)            //????
      {
         switch(pack_msgtype)
         {
@@ -94,18 +97,18 @@
               switch(pack_cmd)
               {
                  case CMD_WRITE:
                     //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中
                     //?mUsartReceivePack???pack_length?????,???????
                     memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_datalen);
                     //返回一个error状态
                     //????error??
                     //SendComMap(pack_datalen,pack_index);
                     save_com_map_to_flash();
                     SendConfigConfirm(pack_msgtype,pack_length);
                     delay_ms(500);
                     SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
                     SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //?????bootloader
                     break;
                  case CMD_READ:
                     //read包中data字节,即mUsartReceivePack[0]表示数据长度;
                  //从g_com_data结构体中的第index位置读取长度为mUsartReceivePack[0]的字节,发送出来
                     //read??data??,?mUsartReceivePack[0]??????;
                  //?g_com_data??????index???????mUsartReceivePack[0]???,????
                     SendComMap(pack_datalen,pack_index);      
                     break;
                  default:
@@ -118,6 +121,20 @@
                  remotesend_state=1;
               memcpy(remotetag_para,mUsartReceivePack,REMOTEPARA_LEN);
               break;
               case MSG_USERDATA:
               userdata_targetid = pack_cmd|pack_index<<8;
               userdata_len = pack_datalen;
            //memcpy(&userdata_targetid,mUsartReceivePack,2);
            if(userdata_len==USERDATA_LEN)
            {
               memcpy(userdata,&userdata_targetid,2);
               userdata[2] = userdata_len;
               memcpy(&userdata[3],&mUsartReceivePack,USERDATA_LEN);
               getuserdata_tick = time32_incr;
               SendConfigConfirm(pack_msgtype,pack_length);
            }
               break;
      }
      }
@@ -128,30 +145,30 @@
   } else if((usart_receive_state == UsartReceiveWaitChecksum0) ) {   
         rec_checksum = data;
      usart_receive_state = UsartReceiveWaitChecksum1;
   }else if((usart_receive_state == UsartReceiveWaitData) ) {   //若果收到的是正常通讯包
   }else if((usart_receive_state == UsartReceiveWaitData) ) {   //???????????
      mUsartReceivePack[index] = data;
      index++;
      if(index == pack_length-5) {      //如果收到的index与长度相等
      if(index == pack_length-5) {      //?????index?????
         usart_receive_state = UsartReceiveWaitChecksum0;
      }
   } else if(usart_receive_state == UsartReceiveWaitDataLen) {                  //收到指令类型字节
   } else if(usart_receive_state == UsartReceiveWaitDataLen) {                  //????????
      pack_datalen = data;
      usart_receive_state = UsartReceiveWaitData;
   }else if(usart_receive_state == UsartReceiveWaitIndex) {                  //收到指令类型字节
   }else if(usart_receive_state == UsartReceiveWaitIndex) {                  //????????
      pack_index = data;
      usart_receive_state = UsartReceiveWaitDataLen;
   } else if(usart_receive_state == UsartReceiveWaitCMD) {                     //收到指令类型字节
   } else if(usart_receive_state == UsartReceiveWaitCMD) {                     //????????
      pack_cmd = data;
      usart_receive_state = UsartReceiveWaitIndex;
   } else if(usart_receive_state == UsartReceiveWaitLength) {                  //收到长度字节
   } else if(usart_receive_state == UsartReceiveWaitLength) {                  //??????
      
         pack_length = data;
         pack_index = 0;         
         usart_receive_state = UsartReceiveWaitCMD;
      
   } else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) {   //收到第一个包头
   } else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) {   //???????
      usart_receive_state = UsartReceiveWaitHead1;
   } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {   //收到第二个包头
   } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {   //???????
      usart_receive_state = UsartReceiveWaitMsgType;
   }else if ((usart_receive_state == UsartReceiveWaitMsgType)) {
      usart_receive_state = UsartReceiveWaitLength;
@@ -163,4 +180,4 @@
      pack_length = 0;
   }
}
}