From 7f6ea7b60ba9e752355cdbb136304e03dbfc7187 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期三, 26 三月 2025 13:52:49 +0800 Subject: [PATCH] 做了室内室外的基本判断,现在室内一分钟上传一次心跳包 --- keil/include/src/GPS.c | 140 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 130 insertions(+), 10 deletions(-) diff --git a/keil/include/src/GPS.c b/keil/include/src/GPS.c index c7b2b67..a8404ea 100644 --- a/keil/include/src/GPS.c +++ b/keil/include/src/GPS.c @@ -12,11 +12,17 @@ //#include "GPIO.h" #include "Uart.h" #include "WS2812.h" +#include "PCA9555.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_TX_BUF_SIZE (4) +/**************************************************************************************************************************************/ +#define ARRAY_SIZE 60 +uint8_t Gsv_count = 0; // 已存储的数据个数 +uint8_t lounei_flag; +/**************************************************************************************************************************************/ typedef enum { GPS_RECV_STATE_IDLE = 0, @@ -471,7 +477,7 @@ * Author : hido.ltd * Modified Date: : 2021年5月07日 *******************************************************************************/ -uint8_t GPS_data[100]; +//uint8_t GPS_data[100]; uint8_t GPS_successful_flag; extern uint32_t uwbled,rtkled,led4g,powerled; uint8_t jinru_parsegga_flag; @@ -484,6 +490,11 @@ extern uint8_t bat_percent; uint8_t gpsbaoxu; extern uint8_t gps_ntripsend; +uint8_t ave_sp_GSV; + +extern uint16_t g_spsum_GSV,g_snum_GSV; +extern uint16_t g_spsum_GSV_sum; +extern uint16_t g_snum_GSV_sum; //static HIDO_UINT8 l_u8GPSBuff[512]; //static HIDO_UINT32 l_u8GPSLen = 0; //static HIDO_UINT32 l_u8GPSRecvTick = 0; @@ -494,6 +505,7 @@ HIDO_DataStruct stPosState; jinru_parsegga_flag=1; memset(&stGPS, 0, sizeof(ST_GPS)); + ave_sp_GSV=g_spsum_GSV; if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK) { return HIDO_ERR; @@ -517,11 +529,11 @@ _pcData[_u32Len-1]=0; _pcData[_u32Len-2]=0; // memcpy(GPS_data,_pcData, _u32Len-2);//去掉回车换行 - state_flag = 0; - state_flag = fangchai_flag; + 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); + HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%d,%d,%d,%d,%d\r\n", + _pcData, g_com_map[2], bat_percent,g_spsum_GSV_sum,g_snum_GSV_sum,lounei_flag,state_flag,gpsbaoxu); gpsbaoxu++; GPS_ParseGGA_changdu=u32Len; @@ -533,16 +545,24 @@ _pcData[_u32Len-1]=0; _pcData[_u32Len-2]=0; // memcpy(GPS_data,_pcData, _u32Len-2); - state_flag = 0; - state_flag = fangchai_flag; + 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); +// 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,ave_sp_GSV,0,state_flag,gpsbaoxu); + HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)GPS_ParseGGA_data, sizeof(GPS_ParseGGA_data), "%s,%X,%02x,%d,%d,%d,%d,%d\r\n", + _pcData, g_com_map[2], bat_percent,g_spsum_GSV_sum,g_snum_GSV_sum,lounei_flag,state_flag,gpsbaoxu); gpsbaoxu++; GPS_ParseGGA_changdu=u32Len; } UDPClient_UploadGPS(); gps_ntripsend=1; + NTRIPApp_ReportGGA(GPS_ParseGGA_data, _u32Len); + ave_sp_GSV=0; + g_spsum_GSV=0; +// g_spsum_GSV_sum=0; + g_snum_GSV=0; +// lounei_flag=0; // if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP&&gps_ntripsend) // { // gps_ntripsend=0; @@ -562,7 +582,44 @@ // } return HIDO_OK; } +extern uint8_t in_the_room_flag; +uint16_t g_spsum_GSV,g_snum_GSV; +static HIDO_INT32 GPS_ParseGSV(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len) +{ + ST_GPS stGPS; + HIDO_DataStruct spower[4]; + + memset(&stGPS, 0, sizeof(ST_GPS)); +// if (GPS_DataCheck(_pcData, _u32Len) != HIDO_OK) +// { +// return HIDO_ERR; +// } + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2], &spower[3]) == 21) + { + g_snum_GSV+=4; + g_spsum_GSV+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData)+atoi((HIDO_CHAR *)spower[3].m_pData); + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1], &spower[2]) == 17) + { + g_snum_GSV+=3; + g_spsum_GSV+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData)+atoi((HIDO_CHAR *)spower[2].m_pData); + + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%*,%*,%*,%p,%**", &spower[0], &spower[1]) == 13) + { + g_snum_GSV+=2; + g_spsum_GSV+=atoi((HIDO_CHAR *)spower[0].m_pData)+atoi((HIDO_CHAR *)spower[1].m_pData); + + }else if(HIDO_UtilParseFormat((HIDO_UINT8 *) _pcData, _u32Len, "$%*,%*,%*,%*,%*,%*,%*,%p,%**", &spower[0]) == 9) + { + g_snum_GSV+=1; + g_spsum_GSV+=atoi((HIDO_CHAR *)spower[0].m_pData); + + } + // l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData); + + return HIDO_OK; +} /******************************************************************************* * Function Name : GPS_ParseRMC * Description : @@ -712,6 +769,10 @@ { GPS_ParseRMC(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen); } + else if(strstr(l_stGPSRecv.m_acRecvBuf, "GSV,") != HIDO_NULL) + { + GPS_ParseGSV(l_stGPSRecv.m_acRecvBuf, l_stGPSRecv.m_u32RecvLen); + } } l_stGPSRecv.m_eState = GPS_RECV_STATE_IDLE; @@ -807,7 +868,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); } @@ -870,3 +931,62 @@ // HIDO_UtilBzero(&l_stGPSRecv, sizeof(ST_GPSRecv)); //} +/******************************************************************************* + * Function Name : Receive_g_spsum_Data + * Description : 计算平均值 + * Input : newData + * Output : sum + * Return : g_spsum_GSV_sum + *******************************************************************************/ +uint16_t GSV_sum; +uint16_t GSV_g_snum_sum; +uint16_t g_spsum_GSV_sum=0; +uint16_t g_snum_GSV_sum=0; +void Receive_g_spsum_Data(int newData) +{ + GSV_sum +=newData; + if (Gsv_count < ARRAY_SIZE) { + Gsv_count++; // 如果数组未满,增加已存储的数据个数 + } + if(Gsv_count==60) + { + g_spsum_GSV_sum=GSV_sum/Gsv_count; + GSV_sum=0; + + } +} + +void Receive_g_snum_Data(int newData) +{ + GSV_g_snum_sum +=newData; + if(Gsv_count==60) + { + g_snum_GSV_sum=GSV_g_snum_sum/Gsv_count; + GSV_g_snum_sum=0; + Gsv_count=0; +// in_the_room_flag=0; + } +} + +/******************************************************************************* + * Function Name : Switch_low_power_mode + * Description : 低功耗处理 + * Input : + * Output : + * Return : + *******************************************************************************/ +extern uint8_t heart_upload_time; +void Switch_low_power_mode(int mode) +{ + switch(mode) + { + case 0: PCA9555_Set_One_Value_Output(GPS_POWER,0); + PCA9555_Set_One_Value_Output(LED_POWER,0); + break; + + case 1: PCA9555_Set_One_Value_Output(GPS_POWER,1); + PCA9555_Set_One_Value_Output(LED_POWER,1); + heart_upload_time=0; + break; + } +} \ No newline at end of file -- Gitblit v1.9.3