| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | // 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(); |
| | |
| | | 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(); |
| | |
| | | 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); |
| | | // } |
| | | } |
| | | |
| | | //*/ |