#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],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>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; // } }