keil/include/src/gps.c
@@ -1,15 +1,31 @@
#include "board.h"
#include "HIDO_Util.h"
#include "global_param.h"
#define GPS_OPEN_TIME_OUT  48      //1分钟开启
#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;
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)
{
@@ -82,7 +98,10 @@
                     gps_power_state = 1;  //打开GPS电源
                   
                     gps_wait_count++;
                     if(gps_wait_count>=g_com_map[SEND_4G_SECOND]) { //超时切换工作状态
                     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;//切换为关闭模式
@@ -112,7 +131,76 @@
         }
      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];