diff --git a/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c index 16bdbde..b27293f 100644 --- a/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/V1.4/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -57,7 +57,7 @@ void app_init(void) { log_info(""); log_info("* * * * * * * * * * * * * * * * * *"); - log_info("* Version: 1.4.0 (RTOS) *"); + log_info("* Version: 1.4.3 (RTOS) *"); log_info("* * * * * * * By Helei * * * *"); /* EEPROM 中的 MQTT/版本配置 */ @@ -110,6 +110,8 @@ static void app_task(void *arg) /* 主循环状态变量 */ static uint8_t ota_confirmed = 0; + static uint8_t ota_simulate_fail = 0; /* =1测试:模拟 OTA 确认失败(验证回退) */ + static uint8_t ota_fail_logged = 0; static uint32_t ota_confirm_tick = 0; static uint32_t mqtt_ready_tick = 0; static uint8_t mqtt_ready_recorded = 0; @@ -135,9 +137,17 @@ static void app_task(void *arg) /* 首次发布成功后延迟 3s 再 OTA 确认 */ if (!ota_confirmed && g_net_mqtt_ready && g_net_first_publish_ok && (HAL_GetTick() - ota_confirm_tick) > 3000) { - ota_confirmed = 1; - NET_ota_confirm(); - log_info("> OTA confirmed (MQTT ready + first publish ok + 3s delay)"); + if (ota_simulate_fail) { + if (!ota_fail_logged) { + ota_fail_logged = 1; + log_info("> OTA confirm skipped (simulate fail for rollback test)"); + } + /* 不置位 ota_confirmed,让 1 分钟健康超时触发复位 */ + } else { + ota_confirmed = 1; + NET_ota_confirm(); + log_info("> OTA confirmed (MQTT ready + first publish ok + 3s delay)"); + } } /* MQTT 就绪后 1 分钟仍未首次 MPUB,主动复位 */ diff --git a/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c b/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c index 58709b2..e2e704f 100644 --- a/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c +++ b/V1.4/STM32F103_App1/HardWare/USER_CMD/user_cmd.c @@ -57,6 +57,8 @@ void process_usart1_command(void) if (cmd_is(cmd, "RESET")) { log_warn("> USART1 RESET command received, rebooting..."); + HAL_Delay(100); + NVIC_SystemReset(); } else if (cmd_is(cmd, "INFO")) { log_info("> BT INFO: ver=%u, server=%s:%d, client=%s", @@ -86,6 +88,8 @@ void process_usart1_command(void) } else if (cmd_is(cmd, "OTA")) { log_info("> BT OTA: reboot to bootloader for OTA check"); + HAL_Delay(100); + NVIC_SystemReset(); } else if (cmd_is(cmd, "RECOVERY")) { /* WiFi 模块 AT+RESTORE 恢复出厂(忘掉已保存的热点),用于测试 SmartConfig;