From df5669303bd54d7bfd553c7cfad279231d7ece17 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 25 四月 2025 09:33:37 +0800 Subject: [PATCH] 3.6,加入蜂鸣器等逻辑 --- APL/App.c | 560 +++++++++++++++++++++++++++++-------------------------- 1 files changed, 298 insertions(+), 262 deletions(-) diff --git a/APL/App.c b/APL/App.c index f15b87b..6827944 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,111 +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; -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) - { - HAL_IWDG_Refresh(&hiwdg); - DBG_Poll(); - IdleTask(); - uwbled=LEDOFF; - 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) - { - air780_state=0; - chongdian_yundong_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]) - { - chongdian_yundong_time=0; - if(GPS_successful_flag) - { - UDPClient_UploadGPS((char*)GPS_data); -// UDPClient_UploadGPS_flag=1; - } - 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; - - } -} +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; uint8_t imu_enable; extern uint32_t dev_id; void Program_Init(void) @@ -240,7 +195,7 @@ //deca_sleep(1000); g_com_map[GROUP_ID]=3; - g_com_map[VERSION] = (2<<8)|10; + g_com_map[VERSION] = (3<<8)|6; if (g_com_map[COM_INTERVAL] <50) { @@ -297,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) @@ -320,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; + Set4LEDColor(uwbled,gpsled,loraled,powerled); + 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(); @@ -340,45 +331,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() { @@ -408,142 +361,225 @@ uwbchecksum = Checksum_u16(&uwb_send[2],15+5*taglist_num); memcpy(&uwb_send[17+5*taglist_num],&uwbchecksum,2); } -extern uint16_t testlorarecve; -void Main_Poll() +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) { - u16 uwbchecksum; - IdleTask(); - HAL_IWDG_Refresh(&hiwdg); - if(HAL_GPIO_ReadPin(INPUT_5V_GPIO_Port,INPUT_5V_Pin))//5V输入检测 - { yundong_state=0; + 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); +} +extern uint8_t ledonflag; +extern uint32_t ledontime; +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()-ledontime>100&&ledonflag==1) + { + ledonflag=0; + Set4LEDColor_Off(); + } +// else +// { +//// if(powerled_state) +// { +// powerled_state = 0; +//// powerled = LEDOFF; +//// uwbled = LEDOFF; +//// gpsled = LEDOFF; +//// loraled = LEDOFF; +//// Set4LEDColor(uwbled,gpsled,loraled,powerled); +// Set4LEDColor_Off(); +// } +// +// } + + + 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; + } + } + } + if(bat_percent<=1) + { + 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); + } +} + +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; +extern uint16_t beepontime; +u32 keystarttime,keystarttime2; +extern uint8_t userkey_state4g; +void UserKeyTask(void) +{ + if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)) + { + if(HIDO_TimerGetTick() - keystarttime>1000) + { + beepontime = 2; + userkey_state4g = 1; +// userkey_state = 1; +// heartbeasend_flag = 1; + keystarttime = HIDO_TimerGetTick(); + } + }else + { + keystarttime = HIDO_TimerGetTick(); + keystarttime2 = HIDO_TimerGetTick(); + } + if(beepontime>0) + {Beep_On();} + else + {Beep_Off();} + Sleep_Panduan_Poll(); + +} +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); +// } + if(stop_flag) + { + HAL_IWDG_Refresh(&hiwdg); + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI); + } + else + { PowerLedTask(); DBG_Poll(); IdleTask(); + GPS_Poll(); Internet_Poll(); HIDO_TimerPoll(); HIDO_ATLitePoll(); UDPClient_Poll(); + HAL_IWDG_Refresh(&hiwdg); + PowerDownDetect(); + UserKeyTask(); + Sleep_Panduan_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; - 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(); - } - } - else - { - yundong_state=1; - GPS_Poll(); - Internet_Poll(); - HIDO_TimerPoll(); - HIDO_ATLitePoll(); - UDPClient_Poll(); -// taglist_num=5; - if(taglist_num>0) - { - if(air780_state>=2) - { - HAL_NVIC_SystemReset(); - } - if(yundong_time>=YUNDONG_UWB_TIME) - { - air780_state=0; - yundong_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]) - { - yundong_time=0; - if(GPS_successful_flag) - { - UDPClient_UploadGPS((char*)GPS_data); -// UDPClient_UploadGPS_flag=1; - } - else - { - Module_GetLBSLocationAsync(LBSLocationCallback, HIDO_NULL); - } - } - } - } - - } -} +// if(AIR780E_IsIPIdle() && Socket_IsSendQueueEmpty(0)) +// { +// HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); +// } +// if(delaysleep_count==0/*&&!gps_need_data_flag*/) +// if(((IfTCPConnected()&&AIR780E_IsIPIdle()&&Socket_IsSendQueueEmpty(0))/*||((!flag_TCP_reconnectting)&&!IfTCPConnected())*/)) +// { +// HAL_IWDG_Refresh(&hiwdg); +// printf("要进入休眠了,当前时间戳%d\r\n",HIDO_TimerGetTick()); +// HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); +// } } //*/ -- Gitblit v1.9.3