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 | 304 +++++++++++++++++++++++--------------------------- 1 files changed, 140 insertions(+), 164 deletions(-) diff --git a/APL/App.c b/APL/App.c index 2a9befa..73bd1b4 100644 --- a/APL/App.c +++ b/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,62 +192,71 @@ } 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(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); } } + } + } } } @@ -240,7 +288,7 @@ //deca_sleep(1000); g_com_map[GROUP_ID]=3; - g_com_map[VERSION] = (2<<8)|8; + g_com_map[VERSION] = (3<<8)|1; if (g_com_map[COM_INTERVAL] <50) { @@ -282,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; @@ -339,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() { @@ -414,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>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(); @@ -506,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 { @@ -540,8 +518,6 @@ } } } - - } } } -- Gitblit v1.9.3