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