From af4710835316cb2fd8dd70db7867e23147206f31 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期四, 17 二月 2022 09:33:48 +0800 Subject: [PATCH] 增加跳跃时间 --- 源码/核心板/Src/application/dw_app.c | 185 ++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 177 insertions(+), 8 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" index 6c4193c..03c53c7 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" @@ -808,12 +808,13 @@ 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; @@ -861,10 +862,162 @@ 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; @@ -907,12 +1060,12 @@ 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); }else{ tx_sync_msg[CURENTPACKNUM_IDX] = 1; memcpy(&tx_sync_msg[DATA_IDX],&RTCMdata[send_i],remain_i); @@ -925,7 +1078,23 @@ } } 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\":\"15625394\",\"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); + GPS_ParseLon(&stPosState[1], &lon); + GPS_ParseLat(&stPosState[0], &lat); + GPS_ParseHeight(&stPosState[3], &high); + printf(fmt,gps_type, high, lat, lon); + //USART_puts(rec_gpsdata,recdata_len); } }else{ dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); -- Gitblit v1.9.3