From fadf2a684268a36b7d3069f0e4e932147416c481 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期一, 21 四月 2025 18:23:57 +0800 Subject: [PATCH] 手环V1.16版本,修改gps闪灯状态e后为1时不用状态机控制,修改5s后关闭4g和gps逻辑,初步测试成功,但OTA中途会重连导致升级不了 --- keil/include/src/gps.c | 210 ++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 169 insertions(+), 41 deletions(-) diff --git a/keil/include/src/gps.c b/keil/include/src/gps.c index cd7bfa0..0b74400 100644 --- a/keil/include/src/gps.c +++ b/keil/include/src/gps.c @@ -1,15 +1,31 @@ #include "board.h" -#include "TCPClient.h" +#include "HIDO_Util.h" #include "global_param.h" -#define GPS_OPEN_TIME_OUT 240 -#define GPS_RESTART_TIME1 1200 -#define GPS_RESTART_TIME2 120 -#define GPS_RESTART_TIME3 3600 -#define GPS_OPEN_TIME_OUT1 60 -extern uint16_t gps_wait_count; -uint8_t gps_power_state,gps_uwb_flag,gps_4g_flag,gps_timeout_flag,gps_need_data_flag = 1,gps_1h_open_flag=1; -extern HIDO_INT32 l_i32TCPClientID; -extern double jd,wd; +#define GPS_OPEN_TIME_OUT 120 //1分钟开启 +#define GPS_RESTART_TIME1 480 //10分钟 +#define GPS_RESTART_TIME2 48 //1分钟 +#define GPS_RESTART_TIME3 30 //30s + +#define GPS_VALID_LED_WAIT_COUNT 1 +#define GPS_INVALID_LED_WAIT_COUNT 5 +#define AIR_CONNECT_LED_WAIT_COUNT 5 +extern uint16_t gps_wait_count,g_com_map[COM_MAP_SIZE]; +extern uint8_t flag_first_TCPconnect; +extern uint16_t gps_wait_count2; +uint16_t g_spsum,g_snum,ave_sp; +uint8_t gps_power_state,gps_uwb_flag,gps_4g_flag,gps_timeout_flag,gps_need_data_flag = 1,gps_open_flag,gps_first_flag=1; +extern uint8_t gps_success_state,air780_success_state,power_low_flag,state5V_prase_flag,green_charge_state,enbale_blink_flag,active_flag; +typedef enum { + STATE_IDLE, + STATE_VALID, + STATE_INVALID +} GPSState; +typedef enum { + CONNECT, + DISCONNECT, +} LED4GState; +GPSState GPS_state=STATE_IDLE; +LED4GState LED_4g_state=DISCONNECT; void GPS_Poll(void) { @@ -58,37 +74,6 @@ gps_need_data_flag=1; } } - - -void GPS_Poll_1h(void) -{ - - if(gps_1h_open_flag) { - gps_power_state = 1; //打开GPS电源 - if(gps_need_data_flag) { - gps_wait_count++; - if(gps_wait_count>=GPS_OPEN_TIME_OUT1) { //超时切换工作状态 - gps_timeout_flag=1;//串口添加改变timeout逻辑 - gps_wait_count=0; - gps_need_data_flag=0;//切换为关闭模式 - TCPHeartBeatUpload();//上传GPS超时无效数据 - } - } else { - gps_wait_count++; - gps_power_state=0;//关闭GPS - if(gps_wait_count>GPS_RESTART_TIME3) { - gps_power_state=1;//开启GPS - gps_need_data_flag=1; - gps_wait_count=0; - } - } - } else { - gps_power_state=0;//关闭gps - gps_wait_count=0; - gps_timeout_flag=0; - gps_need_data_flag=1; - } -} void GpsConrol(uint8_t flag_4g_uwb,uint8_t open_close) { if(gps_4g_flag==0&&gps_uwb_flag==0) @@ -105,4 +90,147 @@ gps_uwb_flag = open_close; } +} +void Gps_change(void) +{ + if(gps_open_flag){ + if(gps_need_data_flag) { + gps_power_state = 1; //打开GPS电源 + + gps_wait_count++; + if(gps_wait_count>34) + gps_first_flag=0;//新加入第一次开启 + if(gps_wait_count>=GPS_OPEN_TIME_OUT) { //超时切换工作状态 + + gps_timeout_flag=1;//串口添加改变timeout逻辑 + gps_wait_count=0; + gps_need_data_flag=0;//切换为关闭模式 + UDPClient_UploadGPS();//上传GPS超时无效数据 + } + } else { + gps_wait_count++; + gps_power_state=0;//关闭GPS + + if(gps_wait_count>g_com_map[SEND_4G_SECOND]) { + gps_power_state=1;//开启GPS + gps_need_data_flag=1; + gps_wait_count=0; + } + } + gps_wait_count2=0; + }else{ + gps_wait_count2++; + if(gps_wait_count2>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态 + gps_wait_count=0; + gps_timeout_flag=1; + UDPClient_UploadGPS();//上传GPS 30s固定数据 + gps_wait_count2=0; + } + gps_power_state=1;//开启gps + gps_need_data_flag=1; + } + update_led_power_state(); +} +void POWER_LED_Task(void) +{ +if(enbale_blink_flag) + { + green_charge_state=0; + charge_red_on(); + } + charge_state_change();//充电状态判断 + if(enbale_blink_flag) + { + delay_us(5000); + green_charge_state=0; + charge_red_off(); + } +} + uint8_t wltag_gps_timer,wltag_4g_timer;; +void GPS_LED_Task(void) +{ + + if(state5V_prase_flag||power_low_flag||!gps_power_state) + { + GPS_state=STATE_IDLE; + } +switch(GPS_state){ + case STATE_INVALID: + if(wltag_gps_timer++>=GPS_INVALID_LED_WAIT_COUNT) + { wltag_gps_timer=0; + blink_led(&gps_success_state); + } + break; + case STATE_VALID: + if(wltag_gps_timer++>=GPS_VALID_LED_WAIT_COUNT) + { wltag_gps_timer=0; + blink_led(&gps_success_state); + } + break; + case STATE_IDLE: + gps_led_off(); + wltag_gps_timer=0; + break; + } +} +void LED_4G_task(void) +{ + +if(Internet_IsIPReady() == HIDO_TRUE&&!power_low_flag&&active_flag) +{ +LED_4g_state=CONNECT; +}else{ +LED_4g_state=DISCONNECT; +} +switch(LED_4g_state){ + case CONNECT: + if(wltag_4g_timer++>=AIR_CONNECT_LED_WAIT_COUNT) + { wltag_4g_timer=0; + blink_led(&air780_success_state); + } + break; + case DISCONNECT: + air780_led_off(); + wltag_4g_timer=0; + break; + } +} +void LED_Task(void) +{ +POWER_LED_Task(); +LED_4G_task(); +GPS_LED_Task(); +} +HIDO_INT32 GPS_ParseGSV(HIDO_CHAR *_pcData, HIDO_UINT32 _u32Len) +{ + HIDO_DataStruct spower[4]; + +// 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+=4; + g_spsum+=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+=3; + g_spsum+=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+=2; + g_spsum+=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+=1; + g_spsum+=atoi((HIDO_CHAR *)spower[0].m_pData); + + } + // l_u8PosState = atoi((HIDO_CHAR *)stPosState.m_pData); + + return HIDO_OK; } \ No newline at end of file -- Gitblit v1.9.3