#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 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; 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; } } // else if(gps_prase_flag) // { // static uint8_t index = 0; ////GPS½âÎöÊý¾Ý //// static ST_BLERecv BLE_recvive; // GGA_DataStruct jdrecv,wdrecv,Posstate; // // //½ÓÊÕÊý¾Ý¿ªÊ¼·ÖÎö // 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) // blink_led(&gps_success_state); // pos_state=atoi(Posstate.m_pData); // if(pos_state!=0) // { // gps_timeout_flag=0;//²»³¬Ê±½ÓÊÕ״̬ // // gps_need_data_flag=0;//½ÓÊÕÊý¾ÝÍê³É // gps_wait_count=0;//Çå0½ÓÊÕ״̬ // //gps_power_state=0;//¹Ø±Õgps // if(gps_open_flag){ // UDPClient_UploadGPS();//ÉÏ´«GPS³¬Ê±ÎÞЧÊý¾Ý // gps_power_state=0;//Á¢¼´¹Øµôgps£¬·ÀÖ¹´®¿ÚÊý¾Ý¹ý¶àµ¼ÖÂÎÞ·¨Çл»ÐÝÃß // update_led_power_state(); // } // 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; // } // } }