From e4d167a7d5e73b58a7d4adbc8b91499dc1e2d4c4 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期二, 01 四月 2025 11:08:41 +0800 Subject: [PATCH] 低功耗,逻辑正确,现在室外40ma,室内20ma电流 --- keil/include/src/GPS.c | 146 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 132 insertions(+), 14 deletions(-) diff --git a/keil/include/src/GPS.c b/keil/include/src/GPS.c index c7b2b67..65cf84a 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=0; +/**************************************************************************************************************************************/ 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,9 +490,12 @@ extern uint8_t bat_percent; uint8_t gpsbaoxu; extern uint8_t gps_ntripsend; -//static HIDO_UINT8 l_u8GPSBuff[512]; -//static HIDO_UINT32 l_u8GPSLen = 0; -//static HIDO_UINT32 l_u8GPSRecvTick = 0; +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; +extern uint8_t heart_upload_time; static HIDO_INT32 GPS_ParseGGA(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len) { uint16_t state_flag; @@ -494,6 +503,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 +527,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 +543,29 @@ _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; + if(heart_upload_time%UPLOAD_4G_TIME==0&&lounei_flag==0) + { + UDPClient_UploadGPS(); + 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 +585,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 +772,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 +871,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 +934,57 @@ // 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=300; +uint16_t g_snum_GSV_sum=10; +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 : + *******************************************************************************/ + +void Switch_low_power_mode() +{ + if(lounei_flag==0) + { + PCA9555_Set_One_Value_Output(GPS_POWER,1); + PCA9555_Set_One_Value_Output(LED_POWER,1); + } + +} \ No newline at end of file -- Gitblit v1.9.3