/******************************************************************************* * File Name : App.c * Description : * Created on : 2021Äê5ÔÂ07ÈÕ * Author : www.hido-studio.com *******************************************************************************/ /******************************************************************************* * Include Files * *******************************************************************************/ #include #include #include #include "App.h" #include "stm32l0xx_hal.h" #include "HIDO_Timer.h" #include "Module.h" #include "GPS.h" #include "main.h" #include "DBG.h" #include "global_param.h" #include "AIR780EDriver.h" #include "Uart.h" #include "Internet.h" #include "HIDO_ATLite.h" #include "UDPClient.h" #include "global_param.h" #include "SPIFlash.h" #include "App.h" #include "dw_driver.h" #include "deca_device_api.h" #include "dw_app.h" #include "Lora.h" #include "radio.h" #include "DBG.h" #include "WS2812.h" #include "dw_mbx_tag.h" /******************************************************************************* * Macro * *******************************************************************************/ /******************************************************************************* * Type Definition * *******************************************************************************/ /******************************************************************************* * Local Variable * *******************************************************************************/ static HIDO_BOOL l_bDismantle = HIDO_FALSE; static HIDO_BOOL l_bCancelAlarm = HIDO_FALSE; static HIDO_UINT32 l_u32DismantleAlarmTick = 0; static HIDO_BOOL l_bCharge = HIDO_FALSE; static HIDO_BOOL l_u32CancelChargeReport = HIDO_FALSE; static HIDO_UINT32 l_u32ChargeTick = 0; static HIDO_UINT32 l_u32LocationTick = 0; extern ST_GPS l_stGPS; extern uint32_t uwbled,gpsled,loraled,powerled; uint8_t uwb_send[200]={0x55,0xaa}; void Uwb_Zubao_Poll(); extern IWDG_HandleTypeDef hiwdg; /******************************************************************************* * Local Function Declaration * *******************************************************************************/ /******************************************************************************* * Local Function * *******************************************************************************/ char senddata[100]; void HexToAsciiSendUDP(uint8_t* data,u8 len) { u8 i,temp; for(i=0;i>4); sprintf(&senddata[2*i+1],"%x",temp&0xf); } senddata[2*len] = 0x0d; senddata[2*len+1] = 0x0a; // if(DBG_GetMode() == DBG_MODE_CFG) // Uart_Send(0, (HIDO_UINT8 *) senddata, 2*len+2); UDPClient_Uploadhex((uint8_t*)senddata,2*len+2); } extern uint8_t bat_percent; uint8_t LBS_data[100]="$GNGGA,LBS,"; extern uint8_t fangchai_flag; static HIDO_VOID LBSLocationCallback(ST_LBSLocation *_pstLBSLocation, HIDO_VOID *_pArg) { char LBS_dLon[16],LBS_dLat[16]; // Éϱ¨LBSλÖà snprintf(LBS_dLon,sizeof(LBS_dLon),"%.8lf",_pstLBSLocation->m_dLon); snprintf(LBS_dLat,sizeof(LBS_dLat),"%.8lf",_pstLBSLocation->m_dLat); memcpy(&LBS_data[11],&LBS_dLon,12); LBS_data[23]=0x2C; memcpy(&LBS_data[24],&LBS_dLat,12); HIDO_UINT32 u32Len = HIDO_UtilSnprintf((HIDO_CHAR *)LBS_data, sizeof(LBS_data), "%s,,,,,0,00,00.0,,,,,,*00,%X,%02x,%x,%d,%d,%d%\r\n", LBS_data,g_com_map[DEV_ID], bat_percent,0,0,0,fangchai_flag); Socket_Send(0, (HIDO_UINT8 *)LBS_data, u32Len); // HexToAsciiSendUDP(LBS_data,u32Len); // UDPClient_UploadGPS((char*)LBS_data); } 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; uint16_t qidong_time; #define QIDONG_TIME 60 //1·ÖÖÓ #define DENGDAI_TIME 30//90s //#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 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) { nomove_count = 0; 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; } } uint8_t imu_enable; extern uint32_t dev_id; void Program_Init(void) { float temp; uint16_t temp2; uint16_t i; parameter_init(); // hardware_version = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP); // hardware_pici = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP + 2); // hardware_type = STMFLASH_ReadHalfWord(FLASH_HARDWARE_VERSION_MAP + 4); //deca_sleep(1000); g_com_map[GROUP_ID]=3; g_com_map[VERSION] = (2<<8)|11; if (g_com_map[COM_INTERVAL] <50) { g_com_map[COM_INTERVAL] = 100; } if (g_com_map[COM_INTERVAL] >1000) { g_com_map[COM_INTERVAL] = 1000; } if (g_com_map[IMU_THRES] > 10) { g_com_map[IMU_THRES] = 2; } if (g_com_map[POWERx] > MAX_RFPOWER) { g_com_map[POWERx] = MAX_RFPOWER; } if (g_com_map[POWERx] < 0) { g_com_map[POWERx] = 0; } if(g_com_map[STATIONARY_TIME] == 0xffff) { g_com_map[STATIONARY_TIME] = 10; } if(g_com_map[NEARBASE_ID2]>10000) { g_com_map[NEARBASE_ID2] = 0; } if(g_com_map[GPS_HZ]<180||g_com_map[GPS_HZ]>3600) { if(g_com_map[GPS_HZ]==1) {g_com_map[GPS_HZ]=1;} else {g_com_map[GPS_HZ]=600;} } g_com_map[GPS_HZ]=1; if(g_com_map[CHAICHUGPS_HZ]<180||g_com_map[CHAICHUGPS_HZ]>3600) { {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; } // g_com_map[GPS_HZ]=120; imu_enable=g_com_map[IMU_ENABLE]; // module_power = g_com_map[POWERx]; // imu_enable = g_com_map[IMU_ENABLE]; // motor_enable = g_com_map[MOTOR_ENABLE]; //g_com_map[COM_INTERVAL] = 100; group_id = g_com_map[GROUP_ID]; 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("·þÎñÆ÷µØÖ·: %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"); // } } void IdleTask(void) { // APLPollTask(); if(g_com_map[CNT_RESTART]==1) { g_com_map[CNT_RESTART]=0; // printf("%s URTRestart",__debug_info__); // URTRestart(); HAL_NVIC_SystemReset(); } if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0) { // printf("%s URTRestart",__debug_info__); // URTRestart(); // // SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //Èí¸´Î»»Øµ½bootloader HAL_NVIC_SystemReset(); } } 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); uwb_send[6] = tagseq; uwb_send[7] = (tagseq++)>>8; uwb_send[8] = bat_percent; uwb_send[9] = state_flag; memcpy(&uwb_send[10],&testlorarecve,2); testlorarecve=0; uwb_send[12] = 0; uwb_send[13] = 0; uwb_send[14] = 0; uwb_send[15] = 0; uwb_send[16] = taglist_num; memcpy(&uwb_send[17],&tagid_list,2*taglist_num); memcpy(&uwb_send[17+taglist_num*2],&tagdist_list,2*taglist_num); memcpy(&uwb_send[17+taglist_num*4],&tagbat_list,taglist_num); 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() { u16 uwbchecksum; 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; 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); } } } } } } } //*/ ////ÒÔÉÏÊÇÔ´´úÂ룬±»²ð³ýʱ¼ä½ÓÐԹرÕ4G