From 1cf09c6c4a137d29f63fd8df3c0ca16b9329079e Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期四, 17 四月 2025 16:25:52 +0800 Subject: [PATCH] 适配最新boot,适配4g工卡 --- keil/include/main/main.c | 514 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 271 insertions(+), 243 deletions(-) diff --git a/keil/include/main/main.c b/keil/include/main/main.c index 94b17c8..1750eff 100644 --- a/keil/include/main/main.c +++ b/keil/include/main/main.c @@ -237,36 +237,37 @@ adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 } void SecondTask(void) -{static uint8_t second_count; - if(second_count++>60) - { - second_count = 0; - MinuteTask(); - } - //UWB状态检测 -if(!power_low_flag)//低供电下不需要检测重连 - { - if(IfTCPConnected()) - { - TCP_reconnect_timer =0; - flag_TCP_reconnectting = 0; - } else { - if(TCP_reconnect_timer<30)//如果TCP没有连接,每隔10分钟尝试连接30秒 - { - flag_TCP_reconnectting = 1; - } else { - flag_TCP_reconnectting = 0; - } - if(TCP_reconnect_timer++>600) - { - TCP_reconnect_timer = 0; - } +{ +// static uint8_t second_count; +// if(second_count++>60) +// { +// second_count = 0; +// MinuteTask(); +// } +// //UWB状态检测 +//if(!power_low_flag)//低供电下不需要检测重连 +// { +// if(IfTCPConnected()) +// { +// TCP_reconnect_timer =0; +// flag_TCP_reconnectting = 0; +// } else { +// if(TCP_reconnect_timer<30)//如果TCP没有连接,每隔10分钟尝试连接30秒 +// { +// flag_TCP_reconnectting = 1; +// } else { +// flag_TCP_reconnectting = 0; +// } +// if(TCP_reconnect_timer++>600) +// { +// TCP_reconnect_timer = 0; +// } - } - } +// } +// } HIDO_TimerTick(); // if(nomove_count<=g_com_map[NOMOVESLEEP_TIME])//防止溢出 - nomove_count++; +// nomove_count++; // else{ // nomove_count=g_com_map[NOMOVESLEEP_TIME]+1; // } @@ -355,14 +356,14 @@ parameter_init_anchor();//g_com_map表初始化角色默认为基站 dev_id=g_com_map[DEV_ID];//这里不太对 // g_com_map[GROUP_ID]=9; - group_id=g_com_map[GROUP_ID];//组ID - memcpy(&disoffset,&g_com_map[DIST_OFFSET],2); - warning_distance=g_com_map[ALARM_DISTANCE1]; - prewarning_distance=g_com_map[ALARM_DISTANCE2]; - send_struct.warnDistence=warning_distance; - send_struct.alarmDistence=prewarning_distance;//更新报警距离 - memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID - send_struct.tagId=dev_id;//更新设备ID +// group_id=g_com_map[GROUP_ID];//组ID +// memcpy(&disoffset,&g_com_map[DIST_OFFSET],2); +// warning_distance=g_com_map[ALARM_DISTANCE1]; +// prewarning_distance=g_com_map[ALARM_DISTANCE2]; +// send_struct.warnDistence=warning_distance; +// send_struct.alarmDistence=prewarning_distance;//更新报警距离 +// memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID +// send_struct.tagId=dev_id;//更新设备ID // g_com_map[IP_0]=111; // g_com_map[IP_1]=198; @@ -370,192 +371,191 @@ // g_com_map[IP_3]=6; // g_com_map[PORT]=6666; - g_com_map[IP_0]=117; - g_com_map[IP_1]=72; - g_com_map[IP_2]=111; - g_com_map[IP_3]=237; - g_com_map[PORT]=7000; - - g_com_map[TCP_IP_0]=111; - g_com_map[TCP_IP_1]=198; - g_com_map[TCP_IP_2]=60; - g_com_map[TCP_IP_3]=6; - g_com_map[TCP_PORT]=1234; +// g_com_map[IP_0]=117; +// g_com_map[IP_1]=72; +// g_com_map[IP_2]=111; +// g_com_map[IP_3]=237; +// g_com_map[PORT]=7000; +// +// g_com_map[TCP_IP_0]=111; +// g_com_map[TCP_IP_1]=198; +// g_com_map[TCP_IP_2]=60; +// g_com_map[TCP_IP_3]=6; +// g_com_map[TCP_PORT]=1234; /* RTCMMODE_NONE, RTCMMODE_TCP, RTCMMODE_NTRIP, */ - g_com_map[RTCMMODE_INDEX] = RTCMMODE_NTRIP; +// g_com_map[RTCMMODE_INDEX] = RTCMMODE_NTRIP; - snprintf((char *)&g_com_map[NTRIP_HOST_INDEX], 32, "140.143.212.42"); - g_com_map[NTRIP_PORT_INDEX] = HIDO_UtilStrToInt("8005"); -// snprintf((char *)&g_com_map[NTRIP_PORT_INDEX], 32, "8005"); - snprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX], 32, "test005"); - snprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX], 32, "Hxzk0228"); - snprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX], 32, "RTCM32_GNSS2"); +// snprintf((char *)&g_com_map[NTRIP_HOST_INDEX], 32, "140.143.212.42"); +// g_com_map[NTRIP_PORT_INDEX] = HIDO_UtilStrToInt("8005"); +//// snprintf((char *)&g_com_map[NTRIP_PORT_INDEX], 32, "8005"); +// snprintf((char *)&g_com_map[NTRIP_USERNANME_INDEX], 32, "test005"); +// snprintf((char *)&g_com_map[NTRIP_PASSWORD_INDEX], 32, "Hxzk0228"); +// snprintf((char *)&g_com_map[NTRIP_SOURCENAME_INDEX], 32, "RTCM32_GNSS2"); - if(g_com_map[BIND_DEV_ID]==0) - { - UWB_work_state = UN_BIND; - }else{ - UWB_work_state = SEARCH_DEV; - } - //g_com_map[SEND_4G_SECOND] - if(g_com_map[SEND_4G_SECOND]<30) - { - gps_open_flag=0; - }else{ - gps_open_flag=1; - } +// if(g_com_map[BIND_DEV_ID]==0) +// { +// UWB_work_state = UN_BIND; +// }else{ +// UWB_work_state = SEARCH_DEV; +// } +// //g_com_map[SEND_4G_SECOND] +// if(g_com_map[SEND_4G_SECOND]<30) +// { +// gps_open_flag=0; +// }else{ +// gps_open_flag=1; +// } g_com_map[MODBUS_MODE] = 0; log_4g_enable_flag=g_com_map[LOG_4G_ENABLE]; g_com_map[VERSION] = (1<<8)|3; LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id); - LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); - LOG_INFO(TRACE_MODULE_APP,"服务器地址: %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]); - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) - { - LOG_INFO(TRACE_MODULE_APP,"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) - { - LOG_INFO(TRACE_MODULE_APP,"NtripHost:%s.\r\n",(char *)&g_com_map[NTRIP_HOST_INDEX]); - LOG_INFO(TRACE_MODULE_APP,"NtripPort:%d.\r\n",g_com_map[NTRIP_PORT_INDEX]); - LOG_INFO(TRACE_MODULE_APP,"NtripUsername:%s.\r\n",(char *)&g_com_map[NTRIP_USERNANME_INDEX]); - LOG_INFO(TRACE_MODULE_APP,"NtripPassword:%s.\r\n",(char *)&g_com_map[NTRIP_PASSWORD_INDEX]); - LOG_INFO(TRACE_MODULE_APP,"NtripSourcename:%s.\r\n",(char *)&g_com_map[NTRIP_SOURCENAME_INDEX]); - } - else if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NONE) - { - LOG_INFO(TRACE_MODULE_APP,"单点定位模式模式. \r\n"); - } + LOG_INFO(TRACE_MODULE_APP,"跳转OTA升级固件启动成功\r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff); +// LOG_INFO(TRACE_MODULE_APP,"服务器地址: %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]); + delay_ms(500); } uint32_t adctick = 0; uint8_t only_one_flag; uint16_t chongman_time; uint8_t bat_percent_old=100; uint8_t input5vflag; -uint8_t kai_4g_flag; +extern uint8_t ota_flag; void IdleTask(void) { -if(read_5v_input_pca()) - { - if(state5v==0) - { - state5v=1; - state5V_prase_flag=state5v; - gps_prase_flag=0;//解除gps解析 - uart1_change_from_gps_to_debug();//测试 - PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 - } - chongman_time=0; - only_one_flag=0; - uwbled=0; - rtkled=0; - led4g=0; - powerled=0; -// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); - while(1) - { - nomove_count = 0; - if(HIDO_TimerGetTick()-adctick>6000) //10分钟采样一次 电量 - { - chongman_time=chongman_time+6; - adctick = HIDO_TimerGetTick(); - PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 - adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 - } - 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; - } - if(DBG_GetMode() == DBG_MODE_SHELL) - { - if(kai_4g_flag==0) - { - kai_4g_flag=1; -// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,1); - //Shell_Init(); - } - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) - {TCPClient_Poll_1();} - //HIDO_InputPoll(); - DBG_Poll(); - Internet_Poll(); - HIDO_TimerPoll(); - HIDO_ATLitePoll(); - TCPClient_Poll(); - } - UART_CheckReceive(); - if(flag_secondtask) - { - flag_secondtask = 0; - SecondTask(); - } - if(DBG_GetMode() == DBG_MODE_SHELL) - { - Set4LEDColor(uwbled,rtkled,led4g,powerled); - } - else - { - Set4LEDColor(0,0,0,powerled); - } - if(input5v_time) - { - if(!read_5v_input_pca()) - { - break; - } - } - } - NVIC_SystemReset(); - input5vflag=1; - } - else - { - if(state5v==1) - { - g_com_map[MODBUS_MODE] = 0; - state5v=0; - state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 - PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS - } - } - UART_CheckReceive(); - if(g_com_map[CNT_RESTART]==1) - { - g_com_map[CNT_RESTART]=0; - NVIC_SystemReset(); - - } - if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0) - { - NVIC_SystemReset(); - } - HIDO_TimerPoll(); - if(ledonflag==1) - { - ledonflag=0; - uwbled=0; - rtkled=0; - led4g=0; - powerled=0; - Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); - } +//if(read_5v_input_pca()) +// { +// if(state5v==0) +// { +// state5v=1; +// state5V_prase_flag=state5v; +// gps_prase_flag=0;//解除gps解析 +// uart1_change_from_gps_to_debug();//测试 +// PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 +// } +// chongman_time=0; +// only_one_flag=0; +// uwbled=0; +// rtkled=0; +// led4g=0; +// powerled=0; +//// PCA9555_Set_One_Value_Output(AIR780E_ENBALE,0); +// while(1) +// { +// nomove_count = 0; +//// adctick = HIDO_TimerGetTick(); +// if(HIDO_TimerGetTick()-adctick>60) //10分钟采样一次 电量 +// { +// chongman_time=chongman_time+60; +// adctick = HIDO_TimerGetTick(); +// PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 +// adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 +// } +// if(bat_percent>=99&&!only_one_flag) +// { +// only_one_flag=1; +// chongman_time=0; +// } +// if(bat_percent>=99&&chongman_time>=600) +// { +// powerled = GREEN; +// }else{ +// powerled = RED; +// } +// if(DBG_GetMode() == DBG_MODE_SHELL) +// { +// if(ota_flag==1) +// { +//// OTA_Poll(); +//// HTTPClient_Poll(); +// } +// else +// { +// uwb_app_poll(); +// } +// Internet_Poll(); +// HIDO_TimerPoll(); +// HIDO_ATLitePoll(); +// TCPClient_Poll(); +// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) +// {TCPClient_Poll_1();} +// if(flag_secondtask) +// { +// flag_secondtask = 0; +// SecondTask(); +// } +// UserKeyTask(); +// } +// UART_CheckReceive(); +// if(flag_secondtask) +// { +// flag_secondtask = 0; +// SecondTask(); +// } +// if(DBG_GetMode() == DBG_MODE_SHELL) +// { +// Set4LEDColor(uwbled,rtkled,led4g,powerled); +// if(g_com_map[CNT_RESTART]==1) +// { +// g_com_map[CNT_RESTART]=0; +// save_com_map_to_flash(); +// NVIC_SystemReset(); +// } +// } +// else +// { +// Set4LEDColor(0,0,0,powerled); +// } +// if(input5v_time) +// { +// if(!read_5v_input_pca()) +// { +// break; +// } +// } +// } +// NVIC_SystemReset(); +// input5vflag=1; +// } +// else +// { +// if(state5v==1) +// { +// g_com_map[MODBUS_MODE] = 0; +// state5v=0; +// state5V_prase_flag=state5v; +// gps_prase_flag=1;//恢复gps解析 +// uart1_change_from_debug_to_gps();//测试 +// PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS +// } +// } +// UART_CheckReceive(); +// if(g_com_map[CNT_RESTART]==1) +// { +// g_com_map[CNT_RESTART]=0; +// NVIC_SystemReset(); +// +// } +// if(g_com_map[MAP_SIGN_INDEX]!=0x55AA||g_com_map[COM_INTERVAL]==0) +// { +// NVIC_SystemReset(); +// } +// HIDO_TimerPoll(); +// if(ledonflag==1) +// { +// ledonflag=0; +// uwbled=0; +// rtkled=0; +// led4g=0; +// powerled=0; +// Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); +// } } void boot_deinit(void) { @@ -579,8 +579,57 @@ extern uint8_t receive_flag; extern uint8_t YUANGPS_ParseGGA_data[256]; extern uint8_t YUANGPS_ParseGGA_changdu; +static HIDO_CHAR url[256 + 1]/*="http://123.57.87.125:7001/hfs/MK8000-4G工卡V1.2.Bin"*/; +//static HIDO_CHAR url[256 + 1]="http://123.57.87.125:7001/hfs/MK4G工卡-V1.6.Bin"; +//void OTA_MODE(void) +//{ +// if(g_com_map[OTA_FLAG]) +// { +// Uart_Register(UART_ID_4G, UART_ID0); +// Uart_Register(UART_ID_DBG_GPS, UART_ID1); +// DBG_Init(); +// DBG_SetMode(DBG_MODE_SHELL); +// Internet_Init(); +// // TCPClient_Init(); +// HTTPClient_Init(); +// gpio_open(); +// LED_output_init();//配置彩色灯引脚 +// IIC2_Init(); +// // Accelerometer_Init(); +// PCA9555_init(); +// uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); +// power_init(); +// sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback); +// sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试 +// pca_input_detection_init(pca_handler);//pca检测输入 +// state5v=1; +// state5V_prase_flag=state5v; +// gps_prase_flag=0;//解除gps解析 +// uart1_change_from_gps_to_debug();//测试 +// PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 +// memcpy((HIDO_UINT8 *)url,g_com_map+OTA_URL_INDEX,g_com_map[OTA_URL_CHANGDU]); +// OTA_Start((HIDO_UINT8 *)url); +// +//// g_com_map[OTA_FLAG]=0; +//// save_com_map_to_flash(); +//// delay_us(100000); +//// NVIC_SystemReset(); //软复位回到bootloader +// +// +// while (1) +// { +// OTA_Poll(); +// HTTPClient_Poll(); +// Internet_Poll(); +// HIDO_TimerPoll(); +// HIDO_ATLitePoll(); +//// IdleTask(); +// } +// } +//} int main(void) { + __enable_irq(); board_clock_run(); boot_deinit(); board_pins_config(); @@ -602,26 +651,18 @@ } calib_chip(); wdt_close(WDT_ID0); + Program_Init(); Uart_Register(UART_ID_4G, UART_ID0); Uart_Register(UART_ID_DBG_GPS, UART_ID1); DBG_Init(); - Program_Init(); Internet_Init(); - TCPClient_Init(); - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP) - { - NTRIPClient_Init(); - NTRIPApp_Init(); - } - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) - { - TCPClient_Init_1(); - } +// TCPClient_Init(); + HTTPClient_Init(); gpio_open(); LED_output_init();//配置彩色灯引脚 IIC2_Init(); - Accelerometer_Init(); +// Accelerometer_Init(); PCA9555_init(); adc_open(&usr_adc_cfg); uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback); @@ -631,49 +672,36 @@ PCA9555_Set_One_Value_Output(ADC_MINIUS,0);//拉低 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样 pca_input_detection_init(pca_handler);//pca检测输入 - Uwb_init(); - OpenUWB(); -// DBG_SetMode(DBG_MODE_SHELL); -// Shell_Init(); - - if(!read_5v_input_pca()) - { - Set4LEDColor(BLUE,GREEN,WHITE,RED); - delay_ms(500); - Set4LEDColor(RED,WHITE,RED,WHITE); - delay_ms(500); - Set4LEDColor(LEDOFF,LEDOFF,LEDOFF,LEDOFF); - } - g_com_map[MODBUS_MODE] = 0; - state5v=0; - state5V_prase_flag=state5v; - gps_prase_flag=1;//恢复gps解析 - uart1_change_from_debug_to_gps();//测试 - PCA9555_Set_One_Value_Output(MCU_A,0);//输出低电平切换为GPS + DBG_SetMode(DBG_MODE_SHELL); + state5v=1; + state5V_prase_flag=state5v; + gps_prase_flag=0;//解除gps解析 + uart1_change_from_gps_to_debug();//测试 + PCA9555_Set_One_Value_Output(MCU_A,1);//输出高电平切换为5V输入 + + memcpy(/*(HIDO_UINT8 *)*/url,(void *)APP_CONFIG_IAP_PARAM_MAP,256); + OTA_Start((HIDO_UINT8 *)url); + LOG_INFO(TRACE_MODULE_APP,"获取固件地址为:%s\r\n",url); while (1) { - uwb_app_poll(); + OTA_Poll(); + HTTPClient_Poll(); Internet_Poll(); HIDO_TimerPoll(); HIDO_ATLitePoll(); - TCPClient_Poll(); - if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) - {TCPClient_Poll_1();} -// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_NTRIP&&gps_ntripsend==2) +// TCPClient_Poll(); +// if(g_com_map[RTCMMODE_INDEX] == RTCMMODE_TCP) // { -// gps_ntripsend=0; -// NTRIPApp_ReportGGA(YUANGPS_ParseGGA_data, YUANGPS_ParseGGA_changdu); -// memset(YUANGPS_ParseGGA_data,0,YUANGPS_ParseGGA_changdu); -// YUANGPS_ParseGGA_changdu=0; -// } +// TCPClient_Poll_1(); +// } if(flag_secondtask) { flag_secondtask = 0; SecondTask(); } - PowerTask(); - IMUTask(); - UserKeyTask(); - IdleTask(); +// PowerTask(); +// IMUTask(); +// UserKeyTask(); +// IdleTask(); } } -- Gitblit v1.9.3