From da80b96a9d0f2f9dc6e23d1a1830cc2384f2bd0b Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 01 八月 2025 13:45:57 +0800 Subject: [PATCH] 加入升级代码,但是空间不够 先提交一下 改为分成两个app 由boot来进行跳转 --- keil/include/drivers/serial_at_cmd_app.c | 420 +++++++++++++++++------------------------------------------ 1 files changed, 120 insertions(+), 300 deletions(-) diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c index d1ad26a..77c2ad3 100644 --- a/keil/include/drivers/serial_at_cmd_app.c +++ b/keil/include/drivers/serial_at_cmd_app.c @@ -275,7 +275,78 @@ uart_send(UART_ID0, send_frame,8, NULL); } uint16_t pack_checksum_test=0,test_calculate = 0; -void Usart3ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理 +extern uint16_t set_mk_time; +void Send_Reply_To_Ble(void) +{ +static uint8_t send_frame[100]; +// uint16_t checksum = 0; + send_frame[0] = 0x55; + send_frame[1] = 0xAA; + send_frame[2] = 0x41; + send_frame[3] = CMD_MK_REPLY; + uart_send(UART_ID0, send_frame,4, NULL); +} +void mk_send_message_to_BLE(void) +{ +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_MK_TO_BLE; + send_frame[4]=8;//数据长度 + send_frame[5]=0; + send_frame[6]=0; + send_frame[7]=0; + memcpy(&send_frame[8],&set_mk_time,2); + checksum=Checksum_u16(&send_frame[2],8); + memcpy(&send_frame[10],&checksum,2); + //LOG_INFO(TRACE_MODULE_APP,"发给ble的checksum %#x\r\n",checksum); + uart_send(UART_ID0, send_frame,12, NULL); + uart_send(UART_ID1, send_frame,12, NULL); +} +void mk_send_updata_to_BLE(void) +{ +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_MK_TO_BLE; + send_frame[4]=8;//数据长度 + send_frame[5]=0xcc; + send_frame[6]=0xcc; + send_frame[7]=0; + memcpy(&send_frame[8],&set_mk_time,2); + checksum=Checksum_u16(&send_frame[2],8); + memcpy(&send_frame[10],&checksum,2); + //LOG_INFO(TRACE_MODULE_APP,"发给ble的checksum %#x\r\n",checksum); + uart_send(UART_ID0, send_frame,12, NULL); + uart_send(UART_ID1, send_frame,12, NULL); +} +void mk_send_offupdata_to_BLE(void) +{ +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_MK_TO_BLE; + send_frame[4]=8;//数据长度 + send_frame[5]=0xcc; + send_frame[6]=0xcd; + send_frame[7]=0; + memcpy(&send_frame[8],&set_mk_time,2); + checksum=Checksum_u16(&send_frame[2],8); + memcpy(&send_frame[10],&checksum,2); + //LOG_INFO(TRACE_MODULE_APP,"发给ble的checksum %#x\r\n",checksum); + uart_send(UART_ID0, send_frame,12, NULL); + uart_send(UART_ID1, send_frame,12, NULL); +} +extern uint8_t bat_percent; +extern uint32_t dev_id; + +void Usart0ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理 { // 全局变量 static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0; @@ -291,6 +362,7 @@ static uint8_t frame_index = 0; // 帧缓冲区索引 static uint8_t pack_datalen = 0; + LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data); switch(usart0_receive_state) { case Usart0ReceiveWaitHead0: if(data == 0x55) { @@ -321,7 +393,7 @@ break; case Usart0ReceiveWaitMsgType: - if(data == 0x2||data==0x1||data==0x3) { // 读写回复消息类型 + if(data == 0x2||data==0x1) { // 读写回复消息类型 pack_msg_type = data; usart0_receive_state = Usart0ReceiveWaitDataLen; send_frame[frame_index++] = data; @@ -333,74 +405,79 @@ case Usart0ReceiveWaitDataLen: pack_data_len = data; index = 0; - usart0_receive_state = Usart0ReceiveWaitParamAddr; + usart0_receive_state = Usart0ReceiveWaitData; send_frame[frame_index++] = data; break; - case Usart0ReceiveWaitParamAddr: - pack_param_addr = data; - if(pack_msg_type==CMD_READ) - { - usart0_receive_state = Usart0ReceiveWaitChecksum1; - pack_datalen=pack_data_len-6; - }else{ - usart0_receive_state = Usart0ReceiveWaitData; - } - send_frame[frame_index++] = data; - break; +// case Usart0ReceiveWaitParamAddr: +// pack_param_addr = data; +// if(pack_msg_type==CMD_READ) +// { +// usart0_receive_state = Usart0ReceiveWaitChecksum1; +// pack_datalen=pack_data_len-6; +// }else{ +// usart0_receive_state = Usart0ReceiveWaitData; +// } +// send_frame[frame_index++] = data; +// break; case Usart0ReceiveWaitData: send_frame[frame_index++] = data; mUsart2ReceivePack[index++] = data; - if(index == pack_data_len-6) { + if(index == pack_data_len-3) { usart0_receive_state = Usart0ReceiveWaitChecksum1; - pack_datalen=pack_data_len-6; + //pack_datalen=pack_data_len; } break; case Usart0ReceiveWaitChecksum1: - pack_checksum = data << 8; // 高字节 - pack_checksum_test = data << 8; // 高字节 + pack_checksum = data; // 高字节 + pack_checksum_test = data; // 高字节 send_frame[frame_index++] = data; usart0_receive_state = Usart0ReceiveWaitChecksum2; + LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data); break; case Usart0ReceiveWaitChecksum2: - pack_checksum |= data; // 低字节 - pack_checksum_test |= data; // 低字节 + pack_checksum |= data<<8; // 低字节 + pack_checksum_test |= data<<8; // 低字节 + LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data); // 计算校验和 (从第3个字节开始,长度为4+数据长度) - if(pack_msg_type!=CMD_READ) - { - calculated_checksum = Checksum_u16(&send_frame[2],pack_datalen+4); - }else{ - calculated_checksum = Checksum_u16(&send_frame[2],4); - } +// if(pack_msg_type!=CMD_REPLY) +// { + calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len); +// }else{ +// //calculated_checksum = Checksum_u16(&send_frame[2],4); +// +// } test_calculate=calculated_checksum; + LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum); // 验证校验和 if(pack_checksum == calculated_checksum) { // 校验通过,处理数据 switch(pack_msg_type) { - //case CMD_REPLY: - case CMD_WRITE: - //从mUsartReceivePack中读取pack_length长度的字节,放到全局变量中,赋值保存的参数并且存入flash - - memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen); - - //返回一个error状态 - //SendComMap(pack_datalen,pack_index); + case CMD_BLE_TO_MK: + memcpy(&dev_id,&mUsart2ReceivePack[0],2); + bat_percent=mUsart2ReceivePack[2]; + memcpy(&set_mk_time,&mUsart2ReceivePack[3],2); + memcpy(&g_com_map[DEV_ID],&dev_id,2); + memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2); + Send_Reply_To_Ble(); + LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent); save_com_map_to_flash(); - //delay_ms(100); -// NVIC_SystemReset(); + //memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen); + + break; - case CMD_READ: - uart0_send_ComMap_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(); +// case CMD_MK_TO_BLE: +// //uart0_send_ComMap_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; } @@ -418,262 +495,5 @@ 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; -// } -} -extern uint16_t set_mk_time; -void Send_Reply_To_Ble(void) -{ -static uint8_t send_frame[100]; -// uint16_t checksum = 0; - send_frame[0] = 0x55; - send_frame[1] = 0xAA; - send_frame[2] = 0x41; - send_frame[3] = CMD_MK_REPLY; - uart_send(UART_ID0, send_frame,4, NULL); -} -void mk_send_message_to_BLE(void) -{ -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_MK_TO_BLE; - send_frame[4]=8;//数据长度 - send_frame[5]=0; - send_frame[6]=0; - send_frame[7]=0; - memcpy(&send_frame[8],&set_mk_time,2); - checksum=Checksum_u16(&send_frame[2],8); - memcpy(&send_frame[10],&checksum,2); - uart_send(UART_ID0, send_frame,12, NULL); -} -extern uint8_t bat_percent; -extern uint32_t dev_id; - -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; -// -// LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data); -// 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 == 64) { -// pack_cmd_type = data; -// usart0_receive_state = Usart0ReceiveWaitMsgType; -// send_frame[frame_index++] = data; -// } else { -// usart0_receive_state = Usart0ReceiveWaitHead0; -// } -// break; -// -// case Usart0ReceiveWaitMsgType: -// if(data == 0x2||data==0x1) { // 读写回复消息类型 -// 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 = Usart0ReceiveWaitData; -// send_frame[frame_index++] = data; -// break; -// -//// case Usart0ReceiveWaitParamAddr: -//// pack_param_addr = data; -//// if(pack_msg_type==CMD_READ) -//// { -//// usart0_receive_state = Usart0ReceiveWaitChecksum1; -//// pack_datalen=pack_data_len-6; -//// }else{ -//// usart0_receive_state = Usart0ReceiveWaitData; -//// } -//// send_frame[frame_index++] = data; -//// break; -// -// case Usart0ReceiveWaitData: -// send_frame[frame_index++] = data; -// mUsart2ReceivePack[index++] = data; -// -// if(index == pack_data_len-3) { -// usart0_receive_state = Usart0ReceiveWaitChecksum1; -// //pack_datalen=pack_data_len; -// } -// break; -// -// case Usart0ReceiveWaitChecksum1: -// pack_checksum = data; // 高字节 -// pack_checksum_test = data; // 高字节 -// send_frame[frame_index++] = data; -// usart0_receive_state = Usart0ReceiveWaitChecksum2; -// LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data); -// break; -// case Usart0ReceiveWaitChecksum2: -// pack_checksum |= data<<8; // 低字节 -// pack_checksum_test |= data<<8; // 低字节 -// LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data); -// // 计算校验和 (从第3个字节开始,长度为4+数据长度) -//// if(pack_msg_type!=CMD_REPLY) -//// { -// calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len); -//// }else{ -//// //calculated_checksum = Checksum_u16(&send_frame[2],4); -//// -//// } -// test_calculate=calculated_checksum; -// LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum); -// // 验证校验和 -// if(pack_checksum == calculated_checksum) { -// // 校验通过,处理数据 -// switch(pack_msg_type) -// { -// case CMD_BLE_TO_MK: -// memcpy(&dev_id,&mUsart2ReceivePack[0],2); -// bat_percent=mUsart2ReceivePack[2]; -// memcpy(&set_mk_time,&mUsart2ReceivePack[3],2); -// memcpy(&g_com_map[DEV_ID],&dev_id,2); -// memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2); -// Send_Reply_To_Ble(); -// LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent); -// save_com_map_to_flash(); -// //memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen); -// - -// break; -//// case CMD_MK_TO_BLE: -//// //uart0_send_ComMap_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; -// } } -- Gitblit v1.9.3