zhyinch
2020-07-17 125d49c1d48d96611c1ec68df5dc870433b44581
Ô´Âë/ºËÐİå/Src/application/serial_at_cmd_app.c
@@ -5,6 +5,8 @@
#include "dw_app.h"
#include "RTC.h"
#define MSG_RW       3
#define MSG_WTAG  6
#define CMD_READ   1
#define CMD_WRITE   2
@@ -33,7 +35,7 @@
   send_frame[4] = CMD_REPLY;
   send_frame[5] = index;
   send_frame[6] = data_length;
   memcpy(&send_frame[7], &g_com_map[index], data_length);
   memcpy(&send_frame[7], &g_com_map[index>>1], data_length);
   for(int i = 0; i<(data_length+5); i++)
   {
      checksum += send_frame[2+i];
@@ -43,7 +45,8 @@
   
   UART_PushFrame(send_frame, data_length+9);   
}
u8 remotetag_para[30];
u8 remotesend_state=0;
void UsartParseDataHandler(uint8_t data)
{
   static UsartRecvPackState usart_receive_state = UsartReceiveWaitHead0;
@@ -65,31 +68,42 @@
      checksum += pack_msgtype;
      if((data + checksum)&0xff == 0xFF)            //校验通过
      {
         switch(pack_cmd)
         switch(pack_msgtype)
         {
            case CMD_WRITE:
               //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中
               memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_length);
               //返回一个error状态
               //SendComMap(pack_datalen,pack_index);
               save_com_map_to_flash();
               delay_ms(100);
               NVIC_SystemReset();
            case MSG_RW:
               switch(pack_cmd)
               {
                  case CMD_WRITE:
                     //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中
                     memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_datalen);
                     //返回一个error状态
                     //SendComMap(pack_datalen,pack_index);
                     save_com_map_to_flash();
                     delay_ms(100);
                     NVIC_SystemReset();
                     break;
                  case CMD_READ:
                     //read包中data字节,即mUsartReceivePack[0]表示数据长度;
                  //从g_com_data结构体中的第index位置读取长度为mUsartReceivePack[0]的字节,发送出来
                     SendComMap(pack_datalen,pack_index);
                     break;
                  default:
                     break;
               }
               break;
            case CMD_READ:
               //read包中data字节,即mUsartReceivePack[0]表示数据长度;
            //从g_com_data结构体中的第index位置读取长度为mUsartReceivePack[0]的字节,发送出来
               SendComMap(pack_datalen,pack_index>>1);
            case MSG_WTAG:
               remotesend_state++;
               if(remotesend_state>14)
                  remotesend_state=1;
               memcpy(remotetag_para,mUsartReceivePack,REMOTEPARA_LEN);
               break;
            default:
               break;
         }
      }
      }
      usart_receive_state = UsartReceiveWaitHead0;
      pack_index = 0;
      pack_length = 0;
      index=0;
   } else if((usart_receive_state == UsartReceiveWaitData) && (pack_index < pack_length)) {   //若果收到的是正常通讯包
   } else if((usart_receive_state == UsartReceiveWaitData) ) {   //若果收到的是正常通讯包
      mUsartReceivePack[index] = data;
      index++;
      if(index == pack_length-5) {      //如果收到的index与长度相等
@@ -114,7 +128,7 @@
      usart_receive_state = UsartReceiveWaitHead1;
   } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {   //收到第二个包头
      usart_receive_state = UsartReceiveWaitMsgType;
   }else if ((usart_receive_state == UsartReceiveWaitMsgType) && (data == 0x3)) {
   }else if ((usart_receive_state == UsartReceiveWaitMsgType)) {
      usart_receive_state = UsartReceiveWaitLength;
      pack_msgtype = data;
   }