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 | 271 +++++++++++++++++++++++++++++------------------------- 1 files changed, 145 insertions(+), 126 deletions(-) diff --git a/keil/include/drivers/serial_at_cmd_app.c b/keil/include/drivers/serial_at_cmd_app.c index aa7ce9b..77c2ad3 100644 --- a/keil/include/drivers/serial_at_cmd_app.c +++ b/keil/include/drivers/serial_at_cmd_app.c @@ -72,7 +72,7 @@ send_frame[1] = 0xAA; send_frame[2] = 0x03; send_frame[3] = data_length+5; - send_frame[4] = CMD_REPLY; +// send_frame[4] = CMD_REPLY; send_frame[5] = index; send_frame[6] = data_length; memcpy(&send_frame[7], &g_com_map[index], data_length); @@ -93,7 +93,7 @@ send_frame[1] = 0xAA; send_frame[2] = 0x03; send_frame[3] = data_length+5; - send_frame[4] = CMD_REPLY; +// send_frame[4] = CMD_REPLY; send_frame[5] = index; send_frame[6] = data_length; memcpy(&send_frame[7], &g_com_map[index], data_length); @@ -235,16 +235,16 @@ send_frame[0] = 0x55; send_frame[1] = 0xAA; send_frame[2] = 0x40; - send_frame[3] = CMD_REPLY; + //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); + checksum = Checksum_u16(&send_frame[2],4+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) +void mk_write_to_ble(uint8_t data_length, uint8_t index) { static uint8_t send_frame[100]; uint16_t checksum = 0; @@ -255,7 +255,7 @@ 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); + checksum = Checksum_u16(&send_frame[2],4+data_length); memcpy(&send_frame[6+data_length],&checksum,2); uart_send(UART_ID0, send_frame,data_length+8, NULL); @@ -269,11 +269,83 @@ send_frame[1] = 0xAA; send_frame[2] = 0x40; send_frame[3] = CMD_READ; - send_frame[4] = data_length; + send_frame[4] = data_length+6; send_frame[5] = index; - checksum = Checksum_u16(&send_frame[2],5+data_length); - uart_send(UART_ID0, send_frame,6, NULL); + checksum = Checksum_u16(&send_frame[2],4); + uart_send(UART_ID0, send_frame,8, NULL); } +uint16_t pack_checksum_test=0,test_calculate = 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); + //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蓝牙数据分析处理 { // 全局变量 @@ -290,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) { @@ -310,7 +383,7 @@ break; case Usart0ReceiveWaitCmdType: - if(data == 0x40) { + if(data == 64) { pack_cmd_type = data; usart0_receive_state = Usart0ReceiveWaitMsgType; send_frame[frame_index++] = data; @@ -320,7 +393,7 @@ break; case Usart0ReceiveWaitMsgType: - if(data == 0x2) { // 写消息类型 + if(data == 0x2||data==0x1) { // 读写回复消息类型 pack_msg_type = data; usart0_receive_state = Usart0ReceiveWaitDataLen; send_frame[frame_index++] = data; @@ -332,56 +405,79 @@ 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 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: - mUsart2ReceivePack[index++] = data; - send_frame[frame_index++] = data; - if(index == pack_data_len-6) { - usart0_receive_state = Usart0ReceiveWaitChecksum; - pack_datalen=pack_data_len-6; - } + 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 Usart0ReceiveWaitChecksum: - pack_checksum = data << 8; // 高字节 - pack_checksum |= data; // 低字节 - - // 计算校验和 (从第3个字节开始,长度为5+数据长度) - calculated_checksum = Checksum_u16(&send_frame[2],pack_datalen+5); - + 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_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); + 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(); - //delay_ms(100); -// NVIC_SystemReset(); + //memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen); + + 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; +// 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; } @@ -400,81 +496,4 @@ 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