APL/App.c
@@ -103,14 +103,54 @@
//    HexToAsciiSendUDP(LBS_data,u32Len);
//    UDPClient_UploadGPS((char*)LBS_data);
}
extern UART_HandleTypeDef huart2;
uint8_t chongdian_only_one_flag;
void Stop_chongdian_Mode_Poll()
{
    if(chongdian_only_one_flag==0)
    {
        chongdian_only_one_flag=1;
        GPS_PowerOff();
        HAL_UART_DeInit(&huart2);
        GPIO_InitTypeDef GPIO_InitStruct = {0};//
        GPIO_InitStruct.Pin = GPIO_PIN_4;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
//        Radio.Sleep();
        dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
        dwt_entersleep();
    }
}
uint8_t only_one_flag;
void Stop_Mode_Poll()
{
    if(only_one_flag==0)
    {
        only_one_flag=1;
        GPS_PowerOff();
        HAL_UART_DeInit(&huart2);
        GPIO_InitTypeDef GPIO_InitStruct = {0};//
        GPIO_InitStruct.Pin = GPIO_PIN_4;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
//        Radio.Sleep();
        dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
        dwt_entersleep();
    }
}
extern uint16_t nomove_count;
extern uint8_t bat_percent;
extern uint8_t chargedbg_flag;
u8 power_state = 0,chargeon = 0;
uint8_t chongman_flag;
extern  uint16_t chongdian_yundong_time;
extern uint8_t bat_percent;
extern uint16_t heart_time;
extern uint8_t nomove_flag;
@@ -120,27 +160,26 @@
//#define STOP_TIME 600-DENGDAI_TIME-QIDONG_TIME//600s 10分钟
#define YUNDONG_UWB_TIME 1
#define YUNDONG_GPS4G_TIME 100
extern UART_HandleTypeDef huart2;
uint8_t GPS_data[200];
uint8_t GPS_successful_flag;
uint8_t fangchai_flag;
uint8_t fangchai_state;
uint8_t only_one_flag;
uint8_t only_one_flag1;
extern uint16_t fangchai_time;
extern uint8_t taglist_num;
uint16_t tagseq;
extern uint16_t tagid_list[ANC_MAX_NUM],tagdist_list[ANC_MAX_NUM];
extern uint8_t yundong_state;
extern uint16_t yundong_time;
extern uint8_t tagbat_list[ANC_MAX_NUM];
extern TIM_HandleTypeDef htim3;
extern uint8_t beep_state;
extern uint8_t air780_state;
//extern uint8_t air780_state;
extern uint16_t sleep_time;
uint8_t zuihoufasong_falg;
uint8_t UDPClient_UploadGPS_flag;
extern uint16_t chongdianmeiyouuwb_time;
extern uint8_t receive1_gotosleep_flag;
extern uint8_t receive2_gotosleep_flag;
extern uint8_t receive3_gotosleep_flag;
extern uint8_t chongdian_time;
extern uint8_t input5vtime;
extern uint16_t work_time;
void PowerLedTask(void)
     static u8 powerled_state=0;
@@ -153,63 +192,71 @@
        }
       while(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)&&DBG_GetMode() == DBG_MODE_CHARGE)
        {
            nomove_count = 0;
            HAL_IWDG_Refresh(&hiwdg);
        nomove_count = 0;
        HAL_IWDG_Refresh(&hiwdg);
        DBG_Poll();
        IdleTask();
        uwbled=LEDOFF;
        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(bat_percent>90)
            {
                powerled = RED;
                chongman_flag=1;
            }
            else
            {
                powerled = RED;
            }
                if(chongdianmeiyouuwb_time>30)
                {
                HAL_NVIC_SystemReset();
                }
                if(taglist_num>0)
                {
                    if(air780_state>=2)
                    {
                        HAL_NVIC_SystemReset();
                    }
                    if(chongdian_yundong_time>=YUNDONG_UWB_TIME)
                    if(work_time>=YUNDONG_UWB_TIME)
                    {
                        air780_state=0;
                        chongdian_yundong_time=0;
                        work_time=0;
                        Uwb_Zubao_Poll();
                        UDPClient_UploadGPS((char*)GPS_data);
//                        UDPClient_UploadGPS_flag=1;
                        HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
                        taglist_num=0;
                        chongdianmeiyouuwb_time=0;
                    }
                }
                else
                {
                        if(chongdian_yundong_time>=g_com_map[GPS_HZ])
                        if(work_time>=g_com_map[GPS_HZ])
                        {
                            chongdian_yundong_time=0;
                            work_time=0;
                            if(GPS_successful_flag)
                            {
                                UDPClient_UploadGPS((char*)GPS_data);
//                                UDPClient_UploadGPS_flag=1;
                            }
                            else
                            {
                                Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
                            }
                        }
                }
            }
        }
        
    }
@@ -241,7 +288,7 @@
    //deca_sleep(1000);
    g_com_map[GROUP_ID]=3;
   g_com_map[VERSION] = (2<<8)|11;
   g_com_map[VERSION] = (3<<8)|1;
    if (g_com_map[COM_INTERVAL] <50)
    {
@@ -341,45 +388,7 @@
        }
}
void Stop_Mode_Poll()
{
    if(only_one_flag==0)
    {
        only_one_flag=1;
        GPS_PowerOff();
        HAL_UART_DeInit(&huart2);
        GPIO_InitTypeDef GPIO_InitStruct = {0};//
        GPIO_InitStruct.Pin = GPIO_PIN_4;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
        Radio.Sleep();
        dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
        dwt_entersleep();
    }
}
void Stop_Mode_chulelora_Poll()//关掉除了uwb外的
{
    if(only_one_flag1==0)
    {
        only_one_flag1=1;
        GPS_PowerOff();
        HAL_UART_DeInit(&huart2);
        GPIO_InitTypeDef GPIO_InitStruct = {0};//
        GPIO_InitStruct.Pin = GPIO_PIN_4;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
        dwt_configuresleep(DWT_PRESRV_SLEEP | DWT_CONFIG, DWT_WAKE_CS | DWT_WAKE_WK| DWT_SLP_EN);
        dwt_entersleep();
    }
}
extern uint16_t testlorarecve;
void Uwb_Zubao_Poll()
{       
@@ -416,90 +425,66 @@
    IdleTask();
    HAL_IWDG_Refresh(&hiwdg);
    if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))//5V输入检测
    {   yundong_state=0;
    {
        PowerLedTask();
        DBG_Poll();
        IdleTask();
        Internet_Poll();
        HIDO_TimerPoll();
        HIDO_ATLitePoll();
        UDPClient_Poll();
    }
    else   
    {
    if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)) // 设备被拆卸拆卸后每秒发1次XTB,连续发五次。  然后10分钟发送一次定位信息,和XTB,其他时候休眠。
    {
        if(air780_state>=2)
        {
            HAL_NVIC_SystemReset();
        }
        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);
//                UDPClient_UploadGPS_flag=1;
            }
            else
            {
                Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
            }
        }
        if(fangchai_time>DENGDAI_TIME&&fangchai_state==1)
        {
            fangchai_time=0;
            fangchai_state=2;
        if(chongdian_only_one_flag)//如果从充电休眠状态突然拔掉充电线,进入正常工作模式,要重启重新启动4g gps等模块
        {HAL_NVIC_SystemReset();}
//    if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)) // 设备被拆卸拆卸后每秒发1次XTB,连续发五次。  然后10分钟发送一次定位信息,和XTB,其他时候休眠。
//    {
//        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();
//        }
//    }
//    else//设备没被拆卸
//    {
            if(receive3_gotosleep_flag)//没有处于充电状态&&同时在静止休状态,收到上位机要求的休眠标志位
            {
            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();
        }
    }
    else//设备没被拆卸
    {
        fangchai_flag=0;
        if(fangchai_state>=2)
        {
            HAL_NVIC_SystemReset();
        }
            if(nomove_flag/*&&zuihoufasong_falg*/)//静止状态
            {
                yundong_state=0;
                if(sleep_time>12)
                {
                Stop_Mode_Poll();
                HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
                if(sleep_time>1800)
                {HAL_NVIC_SystemReset();}
                }
                else
                {
                Internet_Poll();
                HIDO_TimerPoll();
                HIDO_ATLitePoll();
                UDPClient_Poll();
                }
            HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
                if(work_time>1200)
                {HAL_NVIC_SystemReset();}///20分钟后再次启动工作,重复a步骤(避免铁鞋被盗找不到)
            }
            else
            {
                yundong_state=1;
                GPS_Poll();
                Internet_Poll();
                HIDO_TimerPoll();
@@ -508,32 +493,23 @@
//                taglist_num=5;
                if(taglist_num>0)
                {
                    if(air780_state>=2)
                    {
                        HAL_NVIC_SystemReset();
                    }
                    if(yundong_time>=YUNDONG_UWB_TIME)
                    if(work_time>=YUNDONG_UWB_TIME)
                    {
                        air780_state=0;
                        yundong_time=0;
                        work_time=0;
                        Uwb_Zubao_Poll();
                        UDPClient_UploadGPS((char*)GPS_data);
//                        UDPClient_UploadGPS_flag=1;
                        HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
                        taglist_num=0;
                    }
                }
                else
                {
//                    if(g_com_map[GPS_HZ]==1)
//                    {
                        if(yundong_time>=g_com_map[GPS_HZ])
                        if(work_time>=g_com_map[GPS_HZ])
                        {
                            yundong_time=0;
                            work_time=0;
                            if(GPS_successful_flag)
                            {
                                UDPClient_UploadGPS((char*)GPS_data);
//                                UDPClient_UploadGPS_flag=1;
                            }
                            else
                            {
@@ -542,8 +518,6 @@
                        }
                }
            }
    }
}
}