#include #include #include #include #include "Usart.h" #include "mk_flash.h" //#include "dw_app.h" //#include "UsartII.h" //#include "main.h" #include "board.h" //#include "Spi.h" //#include "radio.h" //#define EUART_RX_BUF_SIZE 100 #define Label_id_local 1 //±êÇ©id #define data_buff_MAX 50 //»ùÕ¾ÊýÁ¿ #define Lora_TXD_bff_MAX 220 //·¢ËÍ»º´æÇø´óС >4+8+4*»ùÕ¾ÊýÁ¿+2=14+4*»ùÕ¾ÊýÁ¿ uint8_t mUsartReceivePack[100] = {0}; uint8_t mUsart2ReceivePack[100] = {0}; typedef enum { BLE_RECV_STATE_IDLE = 0, BLE_RECV_STATE_MAC, BLE_RECV_STATE_RSSI, //BLE_RECV_STATE_LF, } E_BLERecvState; typedef struct { E_BLERecvState m_eState; char m_macHeader[100],m_rssiHeader2[100]; uint32_t m_u32HeaderLen,m_u32Header2Len; char m_acRecvBuf[128]; uint32_t m_u32RecvLen; } ST_BLERecv; 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£º uint32_t CT_sum=0; char char_broadcast_data[80];//¹ã²¥Êý¾Ý uint8_t Lora_TXD_bff[Lora_TXD_bff_MAX]; //lora·¢ËÍ»º´æÇø uint16_t data_buff[data_buff_MAX][2]; //»ùÕ¾Êý¾Ý»º´æÇø char char_mac[14],char_ssi[6]; //int32_t distance_int; double ssi_double; 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 sum = 0; uint32_t i; for(i=0; i>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; } } 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],4+data_length); memcpy(&send_frame[6+data_length],&checksum,2); uart_send(UART_ID0, send_frame,data_length+8, NULL); } void mk_write_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],4+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+6; send_frame[5] = index; checksum = Checksum_u16(&send_frame[2],4); uart_send(UART_ID0, send_frame,8, NULL); } uint16_t pack_checksum_test=0,test_calculate = 0; void Usart3ParseDataHandler(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 == 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||data==0x3) { // ¶Áд»Ø¸´ÏûÏ¢ÀàÐÍ 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; 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) { usart0_receive_state = Usart0ReceiveWaitChecksum1; pack_datalen=pack_data_len-6; } break; case Usart0ReceiveWaitChecksum1: pack_checksum = data << 8; // ¸ß×Ö½Ú pack_checksum_test = data << 8; // ¸ß×Ö½Ú send_frame[frame_index++] = data; usart0_receive_state = Usart0ReceiveWaitChecksum2; break; case Usart0ReceiveWaitChecksum2: pack_checksum |= data; // µÍ×Ö½Ú pack_checksum_test |= 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); } test_calculate=calculated_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); save_com_map_to_flash(); //delay_ms(100); // NVIC_SystemReset(); 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(); // 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>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; // } }