| | |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); |
| | | } |
| | | } |
| | | u8 frame_len; |
| | | u8 frame_len,jumptime; |
| | | u8 rec_gpsdata[1000]; |
| | | extern u8 RTCMdata[2000]; |
| | | u16 recgpsdata_i,recdata_len; |
| | | void UWBSendOnePackData(u8* data_addr,u8 len) |
| | | { |
| | | delay_ms(jumptime); |
| | | g_Resttimer = 0; |
| | | LED0_BLINK; |
| | | g_start_sync_flag=1; |
| | |
| | | USART_puts(rec_gpsdata,recgpsdata_i); |
| | | break; |
| | | } |
| | | }else{ |
| | | jumptime=time32_incr%20; |
| | | } |
| | | }else{ |
| | | jumptime=time32_incr%20; |
| | | } |
| | | } |
| | | } |
| | | |
| | | char *HIDO_UtilStrnchr(const char *_pcStr, char _cChr, HIDO_UINT32 u32N) |
| | | { |
| | | int32_t i = 0; |
| | | for (i = 0; i < u32N; i++) |
| | | { |
| | | if (_pcStr[i] == _cChr) |
| | | { |
| | | return (char *) (_pcStr + i); |
| | | } |
| | | } |
| | | |
| | | return NULL; |
| | | } |
| | | |
| | | HIDO_UINT8 HIDO_UtilCharToHex(HIDO_CHAR _cCh) |
| | | { |
| | | return (_cCh >= '0' && _cCh <= '9') ? |
| | | (_cCh - '0') : |
| | | (_cCh >= 'A' && _cCh <= 'F' ? |
| | | (_cCh - 'A' + 0x0A) : |
| | | (_cCh >= 'a' && _cCh <= 'f' ? _cCh - 'a' + 0x0A : 0)); |
| | | } |
| | | |
| | | HIDO_UINT32 HIDO_UtilStrBufToInt(HIDO_CHAR *_pcStringBuf, HIDO_UINT32 _u32BufLen) |
| | | { |
| | | HIDO_UINT32 u32Temp = 0; |
| | | |
| | | while (_u32BufLen != 0) |
| | | { |
| | | u32Temp = u32Temp * 10 + HIDO_UtilCharToHex(*_pcStringBuf); |
| | | _pcStringBuf++; |
| | | _u32BufLen--; |
| | | } |
| | | |
| | | return u32Temp; |
| | | } |
| | | |
| | | /****************************************************************************** |
| | | Description : Get gps latitude from gps data |
| | | parameter : data: gps data pointer, len: gps data length, gps: ST_GPS pointer |
| | | Return : TRUE on success, FALSE on fail |
| | | author : DuJian |
| | | history : 2012-7-27 new |
| | | ******************************************************************************/ |
| | | static int32_t GPS_ParseLat(HIDO_DataStruct *_pstLatData, double *lat) |
| | | { |
| | | uint32_t u32Len = _pstLatData->m_u32Len; |
| | | char *pcStart = (char *) _pstLatData->m_pData; |
| | | char *pcDot = NULL; |
| | | uint32_t u32TempLen = 0; |
| | | double dd; |
| | | double mmmm; |
| | | double mm; |
| | | |
| | | if (u32Len < 9) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | pcDot = HIDO_UtilStrnchr(pcStart, '.', u32Len); |
| | | if (NULL == pcDot || (pcDot - pcStart) != 4) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | dd = HIDO_UtilStrBufToInt(pcStart, 2); |
| | | mm = HIDO_UtilStrBufToInt(pcStart + 2, 2); |
| | | u32TempLen = u32Len - (pcDot + 1 - pcStart); |
| | | mmmm = HIDO_UtilStrBufToInt(pcDot + 1, u32TempLen); |
| | | while(u32TempLen != 0) |
| | | { |
| | | mmmm /= 10.0; |
| | | u32TempLen--; |
| | | } |
| | | |
| | | mm = mm + mmmm; |
| | | *lat = dd + (mm / 60.0); |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | static int32_t GPS_ParseHeight(HIDO_DataStruct *_pstLatData, double *height) |
| | | { |
| | | uint32_t u32Len = _pstLatData->m_u32Len; |
| | | char *pcStart = (char *) _pstLatData->m_pData; |
| | | char *pcDot = NULL; |
| | | uint32_t u32TempLen = 0; |
| | | double dd; |
| | | double mmmm; |
| | | double mm; |
| | | |
| | | pcDot = HIDO_UtilStrnchr(pcStart, '.', u32Len); |
| | | u32TempLen = pcDot - pcStart; |
| | | mm = HIDO_UtilStrBufToInt(pcStart, u32TempLen); |
| | | u32TempLen = u32Len - (pcDot + 1 - pcStart); |
| | | mmmm = HIDO_UtilStrBufToInt(pcDot + 1, u32TempLen); |
| | | while(u32TempLen != 0) |
| | | { |
| | | mmmm /= 10.0; |
| | | u32TempLen--; |
| | | } |
| | | *height = mm + mmmm; |
| | | return HIDO_OK; |
| | | } |
| | | /****************************************************************************** |
| | | Description : Get gps longitude from gps data |
| | | parameter : data: gps data pointer, len: gps data length, gps: ST_GPS pointer |
| | | Return : TRUE on success, FALSE on fail |
| | | author : DuJian |
| | | history : 2012-7-27 new |
| | | ******************************************************************************/ |
| | | static int32_t GPS_ParseLon(HIDO_DataStruct *_pstLonData, double *lon) |
| | | { |
| | | uint32_t u32Len = _pstLonData->m_u32Len; |
| | | char *pcStart = (char *) _pstLonData->m_pData; |
| | | char *pcDot = NULL; |
| | | uint32_t u32TempLen = 0; |
| | | double ddd; |
| | | double mmmm; |
| | | double mm; |
| | | |
| | | if (u32Len < 10) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | pcDot = HIDO_UtilStrnchr(pcStart, '.', u32Len); |
| | | if (NULL == pcDot || (pcDot - pcStart) != 5) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | ddd = HIDO_UtilStrBufToInt(pcStart, 3); |
| | | mm = HIDO_UtilStrBufToInt(pcStart + 3, 2); |
| | | u32TempLen = u32Len - (pcDot + 1 - pcStart); |
| | | mmmm = HIDO_UtilStrBufToInt(pcDot + 1, u32TempLen); |
| | | while(u32TempLen != 0) |
| | | { |
| | | mmmm /= 10.0; |
| | | u32TempLen--; |
| | | } |
| | | |
| | | mm = mm + mmmm; |
| | | *lon = ddd + (mm / 60.0); |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | extern u8 gpsdataready_flag; |
| | | extern u16 gps_packlen; |
| | | u8 totalpack_num,currentpack_num; |
| | | u16 sendtimes; |
| | | u32 rec_urtid; |
| | | void RecOnePackData(void) |
| | | { |
| | | dwt_setrxtimeout(0);//è®¾å®æ¥æ¶è¶
æ¶æ¶é´ï¼0使²¡æè¶
æ¶æ¶é´ |
| | |
| | | { |
| | | recdata_len = frame_len-14; |
| | | memcpy(rec_gpsdata,&rx_buffer[DATA_IDX],recdata_len); |
| | | if(gpsdataready_flag) |
| | | // if(gpsdataready_flag) |
| | | { |
| | | gpsdataready_flag = 0; |
| | | tx_sync_msg[MESSAGE_TYPE_IDX]=DATA_RESPONSE; |
| | |
| | | if(remain_i>=110) |
| | | { |
| | | tx_sync_msg[CURENTPACKNUM_IDX] = 0; |
| | | memcpy(&tx_sync_msg[DATA_IDX],&RTCMdata[send_i],110); |
| | | send_i+=110; |
| | | remain_i-=110; |
| | | dwt_writetxdata(110+14, tx_sync_msg, 0);//å°Pollå
æ°æ®ä¼ ç»DW1000ï¼å°å¨å¼å¯åéæ¶ä¼ åºå» |
| | | dwt_writetxfctrl(110+14, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_starttx(DWT_START_TX_IMMEDIATE); |
| | | memcpy(&tx_sync_msg[DATA_IDX],&RTCMdata[send_i],110); |
| | | send_i+=110; |
| | | remain_i-=110; |
| | | dwt_writetxdata(110+14, tx_sync_msg, 0);//å°Pollå
æ°æ®ä¼ ç»DW1000ï¼å°å¨å¼å¯åéæ¶ä¼ åºå» |
| | | dwt_writetxfctrl(110+14, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_starttx(DWT_START_TX_IMMEDIATE); |
| | | sendtimes++; |
| | | }else{ |
| | | tx_sync_msg[CURENTPACKNUM_IDX] = 1; |
| | | memcpy(&tx_sync_msg[DATA_IDX],&RTCMdata[send_i],remain_i); |
| | | dwt_writetxdata(remain_i+14, tx_sync_msg, 0);//å°Pollå
æ°æ®ä¼ ç»DW1000ï¼å°å¨å¼å¯åéæ¶ä¼ åºå» |
| | | dwt_writetxfctrl(remain_i+14, 0);//设置è¶
宽带åéæ°æ®é¿åº¦ |
| | | dwt_starttx(DWT_START_TX_IMMEDIATE); |
| | | remain_i = 0; |
| | | remain_i = 0; |
| | | sendtimes++; |
| | | } |
| | | delay_us(1000); |
| | | } |
| | | } |
| | | LED0_BLINK; |
| | | USART_puts(rec_gpsdata,recdata_len); |
| | | |
| | | extern HIDO_DataStruct stPosState[4]; |
| | | |
| | | GPS_ParseGGA(rec_gpsdata,recdata_len); |
| | | |
| | | const char *fmt = "{\"battery\":4.2,\"dev_type\":\"11\",\"device_sn\":\"%d\",\"gps_type\":%d,\"high\":%.8lf,\"lat\":%.8lf,\"lng\":%.8lf}"; |
| | | |
| | | double lat = 0; |
| | | double lon = 0; |
| | | double high = 0; |
| | | uint8_t gps_type; |
| | | gps_type = HIDO_UtilStrBufToInt(stPosState[2].m_pData,1); |
| | | if(gps_type!=0) |
| | | { |
| | | GPS_ParseLon(&stPosState[1], &lon); |
| | | GPS_ParseLat(&stPosState[0], &lat); |
| | | GPS_ParseHeight(&stPosState[3], &high); |
| | | } |
| | | memcpy(&rec_urtid,&rx_buffer[ANCHOR_ID_IDX],4); |
| | | printf(fmt,rec_urtid,gps_type, high, lat, lon); |
| | | //USART_puts(rec_gpsdata,recdata_len); |
| | | } |
| | | }else{ |
| | | dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); |