keil/include/main/main.c
@@ -106,8 +106,8 @@
        SEARCH_DEV,
} Operation_step;
Operation_step UWB_work_state;
void UWB_LED_Task(void);
void POWER_LED_Task(void);
Commend_SendDate send_struct;
struct ADC_CFG_T usr_adc_cfg = {
    .mode = ADC_MODE_CONTINUE,    /* Selected single conversion mode  */
@@ -256,54 +256,23 @@
int need_open_gps_count;
uint8_t change_vibration=2;
HIDO_UINT32 u32CurTick_Motor;
void UserKeyState_change(void);
void click_Task(void);
void MotorPoll(void)
{
   if(!power_low_flag)//确认是否休眠下才开启功能
   { //马达震动逻辑
    if(g_com_map[MOTOR_ENABLE])
   if(active_flag)
    {
        if(motor_open_air_flag||moter_open_uwb_flag)
        {motor_power_state=0;
               if(motor_open_flag)
   if(change_by_distance())
               {   
                  if (motor_count>=change_vibration)
                   {
                     change_vibration=VIBRATION_TIME;
                     motor_power_state = 1;
                     motor_count=0;
                     motor_open_flag=0;
                     update_led_power_state();
         if(motor_count++%2==0)
         motor_power_state=0;//开启
         else{
         motor_power_state=1;//关闭
                   }
                   motor_count++;
               }else {//修改
                        motor_power_state = 1;
                      if(motor_count>=NO_VIBRATION_TIME)
                      {
                        motor_power_state = 0;
                        motor_count=0;
                        motor_open_flag=1;
                     update_led_power_state();
                   }
                      motor_count++;
                }
        } else {
                  motor_open_flag=1;
                  motor_count=0;
            motor_power_state=1;
        }
    }else{
            motor_open_flag=1;
            motor_count=0;
        motor_power_state=1;
   motor_power_state=1;//关闭
    }
   }else{
   motor_open_flag=1;
   motor_count=0;
  motor_power_state=1;
   }
}
void MotorPollCheck(void)
@@ -436,23 +405,25 @@
}
void UserKeyTask(void)
 {
     if(!GET_USERKEY)
     {
        if(HIDO_TimerGetTick() - keystarttime>3)
        {
            userkey_state = 1;
            keystarttime =  HIDO_TimerGetTick();
                  TCPHeartBeatUpload();//立即上传该包
        }
        if(HIDO_TimerGetTick() - keystarttime2>10)
        {
            g_com_map[CNT_RESTART] = 1;
        }
     }else
     {
       keystarttime =  HIDO_TimerGetTick();
       keystarttime2 =  HIDO_TimerGetTick();
     }
//     if(!GET_USERKEY)
//     {
//        if(HIDO_TimerGetTick() - keystarttime>3)
//        {
//            userkey_state = 1;
//            keystarttime =  HIDO_TimerGetTick();
//                  //TCPHeartBeatUpload();//立即上传该包
//        }
//        if(HIDO_TimerGetTick() - keystarttime2>10)
//        {
//            //g_com_map[CNT_RESTART] = 1;
//        }
//     }else
//     {
//       keystarttime =  HIDO_TimerGetTick();
//       keystarttime2 =  HIDO_TimerGetTick();
//     }
UserKeyState_change();
click_Task();
 } 
void MinuteTask(void)
{      gpio_pin_clr(ADC_GND_ENABLE);//先拉低
@@ -467,18 +438,20 @@
    }
    //UWB更新列表
    TagListUpdate();
      if(!power_low_flag)
      {
    GPS_Poll();
         //gps_power_state=1;//常开GPS
      }else{
      gps_power_state=0;//关闭GPS
      update_led_power_state();
      //初始化GPS计数数据
      gps_need_data_flag=1;
      gps_wait_count=0;
      gps_timeout_flag=0;
      }
      POWER_LED_Task();
      UWB_LED_Task();
//      if(!power_low_flag)
//      {
//    GPS_Poll();
//         //gps_power_state=1;//常开GPS
//      }else{
//      gps_power_state=0;//关闭GPS
//      update_led_power_state();
//      //初始化GPS计数数据
//      gps_need_data_flag=1;
//      gps_wait_count=0;
//      gps_timeout_flag=0;
//      }
      //gps_power_state=1;//测试gps长开
    //UWB状态检测
if(!power_low_flag)//低供电下不需要检测重连
@@ -512,23 +485,34 @@
uint8_t flag_sleeptimer,flag_secondtask,secondtask_count,log_4g_enable_flag;
uint8_t uwb_enable_flag=0;
uint8_t enable_system_function_flag;
static void sleep_timer_callback(void *dev, uint32_t time)
void POWER_LED_Task(void)
{
   // IO_control_init();
   if(enbale_blink_flag)
   {
   green_charge_state=0;
   charge_red_on();
   }
   if(tt)
    UWBPoll();
   //车载poll
      UWB_Tag_Poll();
    StatusChange();
   charge_state_change();//充电状态判断
   if(enbale_blink_flag)
   {
   delay_us(5000);
   green_charge_state=0;
   charge_red_off();
   }
}
extern uint8_t taglist_num;
void UWB_LED_Task(void)
{
   if(taglist_num!=0&&active_flag)
   {
      blink_led(&uwb_state);
   }else{
   uwb_led_off();
   }
}
static void sleep_timer_callback(void *dev, uint32_t time)
{
   // IO_control_init();
      
      MotorPoll();
      update_led_power_state();
@@ -541,21 +525,113 @@
    flag_sleeptimer = 1;
      charge_state_change();//充电状态判断
      if(enbale_blink_flag)
   {
   green_charge_state=0;
   charge_red_off();
   }
 if(delaysleep_count>0)
        delaysleep_count--;
    //GPS工作逻辑
}
// 时间阈值定义
#define LONG_PRESS_TIME   2    // 长按3秒阈值(单位:ms)
#define TRIPLE_CLICK_TIME 2    // 三连击总时间窗口
#define CLICK_TIMEOUT     1     // 单击确认超时
#define NEXT_CLICK_WAIT_TIMEOUT     1      // 按键下次单击等待时间
// 按键状态机
typedef enum {
    IDLE,           // 空闲状态
    WAIT_NEXT_RISING,        // 已按下待确认
    WAIT_NEXT_FALLING    // 等待释放状态
} ButtonState;
volatile ButtonState sos_state = IDLE,temp_state;
static void voltage_input_handler(enum IO_PIN_T pin)
{
}
uint8_t long_press_flag,double_click_flag,single_click_flag;
uint32_t current_time,first_press_time,press_duration,press_start_time,click_count,single_click_timer,rising_time,falling_time,temp_rising_time;
uint8_t active_flag=1;
void handle_long_press(void)
{
}
void handle_doouble_click(void)
{
   if(active_flag==1)
   {
   active_flag=0;
   }else{
   active_flag=1;
   }
}
void  handle_single_click(void)
{
}
void click_Task(void)
{
// 事件处理(按优先级顺序)
    if (long_press_flag) {
        handle_long_press();
        long_press_flag = 0;
    } else if (double_click_flag) {
        handle_doouble_click();
        double_click_flag = 0;
    } else if (single_click_flag) {
        handle_single_click();
        single_click_flag = 0;
    }
}
static void sos_fall_handler(enum IO_PIN_T pin)
{
sos_state=WAIT_NEXT_RISING;
falling_time=HIDO_TimerGetTick();
//if(!power_low_flag&&active_flag)
}
void UserKeyState_change(void)
{
if(sos_state==WAIT_NEXT_RISING)
{
   if(GET_USERKEY)
   {
   rising_time=HIDO_TimerGetTick();
      if(rising_time-falling_time<=NEXT_CLICK_WAIT_TIMEOUT)
      {
      click_count++;
      sos_state=WAIT_NEXT_FALLING;
      if(click_count==2)
      {
      click_count=0;
      sos_state=IDLE;
      double_click_flag=1;
      }
      long_press_flag=0;
      }else if(rising_time-falling_time>LONG_PRESS_TIME&&click_count==0)
      {
      click_count=0;
      long_press_flag=1;
      sos_state=IDLE;
      }else{
      click_count=0;
      sos_state=IDLE;
      }
//      motor_off();
      temp_rising_time=rising_time;
   }
}else if(sos_state==WAIT_NEXT_FALLING)
   {
      if(HIDO_TimerGetTick()-temp_rising_time>NEXT_CLICK_WAIT_TIMEOUT)
      {
         if(click_count==1)
         {
         single_click_flag=1;
         }
         click_count=0;
         sos_state=IDLE;
      }
   }
}
static void move_handler(enum IO_PIN_T pin)
{
@@ -715,6 +791,7 @@
int test1,test3;
uint32_t test4;
int16_t Voltage_input;
extern uint8_t uwb_rx_flag;
int main(void)
{
    board_clock_run();
@@ -751,8 +828,8 @@
    //sys_timer_open();
//    // TODO 4G
    Uart_Register(UART_ID_4G, UART_ID0);
    Internet_Init();
//    Uart_Register(UART_ID_4G, UART_ID0);
//    Internet_Init();
    //TCPClient_Init();
      
@@ -767,7 +844,7 @@
    Accelerometer_Init();
    IO_control_init();
  
    gps_air780_power_change(0,1);//开启gps,4G
    gps_air780_power_change(0,0);//开启gps,4G
      //加速度计初始化必须在IO_control_init之前因为复用SDA引脚
         Program_Init();
    //uart_open(UART_ID1, &test_uart_cfg);
@@ -786,37 +863,31 @@
      gpio_pin_clr(ADC_GND_ENABLE);//先拉低
      adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
      board_acceleration_detection_init(move_handler);
      board_SOS_fall_detection_init(sos_fall_handler);
      Uwb_init();
      OpenUWB();
//       LOG_INFO(TRACE_MODULE_APP, "测试进入app");
      //board_4GUsart_detection_init(_4gUsart_handler);
    while (1)
    { tt1=gpio_pin_get_val(ADC_GND_ENABLE);
    {
//         tt1=gpio_pin_get_val(ADC_GND_ENABLE);
         if(active_flag)
         {
         if(!uwb_rx_flag)
         {
         OpenUWB();
         }
         uwb_app_poll();
         }else{
         CloseUWB();
         }
         wdt_ping(WDT_ID0);//喂狗
         //tt2 = gpio_pin_get_val(_4G_USART_RX_Pin);
         if(!power_low_flag)//确认是否休眠下才开启功能
         {
//        if(flag_TCP_reconnectting||IfTCPConnected())
//        {
//        //    LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n");
//
////            if(flag_4guart_needinit)
////            {
////                flag_4guart_needinit = 0;
////                AIR780EUartInit();
////            }//yuan
//                 if(flag_4G_recdata==1)
//            {
//                flag_4G_recdata = 2;
//
//                //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2);
//                Socket_RecvAll();
//            }
//                  air780_led_on();
//            Internet_Poll();
//            HIDO_ATLitePoll();
//            HIDO_TimerPoll();
//            TCPClient_Poll();
//            air780_led_off();
//        }
         }
        if(flag_secondtask)
        {