keil/include/main/main.c
@@ -80,7 +80,7 @@
Operation_step UWB_work_state;
uint32_t gpsbaudrate;
uint32_t uwb_time_count = 0;  // 定时器计数值
//uint32_t step_count = 0;      // 步数计数
//uint32_t last_step_count = 0; // 上一次步数
@@ -130,31 +130,67 @@
    uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
}
uint8_t deep_sleep_falg=1;
extern  uint8_t userkey_state;
extern uint8_t heartbeasend_flag;
uint8_t sleepflag;
uint32_t sleepflagtime;
uint8_t onlyoneflag=1;
void mcu_deep_sleep(void)
{
//            uint32_t lock;
//            trace_flush();
//            lock = int_lock();
////                  LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n");
                uint32_t lock;
            trace_flush();
            lock = int_lock();
//                  LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n");
//                  gps_air780_power_change(0,0);//关闭gps,4G 
             deep_sleep_falg=0;
            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G 
//                  PCA9555_Set_One_Value_Config(MAIN_RI,0);//配置4G唤醒引脚为输入
//
////                  PCA9555_Set_One_Value_Output(MAIN_RI,1);
             boot_deinit();
            CloseUWB();
            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G 
                     sleep_timer_stop();
                  //adc_close();
            power_enter_power_down_mode(1);
//                  LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n");
            sys_reset(0);
            int_unlock(lock);
////            uint32_t lock;
////            trace_flush();
////            lock = int_lock();
//////                  LOG_INFO(TRACE_MODULE_APP, "进入深度休眠\r\n");
////                  gps_air780_power_change(0,0);//关闭gps,4G
//             deep_sleep_falg=0;
//            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
//            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关闭gps,4G
////                  PCA9555_Set_One_Value_Config(MAIN_RI,0);//配置4G唤醒引脚为输入
////
//////                  PCA9555_Set_One_Value_Output(MAIN_RI,1);
//             boot_deinit();
//            CloseUWB();
//            if(onlyoneflag)
//            {
//            onlyoneflag=0;
//            userkey_state=4;
//            heartbeasend_flag = 1;
//            sleepflag=1;
//            sleepflagtime=HIDO_TimerGetTick();
//            }
//            if(sleepflag)
//            {
//             if(HIDO_TimerGetTick() - sleepflagtime>3)
//             {
//              PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G
//             }
//            }
//
////            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);//关闭gps,4G
//
////                  sleep_timer_stop();
////                  //adc_close();
////            power_enter_power_down_mode(1);
////             delay_us(200000);
             
//                  sleep_timer_stop();
//                  //adc_close();
//            power_enter_power_down_mode(1);
//             delay_us(200000);
//             sys_reset(0);
////                  LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n");
//            int_unlock(lock);
////             sys_reset(0);
//////                  LOG_INFO(TRACE_MODULE_APP, "从休眠出来\r\n");
////            int_unlock(lock);
}
static void adc_callback(void *data, uint32_t number)
{
@@ -208,8 +244,23 @@
{
   if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1)
   {//power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH);
        if(onlyoneflag)
        {
        onlyoneflag=0;
        nomove_count=0;
        userkey_state=4;
        heartbeasend_flag = 1;
        sleepflag=1;
        sleepflagtime=HIDO_TimerGetTick();
        }
   }
    if(sleepflag)
    {
     if(HIDO_TimerGetTick() - sleepflagtime>3)
     {
      power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)PCA_INPUT_DETECT, POWER_WAKEUP_LEVEL_LOW);
      mcu_deep_sleep();
     }
   }
}
void powerON_Task(void)
@@ -220,6 +271,9 @@
}
 
}
uint8_t guanjiflag;
uint8_t heartbeasend_flag;
uint32_t guanjiflagtime;
void UserKeyTask(void)
{
if(!read_userkey_input_pca())
@@ -255,18 +309,16 @@
              powerled=WHITE;
              Set4LEDColor(uwbled,rtkled,led4g,powerled);
            delay_ms(500);
            keystarttime =  HIDO_TimerGetTick();
            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS
            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭
//            keystarttime =  HIDO_TimerGetTick();
//            PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
//            PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
//            PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS
//            PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭
              heartbeasend_flag = 1;
              guanjiflag=1;
              userkey_state = 2;
              guanjiflagtime=HIDO_TimerGetTick();
        }
//        if(HIDO_TimerGetTick() - keystarttime2>10)
//        {
//
//            g_com_map[CNT_RESTART] = 1;
//        }
     }else
     {
       keystarttime =  HIDO_TimerGetTick(); 
@@ -327,9 +379,9 @@
    {   
        input5v_time=1;
        flag_secondtask = 1;
           #ifdef UWB_1_5HZ
           uwb_time_count++;
        #endif
      if(g_com_map[UWBFrequency]>1)
        {uwb_time_count++;}
//        #endif
            uwb_offtime_count++;
           if(uwb_offtime_count>60)
            {
@@ -350,13 +402,16 @@
//        uart_send(UART_ID1, ceshidata, 50,NULL);
        }
        input5v_time=1;
        if(taglist_num==0)
        if(taglist_num==0&&g_com_map[UWBFrequency]==1&&g_com_map[UWBENBLE]==1)
        {
//        CloseUWB();
//        Uwb_init();
//        OpenUWB();
        CloseUWB();
        Uwb_init();
        OpenUWB();
        }
        if(g_com_map[UWBENBLE]==1)
        {
       upload_apppoll();
        }
    }else{
        flag_secondtask = 0;
    }
@@ -385,6 +440,7 @@
uint8_t gps_need_data_flag,gps_open_flag;
void Program_Init(void)
{
    uint32_t gpsbaudrate1;
    Usart1ParseDataCallback = UsartParseDataHandler;//需改为默认为gps处理,UsartParseDataHandler为升级处理当调试时候改为
    parameter_init_anchor();//g_com_map表初始化角色默认为基站
    dev_id=g_com_map[DEV_ID];//这里不太对
@@ -397,8 +453,36 @@
    send_struct.alarmDistence=prewarning_distance;//更新报警距离
    memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID
    send_struct.tagId=dev_id;//更新设备ID
    g_com_map[MOTOR_ONTIME_INDEX]=10;
     tag_frequency = 1000/g_com_map[COM_INTERVAL];
    gpsbaudrate=(g_com_map[GPSBAUDRATE1_INDEX]<<16)|g_com_map[GPSBAUDRATE2_INDEX];
    if(gpsbaudrate==9600)
    {
        gpsbaudrate = 3;
        gpsbaudrate1=9600;
    }
    else  if(gpsbaudrate==115200)
    {
    gpsbaudrate = 7;
        gpsbaudrate1=115200;
    }
    else
    {
    gpsbaudrate = 3;
        gpsbaudrate1=9600;
    }
    if(g_com_map[GPSENBLE]>1)
    {
    g_com_map[GPSENBLE]=1;
    }
    if(g_com_map[UWBENBLE]>1)
    {
    g_com_map[UWBENBLE]=1;
    }
    if(g_com_map[UWBFrequency]>10)
    {
    g_com_map[UWBFrequency]=1;
    }
//    g_com_map[IP_0]=111;
//    g_com_map[IP_1]=198;
//    g_com_map[IP_2]=60;
@@ -439,20 +523,25 @@
        UWB_work_state = SEARCH_DEV;
    }
      //g_com_map[SEND_4G_SECOND]
    if(g_com_map[SEND_4G_SECOND]<30)
      {
      gps_open_flag=0;
      }else{
      gps_open_flag=1;
      }
//    if(g_com_map[SEND_4G_SECOND]<30)
//      {
//      gps_open_flag=0;
//      }else{
//      gps_open_flag=1;
//      }
    g_com_map[MODBUS_MODE] = 0;
      log_4g_enable_flag=g_com_map[LOG_4G_ENABLE];
    g_com_map[VERSION] = (1<<8)|16;
    g_com_map[VERSION] = (1<<8)|20;
         
        
    LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id);
    LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位工卡 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",g_com_map[IP_0],g_com_map[IP_1],g_com_map[IP_2],g_com_map[IP_3],g_com_map[PORT]);
    LOG_INFO(TRACE_MODULE_APP,"设备UWB状态: %x .\r\n",g_com_map[UWBENBLE]);
    LOG_INFO(TRACE_MODULE_APP,"设备GPS状态: %x .\r\n",g_com_map[GPSENBLE]);
    LOG_INFO(TRACE_MODULE_APP,"设备UWB工作间隔: %x .\r\n",g_com_map[UWBFrequency]);
    LOG_INFO(TRACE_MODULE_APP,"设备GPS工作间隔: %x .\r\n",g_com_map[GPSFrequency]);
    LOG_INFO(TRACE_MODULE_APP,"当前GPS工作波特率: %d .\r\n",gpsbaudrate1);
    if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
    {
    LOG_INFO(TRACE_MODULE_APP,"TCP_RTCM模式,服务器地址: %d.%d.%d.%d:%d.\r\n",g_com_map[TCP_IP_0],g_com_map[TCP_IP_1],g_com_map[TCP_IP_2],g_com_map[TCP_IP_3],g_com_map[TCP_PORT]);
@@ -614,6 +703,29 @@
        powerled=0;
        Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); 
        }
         if(bat_percent<1)
         {
                userkey_state=3;
                heartbeasend_flag = 1;
                guanjiflag=1;
                guanjiflagtime=HIDO_TimerGetTick();
         }
         if(guanjiflag)
         {
              rtkled=WHITE;
              uwbled=WHITE;
              led4g=WHITE;
              powerled=WHITE;
              Set4LEDColor(uwbled,rtkled,led4g,powerled);
             if(HIDO_TimerGetTick() - guanjiflagtime>3)
             {
                PCA9555_Set_One_Value_Output(LED_POWER,0);//输出低电平关闭LED
                PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0);
                PCA9555_Set_One_Value_Output(GPS_POWER,0);//关GPS
                PCA9555_Set_One_Value_Output(PWR_ENABLE,0);//低电平关闭
             }
         }
}
void boot_deinit(void)
{
@@ -633,37 +745,36 @@
extern uint32_t uwb_time_count;
uint8_t GPS_UPLOAD_FLAG=0;
uint32_t elapsed_time_jibu;
void upload_apppoll()
{   
   uint32_t elapsed_time_jibu;
    switch (current_state)
    if(current_state==STATE_NORMAL)
         {
#ifdef UWB_1_5HZ
        case STATE_NORMAL:
        if(g_com_map[UWBFrequency]>1)
        {
            elapsed_time_jibu = uwb_time_count - state_start_time;
                switch(elapsed_time_jibu)
            if(elapsed_time_jibu==1)
                  {
                     case UWB_OPEN_COUNT:
                            CloseUWB();
                          UWBSendUDPTask();
                     break;
                     case UWB_MEASUREMENT_INTERVAL:
            }
            else if(elapsed_time_jibu==g_com_map[UWBFrequency])
            {
                           taglist_num = 0;
                            CloseUWB();
                            Uwb_init();
                            OpenUWB();                  
                   state_start_time = uwb_time_count;   
                     break;
                  }
            break;
#endif
        case STATE_SLEEP:
        }
        else
        {}
    }
    else if(current_state==STATE_SLEEP)
    {
            elapsed_time_jibu = uwb_time_count - state_start_time;
                switch(elapsed_time_jibu)
            switch(elapsed_time_jibu==1)
                  {
                     case UWB_OPEN_COUNT:
                            CloseUWB();
@@ -678,8 +789,50 @@
                   state_start_time = uwb_time_count;                     
                     break;                  
                  }
            break;
         }   
//    switch (current_state)
//    {
////#ifdef UWB_1_5HZ
//       if(g_com_map[UWBFrequency]>1)
//       {
//        case STATE_NORMAL:
//            elapsed_time_jibu = uwb_time_count - state_start_time;
//            if(elapsed_time_jibu)
//            {
//                 CloseUWB();
//                 UWBSendUDPTask();
//            }
//            else if(elapsed_time_jibu==g_com_map[UWBFrequency])
//            {
//                   taglist_num = 0;
//                   CloseUWB();
//                   Uwb_init();
//                   OpenUWB();
//                   state_start_time = uwb_time_count;
//            }
//       }
//       else
//       {}
////#endif
//        case STATE_SLEEP:
//            elapsed_time_jibu = uwb_time_count - state_start_time;
//            switch(elapsed_time_jibu)
//            {
//            case UWB_OPEN_COUNT:
//                CloseUWB();
//                UWBSendUDPTask();
//                break;
//
//            case UWB_MEASUREMENT_INTERVAL_SLEEP:
//                taglist_num = 0;
//                CloseUWB();
//                Uwb_init();
//                OpenUWB();
//                state_start_time = uwb_time_count;
//                break;
//            }
//            break;
//    }
}
@@ -745,18 +898,11 @@
    adc_open(&usr_adc_cfg);
    uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
    power_init();
    sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
    sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试
    PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低
    adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
    pca_input_detection_init(pca_handler);//pca检测输入
    Uwb_init();
      #ifdef UWB_CK
    if(g_com_map[UWBFrequency]&&g_com_map[UWBENBLE])
    {
      OpenUWB();
      #endif
//    DBG_SetMode(DBG_MODE_SHELL);
//    Shell_Init();
    }
    if(!read_5v_input_pca())
    {
     Set4LEDColor(BLUE,GREEN,WHITE,RED);
@@ -771,9 +917,15 @@
    gps_prase_flag=1;//恢复gps解析
    uart1_change_from_debug_to_gps();//测试
    PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS
    #ifdef UWB_CG
    if(g_com_map[UWBENBLE]==0)
    {
    CloseUWB();
    #endif
    }
    sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback);
    sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试
    PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低
    adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
    pca_input_detection_init(pca_handler);//pca检测输入
    while (1)
    {