From d2152f2dfaea87f6088547f32b16182a54ea5e4f Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 26 Mar 2024 15:56:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B9=BF=E6=92=AD=E6=97=B6?= =?UTF-8?q?=E9=97=B4=EF=BC=8C=E4=BC=98=E5=8C=96=E5=A4=8D=E4=BD=8D=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + usrc/service/extern_if_service.c | 6 ++++++ usrc/service/global_flag.c | 2 ++ usrc/service/global_flag.h | 13 +++++++++++++ usrc/service/reg_manager.c | 10 +++++----- usrc/service/report_generator_service.c | 3 ++- 6 files changed, 29 insertions(+), 6 deletions(-) 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(); }