#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" #include "DBG.h" #define MSG_RW 3 #define MSG_RW_TAG_ANC 0x30 //#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[150] = {0}; uint8_t GPS_GGAmessage[150]= {0}; uint8_t GPS_GSVmessage[150]= {0}; double jd,wd; int analysis_num,pos_state; uint8_t state5V_prase_flag=1,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,gps_open_flag; extern uint8_t gps_success_state,gps_enable_flag,gps_need_data_flag,gps_timeout_flag,gps_power_state; extern uint16_t gps_wait_count; typedef enum { BLE_RECV_STATE_IDLE = 0, BLE_RECV_STATE_MAC, 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; 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 if ((shell_receive_state == 0) && (data == 0x03)) { shell_receive_state = 1; uart_send(UART_ID1, data,1, NULL); } else if ((shell_receive_state == 1) && (data == 0x03)) { shell_receive_state = 2; uart_send(UART_ID1, data,1, NULL); } else if ((shell_receive_state == 2) && (data == 0x03)) { DBG_SetMode(DBG_MODE_SHELL); uart_send(UART_ID1, data,1, NULL); shell_receive_state=0; } else { usart_receive_state = UsartReceiveWaitHead0; pack_index = 0; pack_length = 0; } } else if(gps_prase_flag) { // static uint8_t index = 0; //GPS½âÎöÊý¾Ý // static ST_BLERecv BLE_recvive; // GGA_DataStruct jdrecv,wdrecv,Posstate; // GPS_RecvFsm(data); // l_u8GPSBuff[l_u8GPSLen++] = data; // if(l_u8GPSLen >= sizeof(l_u8GPSBuff)) // { // NTRIPApp_ReportGGA(l_u8GPSBuff, l_u8GPSLen); // l_u8GPSLen = 0; // } // l_u8GPSRecvTick = HIDO_TimerGetTick(); // //½ÓÊÕÊý¾Ý¿ªÊ¼·ÖÎö // 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)) // { // memcpy(GPS_GGAmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); // // wd=strtod(wdrecv.m_pData,NULL); // jd=strtod(jdrecv.m_pData,NULL); // if(wd!=0) // pos_state=atoi(Posstate.m_pData); // if(pos_state!=0) // { // pos_state=0;//·ÀÖ¹¶à´Î½øÈë // } // // } //// if(!memcmp(gps_header,"GBGSV",5)) //// {memcpy(GPS_GSVmessage,mUsart2ReceivePack,strlen(mUsart2ReceivePack)-2); //// GPS_ParseGSV(GPS_GSVmessage,strlen(GPS_GSVmessage)); //// //// } // // 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; // } } } double d_value; uint16_t pwtag_idrec,pwanc_id,pwanc_value; uint8_t taguserdata_recflag[TAG_NUM_IN_SYS],pwtag_index = 0; extern uint16_t mubiao_anchor_ID; struct pwtag_structure pwtag; extern uint8_t Get_anchor_appdata_flag; extern uint8_t Get_anchor_appdata_num; void Usart1ParseDataHandler(uint8_t data) { if(state5V_prase_flag&&!g_com_map[MODBUS_MODE]) { //Éý¼¶³ÌÐò 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; iAIRCR = 0X05FA0000|(unsigned int)0x04; //Èí¸´Î»»Øµ½bootloader break; } 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; } break; case MSG_RW_TAG_ANC: //ÅúÁ¿Ð޸ıêÇ©²ÎÊý memcpy(&pwtag_idrec,&mUsartReceivePack[2],2); if(mUsartReceivePack[0]<0x10) //ÅжÏÊÇÐ޸ĻùÕ¾»¹ÊÇÐ޸ıêÇ©¡£ { if(mUsartReceivePack[0]==0x06)//Èç¹ûÊÇÉý¼¶ { for(uint8_t i=0; i=PWTAG_MAXGROUPNUM) { pwtag_index = 0; } pwtag.index[pwtag_index] = mUsartReceivePack[1]; pwtag.remain_time[pwtag_index] = 5; pwtag.duorxie[pwtag_index]=mUsartReceivePack[0]; memcpy(pwtag.groupid[pwtag_index],&mUsartReceivePack[2],4); pwtag.len[pwtag_index] = pack_length-8; memcpy(&pwtag.value[pwtag_index][0],&g_com_map[YAOGEIANC_UPWENJIAN_DAXIAO],2); memcpy(&mubiao_anchor_ID,&mUsartReceivePack[2],2); } } } else { for(uint8_t i=0; i=PWTAG_MAXGROUPNUM) { pwtag_index = 0; } pwtag.index[pwtag_index] = mUsartReceivePack[1]; pwtag.remain_time[pwtag_index] = 5; pwtag.duorxie[pwtag_index]=mUsartReceivePack[0]; memcpy(pwtag.groupid[pwtag_index],&mUsartReceivePack[2],4); pwtag.len[pwtag_index] = pack_length-8; memcpy(&pwtag.value[pwtag_index][0],&mUsartReceivePack[6],pack_length-8); } } } } 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-2) { //Èç¹ûÊÕµ½µÄindexÓ볤¶ÈÏàµÈ usart_receive_state = UsartReceiveWaitChecksum; } } else if(usart_receive_state == UsartReceiveWaitLength) { //ÊÕµ½³¤¶È×Ö½Ú pack_length = data; pack_index = 0; usart_receive_state = UsartReceiveWaitData; } 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)) { usart_receive_state = UsartReceiveWaitLength; pack_msgtype = data; } else { usart_receive_state = UsartReceiveWaitHead0; pack_index = 0; pack_length = 0; } } }