From 16ccf41b599457daa3e870be7875d23cda6183f2 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期三, 02 四月 2025 15:14:35 +0800 Subject: [PATCH] 1.7 改变gps上传解析逻辑,按键跟关机改为中断触发 --- keil/include/src/GPS.c | 104 +++++++++++++++++++-------------------------------- 1 files changed, 39 insertions(+), 65 deletions(-) diff --git a/keil/include/src/GPS.c b/keil/include/src/GPS.c index c7b2b67..5f5fefb 100644 --- a/keil/include/src/GPS.c +++ b/keil/include/src/GPS.c @@ -14,7 +14,7 @@ #include "WS2812.h" #define GPS_DBG(level, fmt, ...) HIDO_Debug(fmt, __VA_ARGS__) #include <global_param.h> -#define GPS_UART_RX_BUF_SIZE 1024 +#define GPS_UART_RX_BUF_SIZE 1000 #define GPS_UART_TX_BUF_SIZE (4) typedef enum @@ -40,7 +40,7 @@ static ST_GPSRecv l_stGPSRecv; static FN_GPSEventCallback l_fnGPSEventCallback; ST_GPS l_stGPS; - +static HIDO_UINT8 l_u8PosState = 0; /******************************************************************************* * Function Name : GPS_AddHours * Description : @@ -487,81 +487,30 @@ //static HIDO_UINT8 l_u8GPSBuff[512]; //static HIDO_UINT32 l_u8GPSLen = 0; //static HIDO_UINT32 l_u8GPSRecvTick = 0; +uint8_t gps_error1,gps_error2; static HIDO_INT32 GPS_ParseGGA(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len) { - uint16_t state_flag; ST_GPS stGPS; HIDO_DataStruct stPosState; - jinru_parsegga_flag=1; + memset(&stGPS, 0, sizeof(ST_GPS)); if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK) { + gps_error1++; return HIDO_ERR; } if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%*,%*,%*,%*,%**", &stPosState) != 15) { + gps_error2++; return HIDO_ERR; } - memcpy(YUANGPS_ParseGGA_data,_pcData,_u32Len); - YUANGPS_ParseGGA_changdu=_u32Len; - if(*(HIDO_CHAR *)stPosState.m_pData != '0') - { -// HIDO_DebugString(_pcData, _u32Len); - if(l_fnGPSEventCallback != NULL) - { - l_fnGPSEventCallback(GPS_TYPE_GGA, _pcData, _u32Len); - } - rtkled=BLUE; - GPS_successful_flag=1; - _pcData[_u32Len-1]=0; - _pcData[_u32Len-2]=0; -// memcpy(GPS_data,_pcData, _u32Len-2);//去掉回车换行 - state_flag = 0; - state_flag = fangchai_flag; - - HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%x,%d,%d,%d,%d\r\n", - _pcData, g_com_map[2], bat_percent,0,0,0,state_flag,gpsbaoxu); - gpsbaoxu++; - GPS_ParseGGA_changdu=u32Len; - } - else - { - rtkled=RED; - GPS_successful_flag=0; - _pcData[_u32Len-1]=0; - _pcData[_u32Len-2]=0; -// memcpy(GPS_data,_pcData, _u32Len-2); - state_flag = 0; - state_flag = fangchai_flag; - - HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%x,%d,%d,%d,%d\r\n", - _pcData, g_com_map[2], bat_percent,0,0,0,state_flag,gpsbaoxu); - gpsbaoxu++; - GPS_ParseGGA_changdu=u32Len; - } - UDPClient_UploadGPS(); - gps_ntripsend=1; -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP&&gps_ntripsend) -// { -// gps_ntripsend=0; -// NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len); -//// l_u8GPSLen = 0; -// } -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP) -// { -// if(GPS_ParseGGA_changdu > 0) -// { -// if((HIDO_TimerGetTick() - l_u8GPSRecvTick) > 50) -// { -// NTRIPApp_ReportGGA(GPS_ParseGGA_data, GPS_ParseGGA_changdu); -// GPS_ParseGGA_changdu = 0; -// } -// } -// } + l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData); + return HIDO_OK; } + /******************************************************************************* * Function Name : GPS_ParseRMC @@ -665,6 +614,7 @@ * Author : hido.ltd * Modified Date: : 2021年5月07日 *******************************************************************************/ +uint8_t gpserror; HIDO_VOID GPS_RecvFsm(HIDO_UINT8 _u8RecvChar) { switch (l_stGPSRecv.m_eState) @@ -702,15 +652,39 @@ { l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen++] = _u8RecvChar; l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen] = '\0'; - +// l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen - 2] = '\0'; +// UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf); if(strstr(l_stGPSRecv.m_acRecvBuf, "GGA,") != HIDO_NULL) { GPS_ParseGGA(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen); - memset(l_stGPSRecv.m_acRecvBuf,0, l_stGPSRecv.m_u32RecvLen); + l_stGPSRecv.m_acRecvBuf[l_stGPSRecv.m_u32RecvLen - 2] = '\0'; + UDPClient_UploadGPS(l_stGPSRecv.m_acRecvBuf); + switch(l_u8PosState) + { + case 0: + rtkled = RED; + break; + case 1: + rtkled = BLUE; + break; + case 2: + rtkled = BLUE+GREEN; + break; + case 4: + rtkled = GREEN; + break; + case 5: + rtkled = YELLOW; + break; + default: + rtkled = WHITE; + break; + } } - else if(strstr(l_stGPSRecv.m_acRecvBuf, "RMC,") != HIDO_NULL) + + else //if(strstr(l_stGPSRecv.m_acRecvBuf, "RMC,") != HIDO_NULL) { - GPS_ParseRMC(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen); + gpserror++; } } @@ -807,7 +781,7 @@ { HIDO_UINT8 u8RecvChar = 0; - while (Uart_GetChar(UART_ID_GPS, &u8RecvChar) == HIDO_OK) + while (Uart_GetChar(UART_ID_DBG_GPS, &u8RecvChar) == HIDO_OK) { GPS_RecvFsm(u8RecvChar); } -- Gitblit v1.9.3