From 43d055054fc3eee6d0c63f429a14ce74712626c1 Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期四, 22 五月 2025 18:08:48 +0800
Subject: [PATCH] 初步写好MK与蓝牙的传输交互函数未测试

---
 keil/include/drivers/serial_at_cmd_app.c |  549 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 381 insertions(+), 168 deletions(-)

diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c
index 3776eee..aa7ce9b 100644
--- a/keil/include/drivers/serial_at_cmd_app.c
+++ b/keil/include/drivers/serial_at_cmd_app.c
@@ -19,17 +19,8 @@
 #define Lora_TXD_bff_MAX  220   //发送缓存区大小  >4+8+4*基站数量+2=14+4*基站数量
 
 uint8_t mUsartReceivePack[100] = {0};
-uint8_t mUsart2ReceivePack[150] = {0};
-double jd,wd;
-int analysis_num,pos_state;
-uint8_t state5V_prase_flag,gps_prase_flag=1;
-extern void IO_LED_control_change(uint8_t data);
-extern void IO_control_init(void);
-extern void blink_led(uint8_t*state);
-extern void updata_led_power_state(void);
-extern uint8_t gps_success_state;
-extern uint8_t gps_success_state,gps_enable_flag,gps_need_data_flag,gps_timeout_flag;
-extern uint16_t gps_wait_count;
+uint8_t mUsart2ReceivePack[100] = {0};
+
 typedef enum
 {
     BLE_RECV_STATE_IDLE = 0,
@@ -37,12 +28,6 @@
     BLE_RECV_STATE_RSSI,
     //BLE_RECV_STATE_LF,
 } E_BLERecvState;
-static char gps_header[20];
-typedef struct
-{
-    char m_pData[100];
-    uint32_t m_u32Len;
-} GGA_DataStruct;
 typedef struct
 {
     E_BLERecvState m_eState;
@@ -57,7 +42,7 @@
 uint8_t  mUsart2ReceivePack_before , mUsart2ReceivePack_now;
 uint8_t j_ct=0,CT_satrt_temp=0,CT_satrt=0,numb_base=0	;
 
-uint8_t id_cmpare[12]= {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x30, 0x30, 0x30, 0x31}; //123456780001//测试//RC2202A:
+uint8_t id_cmpare[12]={0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x30, 0x30, 0x30, 0x31};//123456780001//测试//RC2202A:
 uint32_t CT_sum=0;
 char char_broadcast_data[80];//广播数据
 
@@ -70,7 +55,7 @@
 uint16_t temp_16,temp_16_id,temp_16_distance,data_buff_start;
 
 
-uint16_t Checksum_u16(uint8_t* pdata, uint32_t len)
+uint16_t Checksum_u16(uint8_t* pdata, uint32_t len) 
 {
     uint16_t sum = 0;
     uint32_t i;
@@ -79,27 +64,47 @@
     sum = ~sum;
     return sum;
 }
-
+void SendComMap0(uint8_t data_length, uint8_t index)//表示成功读取的回应包
+	{
+	static uint8_t send_frame[EUART_RX_BUF_SIZE];
+	uint16_t checksum = 0;
+	send_frame[0] = 0x55;
+	send_frame[1] = 0xAA;
+	send_frame[2] = 0x03;
+	send_frame[3] = data_length+5;
+	send_frame[4] = CMD_REPLY;
+	send_frame[5] = index;
+	send_frame[6] = data_length;
+	memcpy(&send_frame[7], &g_com_map[index], data_length);
+	for(int i = 0; i<(data_length+5); i++)
+	{
+		checksum += send_frame[2+i];
+	}
+	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	memcpy(&send_frame[7+data_length],&checksum,2);
+	
+	 uart_send(UART_ID0, send_frame,data_length+9, NULL);	
+}
 void SendComMap(uint8_t data_length, uint8_t index)//表示成功读取的回应包
 {
-    static uint8_t send_frame[EUART_RX_BUF_SIZE];
-    uint16_t checksum = 0;
-    send_frame[0] = 0x55;
-    send_frame[1] = 0xAA;
-    send_frame[2] = 0x03;
-    send_frame[3] = data_length+5;
-    send_frame[4] = CMD_REPLY;
-    send_frame[5] = index;
-    send_frame[6] = data_length;
-    memcpy(&send_frame[7], &g_com_map[index], data_length);
-    for(int i = 0; i<(data_length+5); i++)
-    {
-        checksum += send_frame[2+i];
-    }
-    checksum = Checksum_u16(&send_frame[2],5+data_length);
-    memcpy(&send_frame[7+data_length],&checksum,2);
-
-    uart_send(UART_ID1, send_frame,data_length+9, NULL);
+	static uint8_t send_frame[EUART_RX_BUF_SIZE];
+	uint16_t checksum = 0;
+	send_frame[0] = 0x55;
+	send_frame[1] = 0xAA;
+	send_frame[2] = 0x03;
+	send_frame[3] = data_length+5;
+	send_frame[4] = CMD_REPLY;
+	send_frame[5] = index;
+	send_frame[6] = data_length;
+	memcpy(&send_frame[7], &g_com_map[index], data_length);
+	for(int i = 0; i<(data_length+5); i++)
+	{
+		checksum += send_frame[2+i];
+	}
+	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	memcpy(&send_frame[7+data_length],&checksum,2);
+	
+	 uart_send(UART_ID1, send_frame,data_length+9, NULL);	
 }
 void UpdateProcess(uint8_t index)
 {
@@ -110,158 +115,366 @@
         __disable_irq();
         result = flash_open(FLASH_ID0,NULL);
         if(!result)//打开成功
-            flash_erase(FLASH_ID0,APP_CONFIG_IAPFLAG_SECTOR_ADDR,FLASH_SECTOR_SIZE);
-        result = flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2);
+					flash_erase(FLASH_ID0,APP_CONFIG_IAPFLAG_SECTOR_ADDR,FLASH_SECTOR_SIZE);
+          result = flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2);
         __enable_irq();
         Serial0PutString("进入升级模式\r\n");
         g_com_map[CNT_UPDATE]=0;
         save_com_map_to_flash();
         delay_us(100000);
-        NVIC_SystemReset(); //软复位回到bootloader
+       NVIC_SystemReset(); //软复位回到bootloader   
     }
     if(index == 2*CNT_REBOOT)
-    {   g_com_map[CNT_REBOOT]=0;
+    {		g_com_map[CNT_REBOOT]=0;
         g_com_map[MAP_SIGN_INDEX]=0;
         save_com_map_to_flash();
-        delay_us(100000);
-        NVIC_SystemReset(); //软复位回到bootloader
+         delay_us(100000);
+        NVIC_SystemReset(); //软复位回到bootloader   
     }
     if(index == 2*CNT_RESTART)
     {
         g_com_map[CNT_RESTART]=0;
         save_com_map_to_flash();
-        delay_us(100000);
-        NVIC_SystemReset(); //软复位回到bootloader
+         delay_us(100000);
+       NVIC_SystemReset(); //软复位回到bootloader   
     }
 
 }
+extern uint8_t enable_sleep_count,sleep_flag;
 void UsartParseDataHandler(uint8_t data)
 {
-    if(state5V_prase_flag)
-    {   //升级程序
-        static UsartRecvPackState usart_receive_state = UsartReceiveWaitHead0;
-        uint16_t checksum = 0;
-        static uint8_t pack_datalen = 0,pack_length = 0,pack_index = 0,pack_msgtype = 0,pack_cmd = CMD_READ;
-        static uint8_t index = 0;
+static UsartRecvPackState usart_receive_state = UsartReceiveWaitHead0;
+	uint16_t checksum = 0;
+	static uint8_t pack_datalen = 0,pack_length = 0,pack_index = 0,pack_msgtype = 0,pack_cmd = CMD_READ;
+	static uint8_t index = 0;
 
 
 
+	
+	if(usart_receive_state == UsartReceiveWaitChecksum) {			//若收到校验和包
+		checksum = 0;
+		for(int i = 0; i<pack_length-5; i++) { 
+			checksum += mUsartReceivePack[i];
+		}
+		checksum += pack_cmd;
+		checksum += pack_length;
+		checksum += pack_index;
+		checksum += pack_datalen;
+		checksum += pack_msgtype;
+		if(((data + checksum)&0xff) == 0xFF)				//校验通过
+		{
+			switch(pack_cmd)
+			{
+				case CMD_WRITE:
+					//从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash
+				enable_sleep_count=0;
+					memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_datalen);
+				
+					if(mUsartReceivePack[0]==1)
+          UpdateProcess(pack_index);
+					//返回一个error状态
+					//SendComMap(pack_datalen,pack_index);
+					save_com_map_to_flash();
+					//delay_ms(100);
+					NVIC_SystemReset();
+					break;
+				case CMD_READ:
+                    enable_sleep_count=0;
+					//read包中data字节,即mUsartReceivePack[0]表示数据长度;
+				//从g_com_data结构体中的第index位置读取长度为mUsartReceivePack[0]的字节,发送出来
+					SendComMap(pack_datalen,pack_index>>1);		
+					break;
+				default:
+					break;
+			}
+		}
+		usart_receive_state = UsartReceiveWaitHead0;
+		pack_index = 0;
+		pack_length = 0;
+		index=0;
+	} else if((usart_receive_state == UsartReceiveWaitData) ) {	//若果收到的是正常通讯包
+		mUsartReceivePack[index] = data;
+		index++;
+		if(index == pack_length-5) {		//如果收到的index与长度相等
+			usart_receive_state = UsartReceiveWaitChecksum;
+		}
+	} else if(usart_receive_state == UsartReceiveWaitDataLen) {						//收到指令类型字节
+		pack_datalen = data;
+		usart_receive_state = UsartReceiveWaitData;
+	}else if(usart_receive_state == UsartReceiveWaitIndex) {						//收到指令类型字节
+		pack_index = data;
+		usart_receive_state = UsartReceiveWaitDataLen;
+	} else if(usart_receive_state == UsartReceiveWaitCMD) {							//收到指令类型字节
+		pack_cmd = data;
+		usart_receive_state = UsartReceiveWaitIndex;
+	} else if(usart_receive_state == UsartReceiveWaitLength) {						//收到长度字节
+		
+			pack_length = data;
+			pack_index = 0;			
+			usart_receive_state = UsartReceiveWaitCMD;
+		
+	} else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) {	//收到第一个包头
+		usart_receive_state = UsartReceiveWaitHead1;
+	} else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {	//收到第二个包头
+		usart_receive_state = UsartReceiveWaitMsgType;
+	}else if ((usart_receive_state == UsartReceiveWaitMsgType) && (data == 0x3)) {
+		usart_receive_state = UsartReceiveWaitLength;
+		pack_msgtype = data;
+	}
+	else {
+		usart_receive_state = UsartReceiveWaitHead0;
+		pack_index = 0;
+		pack_length = 0;
+	}	
 
-        if(usart_receive_state == UsartReceiveWaitChecksum)
-        {   //若收到校验和包
-            checksum = 0;
-            for(int i = 0; i<pack_length-5; i++) {
-                checksum += mUsartReceivePack[i];
-            }
-            checksum += pack_cmd;
-            checksum += pack_length;
-            checksum += pack_index;
-            checksum += pack_datalen;
-            checksum += pack_msgtype;
-            if(((data + checksum)&0xff) == 0xFF)				//校验通过
-            {
-                switch(pack_cmd)
-                {
-                case CMD_WRITE:
-                    //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash
-                    memcpy((uint8_t*)&g_com_map + pack_index, mUsartReceivePack, pack_datalen);
-                    if(mUsartReceivePack[0]==1)
-                        UpdateProcess(pack_index);
-                    //返回一个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>>1);
-                    break;
-                default:
-                    break;
-                }
-            }
-            usart_receive_state = UsartReceiveWaitHead0;
-            pack_index = 0;
-            pack_length = 0;
-            index=0;
-        } else if((usart_receive_state == UsartReceiveWaitData) ) {	//若果收到的是正常通讯包
-            mUsartReceivePack[index] = data;
-            index++;
-            if(index == pack_length-5) {		//如果收到的index与长度相等
-                usart_receive_state = UsartReceiveWaitChecksum;
-            }
-        } else if(usart_receive_state == UsartReceiveWaitDataLen) {						//收到指令类型字节
-            pack_datalen = data;
-            usart_receive_state = UsartReceiveWaitData;
-        } else if(usart_receive_state == UsartReceiveWaitIndex) {						//收到指令类型字节
-            pack_index = data;
-            usart_receive_state = UsartReceiveWaitDataLen;
-        } else if(usart_receive_state == UsartReceiveWaitCMD) {							//收到指令类型字节
-            pack_cmd = data;
-            usart_receive_state = UsartReceiveWaitIndex;
-        } else if(usart_receive_state == UsartReceiveWaitLength) {						//收到长度字节
-
-            pack_length = data;
-            pack_index = 0;
-            usart_receive_state = UsartReceiveWaitCMD;
-
-        } else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) {	//收到第一个包头
-            usart_receive_state = UsartReceiveWaitHead1;
-        } else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {	//收到第二个包头
-            usart_receive_state = UsartReceiveWaitMsgType;
-        } else if ((usart_receive_state == UsartReceiveWaitMsgType) && (data == 0x3)) {
-            usart_receive_state = UsartReceiveWaitLength;
-            pack_msgtype = data;
-        }
-        else {
-            usart_receive_state = UsartReceiveWaitHead0;
-            pack_index = 0;
-            pack_length = 0;
-        }
-    } else if(gps_prase_flag)
-    {
-//GPS解析数据
-//	static ST_BLERecv BLE_recvive;
-        GGA_DataStruct jdrecv,wdrecv,Posstate;
-        static uint8_t index = 0;
-        //接收数据开始分析
-        mUsart2ReceivePack[index]  =  data; //char数组传进来参数data
-        mUsart2ReceivePack_before  =  mUsart2ReceivePack_now;
-        mUsart2ReceivePack_now=data;
-        index++;
-        if( mUsart2ReceivePack_before == 0x0D && mUsart2ReceivePack_now==0x0A )//接收数据到“0x0D 0x0A”结束
-        {
-            //解析该条GPS报文
-            analysis_num=sscanf((char*)mUsart2ReceivePack,"$%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*[^,],%*s",gps_header,wdrecv.m_pData,jdrecv.m_pData,Posstate.m_pData);
-            if(!memcmp(gps_header,"GNGGA",5))
-            {
-                wd=strtod(wdrecv.m_pData,NULL);
-                jd=strtod(jdrecv.m_pData,NULL);
-                pos_state=atoi(Posstate.m_pData);
-            } else {
-                wd=0;
-                jd=0;
-            }
-            blink_led(&gps_success_state);
-            if(pos_state!=0)
-            {
-                //4g.jd=jd;
-                //4g.wd=wd;
-                gps_timeout_flag=1;//不超时接收状态
-                gps_need_data_flag=0;//接收数据完成
-                gps_wait_count=0;//清0接收状态
-//		gps_enable_flag=0;//收到有效数据关闭GPS
-            }
-            //memset(mUsart2ReceivePack,0,sizeof(mUsart2ReceivePack));
-            memset(wdrecv.m_pData,0,sizeof(wdrecv.m_pData));
-            memset(jdrecv.m_pData,0,sizeof(jdrecv.m_pData));
-            memset(Posstate.m_pData,0,sizeof(Posstate.m_pData));
-            index=0;
-            mUsart2ReceivePack_before=0;
-            mUsart2ReceivePack_now=0;
-        }
-    }
 }
+void uart0_send_ComMap_to_BLE(uint8_t data_length, uint8_t index)	
+{
+	static uint8_t send_frame[100];
+	uint16_t checksum = 0;
+	send_frame[0] = 0x55;
+	send_frame[1] = 0xAA;
+	send_frame[2] = 0x40;
+	send_frame[3] = CMD_REPLY;
+	send_frame[4] = data_length+6;
+	send_frame[5] = index;
+	memcpy(&send_frame[6], &g_com_map[index], data_length);
+	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	memcpy(&send_frame[6+data_length],&checksum,2);
+	
+	 uart_send(UART_ID0, send_frame,data_length+8, NULL);	
+}
+void Send_Commap_mk_to_ble(uint8_t data_length, uint8_t index)
+{
+static uint8_t send_frame[100];
+	uint16_t checksum = 0;
+	send_frame[0] = 0x55;
+	send_frame[1] = 0xAA;
+	send_frame[2] = 0x40;
+	send_frame[3] = CMD_WRITE;
+	send_frame[4] = data_length+6;
+	send_frame[5] = index;
+	memcpy(&send_frame[6], &g_com_map[index], data_length);
+	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	memcpy(&send_frame[6+data_length],&checksum,2);
+	
+	 uart_send(UART_ID0, send_frame,data_length+8, NULL);	
+}
+
+void read_com_map(uint8_t data_length, uint8_t index)
+{
+static uint8_t send_frame[100];
+	uint16_t checksum = 0;
+	send_frame[0] = 0x55;
+	send_frame[1] = 0xAA;
+	send_frame[2] = 0x40;
+	send_frame[3] = CMD_READ;
+	send_frame[4] = data_length;
+	send_frame[5] = index;
+	checksum = Checksum_u16(&send_frame[2],5+data_length);
+	 uart_send(UART_ID0, send_frame,6, NULL);	
+}
+void Usart0ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理
+{
+		// 全局变量
+static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0;
+
+static uint8_t index = 0;               // 缓冲区索引
+static uint8_t pack_cmd_type = 0;       // 指令类型
+static uint8_t pack_msg_type = 0;       // 消息类型
+static uint8_t pack_data_len = 0;       // 数据长度
+static uint8_t pack_param_addr = 0;     // 参数地址
+static uint16_t pack_checksum = 0;      // 接收到的校验和
+static uint16_t calculated_checksum = 0; // 计算得到的校验和
+static uint8_t send_frame[256];  // 用于计算校验和的帧
+static uint8_t frame_index = 0;  // 帧缓冲区索引
+static uint8_t pack_datalen = 0;
+    
+    switch(usart0_receive_state) {
+        case Usart0ReceiveWaitHead0:
+            if(data == 0x55) {
+                usart0_receive_state = Usart0ReceiveWaitHead1;
+                // 初始化帧缓冲区
+                frame_index = 0;
+                send_frame[frame_index++] = data;
+            }
+            break;
+            
+        case Usart0ReceiveWaitHead1:
+            if(data == 0xAA) {
+                usart0_receive_state = Usart0ReceiveWaitCmdType;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitCmdType:
+            if(data == 0x40) {
+                pack_cmd_type = data;
+                usart0_receive_state = Usart0ReceiveWaitMsgType;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitMsgType:
+            if(data == 0x2) {  // 写消息类型
+                pack_msg_type = data;
+                usart0_receive_state = Usart0ReceiveWaitDataLen;
+                send_frame[frame_index++] = data;
+            } else {
+                usart0_receive_state = Usart0ReceiveWaitHead0;
+            }
+            break;
+            
+        case Usart0ReceiveWaitDataLen:
+            pack_data_len = data;
+            index = 0;
+            usart0_receive_state = Usart0ReceiveWaitParamAddr;
+            send_frame[frame_index++] = data;
+            break;
+            
+        case Usart0ReceiveWaitParamAddr:
+            pack_param_addr = data;
+            usart0_receive_state = Usart0ReceiveWaitData;
+            send_frame[frame_index++] = data;
+            break;
+            
+        case Usart0ReceiveWaitData:
+            mUsart2ReceivePack[index++] = data;
+            send_frame[frame_index++] = data;
+            if(index == pack_data_len-6) {
+                usart0_receive_state = Usart0ReceiveWaitChecksum;
+								pack_datalen=pack_data_len-6;
+            }
+            break;
+            
+        case Usart0ReceiveWaitChecksum:
+            pack_checksum = data << 8;  // 高字节
+            pack_checksum |= data;  // 低字节
+            
+            // 计算校验和 (从第3个字节开始,长度为5+数据长度)
+            calculated_checksum = Checksum_u16(&send_frame[2],pack_datalen+5);
+            
+            // 验证校验和
+            if(pack_checksum == calculated_checksum) {
+                // 校验通过,处理数据
+									switch(pack_cmd_type)
+									{
+										case CMD_WRITE:
+											//从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash
+										
+											memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
+										
+											//返回一个error状态
+											//SendComMap(pack_datalen,pack_index);
+											save_com_map_to_flash();
+											//delay_ms(100);
+//											NVIC_SystemReset();
+											break;
+										case CMD_READ:
+													Send_Commap_mk_to_ble(pack_datalen,pack_param_addr);	
+											
+											break;
+										case CMD_REPLY:
+											memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
+											save_com_map_to_flash();
+											break;
+										default:
+											break;
+									}
+            }
+            
+            // 重置状态机
+            usart0_receive_state = Usart0ReceiveWaitHead0;
+            index = 0;
+            frame_index = 0;
+            break;
+            
+        default:
+            usart0_receive_state = Usart0ReceiveWaitHead0;
+            index = 0;
+            frame_index = 0;
+            break;
+    }
+
+	
+//	if(usart_receive_state == UsartReceiveWaitChecksum) {			//若收到校验和包
+//		checksum = 0;
+//		for(int i = 0; i<pack_length-5; i++) { 
+//			checksum += mUsart2ReceivePack[i];
+//		}
+//		checksum += pack_cmd;
+//		checksum += pack_length;
+//		checksum += pack_index;
+//		checksum += pack_datalen;
+//		checksum += pack_msgtype;
+//		if(((data + checksum)&0xff) == 0xFF)				//校验通过
+//		{
+//			switch(pack_cmd)
+//			{
+//				case CMD_WRITE:
+//					//从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash
+//				enable_sleep_count=0;
+//					memcpy((uint8_t*)&g_com_map + pack_index, mUsart2ReceivePack, pack_datalen);
+//				
+//					if(mUsart2ReceivePack[0]==1)
+//          UpdateProcess(pack_index);
+//					//返回一个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]的字节,发送出来
+//					SendComMap0(pack_datalen,pack_index>>1);		
+//					break;
+//				default:
+//					break;
+//			}
+//		}
+//		usart_receive_state = UsartReceiveWaitHead0;
+//		pack_index = 0;
+//		pack_length = 0;
+//		index=0;
+//	} else if((usart_receive_state == UsartReceiveWaitData) ) {	//若果收到的是正常通讯包
+//		mUsart2ReceivePack[index] = data;
+//		index++;
+//		if(index == pack_length-5) {		//如果收到的index与长度相等
+//			usart_receive_state = UsartReceiveWaitChecksum;
+//		}
+//	} else if(usart_receive_state == UsartReceiveWaitDataLen) {						//收到指令类型字节
+//		pack_datalen = data;
+//		usart_receive_state = UsartReceiveWaitData;
+//	}else if(usart_receive_state == UsartReceiveWaitIndex) {						//收到指令类型字节
+//		pack_index = data;
+//		usart_receive_state = UsartReceiveWaitDataLen;
+//	} else if(usart_receive_state == UsartReceiveWaitCMD) {							//收到指令类型字节
+//		pack_cmd = data;
+//		usart_receive_state = UsartReceiveWaitIndex;
+//	} else if(usart_receive_state == UsartReceiveWaitLength) {						//收到长度字节
+//		
+//			pack_length = data;
+//			pack_index = 0;			
+//			usart_receive_state = UsartReceiveWaitCMD;
+//		
+//	} else if((usart_receive_state == UsartReceiveWaitHead0) && (data == 0x55)) {	//收到第一个包头
+//		usart_receive_state = UsartReceiveWaitHead1;
+//	} else if((usart_receive_state == UsartReceiveWaitHead1) && (data == 0xAA)) {	//收到第二个包头
+//		usart_receive_state = UsartReceiveWaitMsgType;
+//	}else if ((usart_receive_state == UsartReceiveWaitMsgType) && (data == 0x3)) {
+//		usart_receive_state = UsartReceiveWaitLength;
+//		pack_msgtype = data;
+//	}
+//	else {
+//		usart_receive_state = UsartReceiveWaitHead0;
+//		pack_index = 0;
+//		pack_length = 0;
+//	}
+}
+
 

--
Gitblit v1.9.3