From 767edd5ec2a133c04c5d84aeba4135f0bd21d23f Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期三, 28 八月 2024 15:11:49 +0800
Subject: [PATCH] V3.1,改为最新逻辑。 1.铁鞋没有处于充电状态&&同时在运动状态,正常定位,有uwb发uwb跟gps数据,没有就看是否有gps数据,有发gps数据没有发lbs数据。 2.铁鞋没有处于充电状态&&同时在静止休状态,1秒钟发送一次状态和位置坐标;直到定位引擎回复收到消息后,设备停止发送状态进入休眠模式;20分钟后再次启动工作,重复(避免铁鞋被盗找不到) 3.铁鞋插上充电时候(延迟x秒后,为了确保能判断归箱)1秒钟发送一次在充电状态;定位引擎回复收到消息后,设备停止发送状态进入休眠模式(目的太阳能充电省电) 4.铁鞋充电到100%后启动4G工作,1秒钟发送一次充满电状态;定位引擎回复收到消息后,设备停止发送状态进入休眠模式(目的太阳能充电省电)。休眠模式是指:所有外设不再工作,不联网不测距。PS:每两种状态之间切换时,只要之前进入过休眠,就要重新开启4g,联网时间根据信号强度5-20s不等。重新联网期间没有办法上发任何数据。

---
 APL/App.c |  335 +++++++++++++++++++++++++++----------------------------
 1 files changed, 162 insertions(+), 173 deletions(-)

diff --git a/APL/App.c b/APL/App.c
index 4440981..73bd1b4 100644
--- a/APL/App.c
+++ b/APL/App.c
@@ -57,7 +57,7 @@
 static HIDO_UINT32 l_u32LocationTick = 0;
 extern ST_GPS l_stGPS;
 extern uint32_t uwbled,gpsled,loraled,powerled;
-uint8_t uwb_send[100]={0x55,0xaa};
+uint8_t uwb_send[200]={0x55,0xaa};
 void Uwb_Zubao_Poll();
 extern IWDG_HandleTypeDef hiwdg;
 /*******************************************************************************
@@ -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,25 +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[100];
+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;
+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;
@@ -151,34 +192,48 @@
         }
        while(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin)&&DBG_GetMode() == DBG_MODE_CHARGE)
         {
-            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(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);
                         HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
@@ -187,9 +242,9 @@
                 }
                 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);
@@ -199,7 +254,9 @@
                                 Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL);
                             }
                         }
+                    
                 }
+            }
         }
         
     }
@@ -231,7 +288,7 @@
     //deca_sleep(1000);
 
     g_com_map[GROUP_ID]=3;
-	g_com_map[VERSION] = (2<<8)|4;
+	g_com_map[VERSION] = (3<<8)|1;
 
     if (g_com_map[COM_INTERVAL] <50)
     {
@@ -273,6 +330,7 @@
     {
       {g_com_map[CHAICHUGPS_HZ]=600;}
     }
+    g_com_map[CHAICHUGPS_HZ]=1800;
     if(g_com_map[NOMOVESLEEP_TIME]>120)
     {
        g_com_map[NOMOVESLEEP_TIME]=120;
@@ -291,24 +349,24 @@
     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]);
-       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)
-    {
-//        sprintf((char *)&g_com_map[NTRIP_HOST_INDEX],"140.143.212.42");
-//        g_com_map[NTRIP_PORT_INDEX] = 8005;
-//        sprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX],"test006");
-//        sprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX],"hxzk20151102");
-//        sprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX],"RTCM32_GNSS2");
-        printf("NtripHost:%s.\r\n",(char *)&g_com_map[NTRIP_HOST_INDEX]);
-        printf("NtripPort:%d.\r\n",g_com_map[NTRIP_PORT_INDEX]);
-        printf("NtripUsername:%s.\r\n",(char *)&g_com_map[NTRIP_USERNANME_INDEX]);
-        printf("NtripPassword:%s.\r\n",(char *)&g_com_map[NTRIP_PASSWORD_INDEX]);
-        printf("NtripSourcename:%s.\r\n",(char *)&g_com_map[NTRIP_SOURCENAME_INDEX]);
-    }else if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NONE)
-    { 
-        printf("单点定位模式模式. \r\n");
-    }
+//       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)
+//    {
+////        sprintf((char *)&g_com_map[NTRIP_HOST_INDEX],"140.143.212.42");
+////        g_com_map[NTRIP_PORT_INDEX] = 8005;
+////        sprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX],"test006");
+////        sprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX],"hxzk20151102");
+////        sprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX],"RTCM32_GNSS2");
+//        printf("NtripHost:%s.\r\n",(char *)&g_com_map[NTRIP_HOST_INDEX]);
+//        printf("NtripPort:%d.\r\n",g_com_map[NTRIP_PORT_INDEX]);
+//        printf("NtripUsername:%s.\r\n",(char *)&g_com_map[NTRIP_USERNANME_INDEX]);
+//        printf("NtripPassword:%s.\r\n",(char *)&g_com_map[NTRIP_PASSWORD_INDEX]);
+//        printf("NtripSourcename:%s.\r\n",(char *)&g_com_map[NTRIP_SOURCENAME_INDEX]);
+//    }else if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NONE)
+//    { 
+//        printf("单点定位模式模式. \r\n");
+//    }
 }
 
 void IdleTask(void)
@@ -330,52 +388,15 @@
         }
 
 }
-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()
 {       
     uint16_t state_flag;
     u16 uwbchecksum;
     state_flag=fangchai_flag<<4;
-    
+        if(taglist_num>8)
+        {taglist_num=8;}
         uwb_send[2] = 0x12;//正常模式 
         uwb_send[3] = 15+5*(taglist_num);//数据段长度
         memcpy(&uwb_send[4],&dev_id,2);
@@ -404,89 +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);
-            }
-            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>600)
-                {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();
@@ -495,14 +493,9 @@
 //                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);
                         HexToAsciiSendUDP(uwb_send,19+5*taglist_num);
@@ -511,11 +504,9 @@
                 }
                 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);
@@ -527,8 +518,6 @@
                         }
                 }
             }
-        
-    }
 }
 }
 

--
Gitblit v1.9.3