Browse Source

调整广播时间,优化复位逻辑

v5
zhaohe 1 year ago
parent
commit
d2152f2dfa
  1. 1
      README.md
  2. 6
      usrc/service/extern_if_service.c
  3. 2
      usrc/service/global_flag.c
  4. 13
      usrc/service/global_flag.h
  5. 10
      usrc/service/reg_manager.c
  6. 3
      usrc/service/report_generator_service.c

1
README.md

@ -14,6 +14,7 @@ V3
5.dhcp失败自动触发LLA,生成随机本地IP
V3.1
1.电源部分的指示灯显示IP获取状态
2.调整广播时间,优化复位逻辑
```

6
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];

2
usrc/service/global_flag.c

@ -0,0 +1,2 @@
#include "global_flag.h"
bool g_try_reboot_flag = false;

13
usrc/service/global_flag.h

@ -0,0 +1,13 @@
#pragma once
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
extern bool g_try_reboot_flag;
#ifdef __cplusplus
}
#endif

10
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 *
*******************************************************************************/

3
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();
}

Loading…
Cancel
Save