APL/App.c
@@ -180,99 +180,6 @@
extern uint8_t chongdian_time;
extern uint8_t input5vtime;
extern uint16_t work_time;
void PowerLedTask(void)
{
     static u8 powerled_state=0;
    if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
    {
        if(!power_state&&!chargedbg_flag)
        {
            DBG_SetMode(DBG_MODE_CHARGE);
            power_state = 1;
        }
       while(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)&&DBG_GetMode() == DBG_MODE_CHARGE)
        {
        nomove_count = 0;
        HAL_IWDG_Refresh(&hiwdg);
        DBG_Poll();
        IdleTask();
        if(bat_percent>=100)
        {
            powerled = RED;
            chongman_flag=1;
        }
        else
        {
            powerled = RED;
        }
//        if(receive1_gotosleep_flag||receive2_gotosleep_flag)
//        {
//            if(receive1_gotosleep_flag)
//            {
//            uwbled=LEDOFF;
//            Stop_chongdian_Mode_Poll();
//            HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//               if(chongman_flag)  //充满电重启,重启外设。
//               {HAL_NVIC_SystemReset();}
//            }
//            if(receive2_gotosleep_flag)
//            {
//            uwbled=LEDOFF;
//            Stop_chongdian_Mode_Poll();
//            HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//            }
//        }
//        else
//        {
//        Internet_Poll();
//        HIDO_TimerPoll();
//        HIDO_ATLitePoll();
//        UDPClient_Poll();
//            GPS_Poll();
//                if(taglist_num>0)
//                {
//                    if(work_time>=YUNDONG_UWB_TIME)
//                    {
//                        work_time=0;
//                        Uwb_Zubao_Poll();
//                        UDPClient_UploadGPS((char*)GPS_data);
//                        HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
//                        taglist_num=0;
//                    }
//                }
//                else
//                {
//                        if(work_time>=g_com_map[GPS_HZ])
//                        {
//                            work_time=0;
//                            if(GPS_successful_flag)
//                            {
//                                UDPClient_UploadGPS((char*)GPS_data);
//                            }
//                            else
//                            {
//                                Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
//                            }
//                        }
//
//                }
//            }
        }
    }
    chongman_flag=0;
    chargeon = 0;
   if(power_state)
    {
        DBG_SetMode(DBG_MODE_SHELL);
        power_state = 0;
    }
    if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
    {
        chargedbg_flag = 0;
    }
}
uint8_t imu_enable;
extern uint32_t dev_id;
void Program_Init(void)
@@ -345,10 +252,10 @@
    dev_id = g_com_map[DEV_ID];
    printf("设备ID: %x .\r\n",dev_id);
    printf("固件版本: 铁鞋定位 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    printf("固件版本:  L071无UWB工卡V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    printf("服务器地址: %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]);
    printf("当前运动时GPS工作间隔: %d .\r\n",g_com_map[GPS_HZ]);
    printf("当前被拆时GPS工作间隔: %d .\r\n",g_com_map[CHAICHUGPS_HZ]);
//    printf("当前被拆时GPS工作间隔: %d .\r\n",g_com_map[CHAICHUGPS_HZ]);
//       if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP)
//    {        printf("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]);
//    }else if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP)
@@ -368,7 +275,43 @@
//        printf("单点定位模式模式. \r\n");
//    }
}
void PowerDownDetect(void)
{
    static HIDO_UINT32 l_u32QXpowerTick = 0;
    static uint32_t powercount=0;
    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12))
    {
       if((HIDO_TimerGetTick() - l_u32QXpowerTick) >=1000)
      {
          while(1)
          {
              gpsled=WHITE;
              uwbled=WHITE;
              loraled=WHITE;
              powerled=WHITE;
              if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==0)
              {
                  powercount = 0;
                  l_u32QXpowerTick = HIDO_TimerGetTick();
                  while(1)
                  {
                  if((HIDO_TimerGetTick() - l_u32QXpowerTick) >=100)
                    {
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
                        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
                    }
                }
              }
          }
      }
      }else{
           l_u32QXpowerTick = HIDO_TimerGetTick();
      }
}
void IdleTask(void)
{
  // APLPollTask();
@@ -418,50 +361,173 @@
        uwbchecksum = Checksum_u16(&uwb_send[2],15+5*taglist_num);
        memcpy(&uwb_send[17+5*taglist_num],&uwbchecksum,2);
}
u8 only_one_flag;
u16 chongman_time;
u8 bat_percent_old=100;
extern IWDG_HandleTypeDef hiwdg;
u32 adctick = 0;
u8 rtk_state = 1;
void CloseRTK4G(void)
{
      rtk_state = 0;
      loraled = LEDOFF;
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
}
void OpenRTK4G(void)
{
      loraled = 1;
      HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);
}
void PowerLedTask(void)
{
    static u8 powerled_state=0;
    if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
    {
        chongman_time=0;
        only_one_flag=0;
        uwbled=0;
        gpsled=0;
        loraled=0;
        powerled=0;
        if(!power_state&&!chargedbg_flag)
        {
            CloseRTK4G();
            DBG_SetMode(DBG_MODE_CHARGE);
            power_state = 1;
//            Uart_ChongxinInit(UART_ID_DBG);
//            DBG_Init();
//            Shell_Init();
        }
        while(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)&&DBG_GetMode() == DBG_MODE_CHARGE)
        {
            nomove_count = 0;
            if(HIDO_TimerGetTick()-adctick>6000)  //10分钟采样一次 电量
            {HAL_IWDG_Refresh(&hiwdg);
                chongman_time=chongman_time+6;
                adctick = HIDO_TimerGetTick();
                if( HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10))
                {
                    bat_percent=Get_Battary();
                }else{
                    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
                    bat_percent=Get_Battary();
                    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
                }
            }
            if(bat_percent>=99&&!only_one_flag)
            {
            only_one_flag=1;
            chongman_time=0;
            }
            if(bat_percent>=99&&chongman_time>=1800)
            {
                powerled = GREEN;
            }else{
                powerled = RED;
            }
            delay_ms(100);
            DBG_Poll();
            Internet_Poll();
            Set4LEDColor(0,0,0,powerled);
        }
    }
    chargeon = 0;
    if(power_state)
    {
        DBG_SetMode(DBG_MODE_SHELL);
        power_state = 0;
        bat_percent_old=100;
        OpenRTK4G();
    }
    if(!HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))
    {
     chargedbg_flag = 0;
    }
    if(HIDO_TimerGetTick()%1000<10 )
    {
        if(powerled_state==0)
        {
            if(bat_percent>15)
            {
                powerled = BLUE;
            }else{
                 powerled = RED;
            }
            powerled_state = 1;
          //  bat_percent = Battery_GetPercentage();
          Set4LEDColor(uwbled,gpsled,loraled,powerled);
        }
        }else
        {
            if(powerled_state)
            {
                powerled_state = 0;
                powerled = LEDOFF;
                uwbled = LEDOFF;
                gpsled = LEDOFF;
                loraled = LEDOFF;
                Set4LEDColor(uwbled,gpsled,loraled,powerled);
            }
        }
    if(HIDO_TimerGetTick()-adctick>6000)  //10分钟采样一次 电量
    {
        adctick = HIDO_TimerGetTick();
        if( HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10))
        {
            bat_percent=Get_Battary();
            if(bat_percent>bat_percent_old)
            {
            bat_percent=bat_percent_old;
            }
            else
            {
            bat_percent_old=bat_percent;
            }
        }else{
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
            bat_percent=Get_Battary();
            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
            if(bat_percent>bat_percent_old)
            {
            bat_percent=bat_percent_old;
            }
            else
            {
            bat_percent_old=bat_percent;
            }
        }
    }
}
extern uint32_t main_time;
extern uint16_t testlorarecve;
uint8_t delaysleep_count;
char str[17]= {"AT+IPR=9600;&W\r\n"};
extern  UART_HandleTypeDef huart5;
extern uint8_t stop_flag;
void Main_Poll()
{    
    if(main_time>10&&only_one_flag==0)
    {
        only_one_flag=1;
      Uart_ReConfigBaudRate(UART_ID_4G,115200);
    HAL_UART_Transmit(&huart5, str,17,1000);
    Uart_ReConfigBaudRate(UART_ID_4G,9600);
    }
    PowerLedTask();
    DBG_Poll();
    IdleTask();
    GPS_Poll();
    Internet_Poll();
    HIDO_TimerPoll();
    HIDO_ATLitePoll();
    UDPClient_Poll();
    HAL_IWDG_Refresh(&hiwdg);
//    if(AIR780E_IsIPIdle() && Socket_IsSendQueueEmpty(0))
//    if(main_time>10&&only_one_flag==0)
//    {
//        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//        only_one_flag=1;
//      Uart_ReConfigBaudRate(UART_ID_4G,115200);
//    HAL_UART_Transmit(&huart5, str,17,1000);
//    Uart_ReConfigBaudRate(UART_ID_4G,9600);
//    }
    if(delaysleep_count==0/*&&!gps_need_data_flag*/)
    if(((IfTCPConnected()&&AIR780E_IsIPIdle()&&Socket_IsSendQueueEmpty(0))/*||((!flag_TCP_reconnectting)&&!IfTCPConnected())*/))
    if(stop_flag)
    {
         HAL_IWDG_Refresh(&hiwdg);
        printf("要进入休眠了,当前时间戳%d\r\n",HIDO_TimerGetTick());
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
        HAL_IWDG_Refresh(&hiwdg);
        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
    }
}
void Main_Poll_666()
{
    u16 uwbchecksum;
    IdleTask();
    HAL_IWDG_Refresh(&hiwdg);
    if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))//5V输入检测
    {
    else
    {
        PowerLedTask();
        DBG_Poll();
        IdleTask();
@@ -470,97 +536,21 @@
        HIDO_TimerPoll();
        HIDO_ATLitePoll();
        UDPClient_Poll();
        HAL_IWDG_Refresh(&hiwdg);
        PowerDownDetect();
        Sleep_Panduan_Poll();
    }
    else
    {
        if(chongdian_only_one_flag)//如果从充电休眠状态突然拔掉充电线,进入正常工作模式,要重启重新启动4g gps等模块
        {HAL_NVIC_SystemReset();}
//    if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)) // 设备被拆卸拆卸后每秒发1次XTB,连续发五次。  然后10分钟发送一次定位信息,和XTB,其他时候休眠。
//    if(AIR780E_IsIPIdle() && Socket_IsSendQueueEmpty(0))
//    {
//        fangchai_flag=1;
//        yundong_state=0;
//        if(fangchai_state==0||fangchai_state==1)
//        {
//            GPS_Poll();
//            Internet_Poll();
//            HIDO_TimerPoll();
//            HIDO_ATLitePoll();
//            UDPClient_Poll();
//        }
//        if(fangchai_time>QIDONG_TIME&&fangchai_state==0)
//        {
//            fangchai_state=1;
//            fangchai_time=0;
//            if(GPS_successful_flag)
//            {
//                UDPClient_UploadGPS((char*)GPS_data);
//            }
//            else
//            {
//                Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
//            }
//        }
//        if(fangchai_time>DENGDAI_TIME&&fangchai_state==1)
//        {
//            fangchai_time=0;
//            fangchai_state=2;
//            Stop_Mode_Poll();
//        }
//        if(fangchai_state==2)
//        {
//         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//        }
//        if(fangchai_time>g_com_map[CHAICHUGPS_HZ]-QIDONG_TIME-DENGDAI_TIME&&fangchai_state==2)
//        {
//            HAL_NVIC_SystemReset();
//        }
//        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//    }
//    else//设备没被拆卸
//    if(delaysleep_count==0/*&&!gps_need_data_flag*/)
//    if(((IfTCPConnected()&&AIR780E_IsIPIdle()&&Socket_IsSendQueueEmpty(0))/*||((!flag_TCP_reconnectting)&&!IfTCPConnected())*/))
//    {
            if(receive3_gotosleep_flag)//没有处于充电状态&&同时在静止休状态,收到上位机要求的休眠标志位
            {
            Stop_Mode_Poll();
            HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
                if(work_time>1200)
                {HAL_NVIC_SystemReset();}///20分钟后再次启动工作,重复a步骤(避免铁鞋被盗找不到)
            }
            else
            {
                GPS_Poll();
                Internet_Poll();
                HIDO_TimerPoll();
                HIDO_ATLitePoll();
                UDPClient_Poll();
//                taglist_num=5;
                if(taglist_num>0)
                {
                    if(work_time>=YUNDONG_UWB_TIME)
                    {
                        work_time=0;
                        Uwb_Zubao_Poll();
                        UDPClient_UploadGPS((char*)GPS_data);
                        HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
                        taglist_num=0;
                    }
                }
                else
                {
                        if(work_time>=g_com_map[GPS_HZ])
                        {
                            work_time=0;
                            if(GPS_successful_flag)
                            {
                                UDPClient_UploadGPS((char*)GPS_data);
                            }
                            else
                            {
                                Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
                            }
                        }
                }
            }
}
//         HAL_IWDG_Refresh(&hiwdg);
//        printf("要进入休眠了,当前时间戳%d\r\n",HIDO_TimerGetTick());
//    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
//    }
}
//*/