diff --git a/README.md b/README.md index 931e0b3..8d160fe 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ V3 5.dhcp失败自动触发LLA,生成随机本地IP V3.1 1.电源部分的指示灯显示IP获取状态 + 2.调整广播时间,优化复位逻辑 ``` diff --git a/usrc/service/extern_if_service.c b/usrc/service/extern_if_service.c index f353253..58e6fc5 100644 --- a/usrc/service/extern_if_service.c +++ b/usrc/service/extern_if_service.c @@ -2,6 +2,7 @@ #include "project_configs.h" #include "project_dep.h" // +#include "global_flag.h" #include "iflytop_xsync\xs_udp.h" #include "reg_manager.h" #define TAG "extern_if_service" @@ -106,6 +107,11 @@ static void udp_on_packet(udp_t *server, struct sockaddr_in *client, uint8_t *da receipt[1] = reg_manager_write_reg(regadd, regval); create_and_send_receipt(&cx, receipt, 2); + if (g_try_reboot_flag) { + osDelay(100); + HAL_NVIC_SystemReset(); + } + } else if (rxpacket->cmd == kxsync_packet_type_reg_read_regs) { uint32_t start_regadd = rxpacket->data[0]; uint32_t nreg = rxpacket->data[1]; diff --git a/usrc/service/global_flag.c b/usrc/service/global_flag.c index e69de29..73a8eb2 100644 --- a/usrc/service/global_flag.c +++ b/usrc/service/global_flag.c @@ -0,0 +1,2 @@ +#include "global_flag.h" +bool g_try_reboot_flag = false; \ No newline at end of file diff --git a/usrc/service/global_flag.h b/usrc/service/global_flag.h index e69de29..7f70491 100644 --- a/usrc/service/global_flag.h +++ b/usrc/service/global_flag.h @@ -0,0 +1,13 @@ +#pragma once +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern bool g_try_reboot_flag; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/usrc/service/reg_manager.c b/usrc/service/reg_manager.c index ba4f5a1..dea0699 100644 --- a/usrc/service/reg_manager.c +++ b/usrc/service/reg_manager.c @@ -4,7 +4,7 @@ #include "base_service/fpga_if.h" #include "iflytop_xsync_protocol/iflytop_xsync_protocol.h" #include "service/report_generator_service.h" - +#include "global_flag.h" uint32_t m_action_val0; uint32_t m_action_receipt; @@ -22,7 +22,7 @@ static uint32_t doaction(uint32_t action, uint32_t val) { config_factory_reset(); return 0; } else if (action == xsync_stm32_action_reboot) { - NVIC_SystemReset(); + g_try_reboot_flag = true; return 0; } else if (action == xsync_stm32_action_storage_cfg) { config_flush(); @@ -32,7 +32,7 @@ static uint32_t doaction(uint32_t action, uint32_t val) { } uint32_t reg_manager_read_reg(uint32_t addr) { - uint32_t readbak = 0; + uint32_t readbak = 0; if (addr == kxsync_reg_software_version) { // read only readbak = PC_VERSION; } else if (addr == kxsync_reg_manufacturer0) { // read only @@ -65,7 +65,7 @@ uint32_t reg_manager_read_reg(uint32_t addr) { readbak = config_get()->netmask; } else if (addr == kxsync_reg_stm32_config0) { readbak = config_get()->config0; - } + } /******************************************************************************* * ACTION * @@ -116,7 +116,7 @@ uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value) { readbak = config_get()->netmask; } else if (addr == kxsync_reg_stm32_config0) { readbak = config_get()->config0; - } + } /******************************************************************************* * ACTION * *******************************************************************************/ diff --git a/usrc/service/report_generator_service.c b/usrc/service/report_generator_service.c index 8c1a0a4..32c8790 100644 --- a/usrc/service/report_generator_service.c +++ b/usrc/service/report_generator_service.c @@ -5,6 +5,7 @@ #include "base_service/fpga_if.h" #include "base_service/task_level_config.h" #include "base_service/xsync_regs.hpp" +#include "global_flag.h" #include "iflytop_xsync\xs_udp.h" #include "reg_manager.h" @@ -123,7 +124,7 @@ static uint32_t dtimes(timecode_parse_result_t *a, timecode_parse_result_t *b, b static uint32_t last_report_packet_time; static void try_report_device_info_packet() { - if (xs_has_passedms(last_report_packet_time) >= 3000) { + if (xs_has_passedms(last_report_packet_time) >= 300) { last_report_packet_time = xs_get_ticket(); create_and_send_device_online_packet(); }