From 7b76aefd5ee488400bf34f30e845792f2d9ec9c3 Mon Sep 17 00:00:00 2001 From: Augusto Zanellato Date: Fri, 18 Aug 2023 22:35:39 +0200 Subject: [PATCH] ACK command and use delayed reset --- firmware/application/Makefile | 1 + firmware/application/src/app_cmd.c | 13 +++------- .../application/src/utils/delayed_reset.c | 26 +++++++++++++++++++ .../application/src/utils/delayed_reset.h | 3 +++ software/script/chameleon_cli_unit.py | 12 ++++----- 5 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 firmware/application/src/utils/delayed_reset.c create mode 100644 firmware/application/src/utils/delayed_reset.h diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 05a1d4a..cbabcbc 100644 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -30,6 +30,7 @@ SRC_FILES += \ $(PROJ_DIR)/rfid/nfctag/hf/nfc_ntag.c \ $(PROJ_DIR)/rfid/nfctag/lf/lf_tag_em.c \ $(PROJ_DIR)/utils/dataframe.c \ + $(PROJ_DIR)/utils/delayed_reset.c \ $(PROJ_DIR)/utils/fds_util.c \ $(PROJ_DIR)/utils/syssleep.c \ $(PROJ_DIR)/utils/timeslot.c \ diff --git a/firmware/application/src/app_cmd.c b/firmware/application/src/app_cmd.c index 8dba70e..d9df5f7 100644 --- a/firmware/application/src/app_cmd.c +++ b/firmware/application/src/app_cmd.c @@ -13,6 +13,7 @@ #include "tag_persistence.h" #include "nrf_pwr_mgmt.h" #include "settings.h" +#include "delayed_reset.h" #define NRF_LOG_MODULE_NAME app_cmd @@ -359,15 +360,9 @@ data_frame_tx_t* cmd_processor_get_slot_info(uint16_t cmd, uint16_t status, uint data_frame_tx_t* cmd_processor_wipe_fds(uint16_t cmd, uint16_t status, uint16_t length, uint8_t *data) { bool success = fds_wipe(); - if (!success) { - return data_frame_make(cmd, STATUS_FLASH_WRITE_FAIL, 0, NULL); - } - while (NRF_LOG_PROCESS()); - ret_code_t ret = sd_nvic_SystemReset(); - APP_ERROR_CHECK(ret); - while (1) { - __NOP(); - } + status = success ? STATUS_DEVICE_SUCCESS : STATUS_FLASH_WRITE_FAIL; + delayed_reset(50); + return data_frame_make(cmd, status, 0, NULL); } data_frame_tx_t* cmd_processor_set_em410x_emu_id(uint16_t cmd, uint16_t status, uint16_t length, uint8_t *data) { diff --git a/firmware/application/src/utils/delayed_reset.c b/firmware/application/src/utils/delayed_reset.c new file mode 100644 index 0000000..1dc4c89 --- /dev/null +++ b/firmware/application/src/utils/delayed_reset.c @@ -0,0 +1,26 @@ +#include "app_timer.h" +#include "delayed_reset.h" + +#include "nrf_log.h" +#include "nrf_log_ctrl.h" +#include "nrf_log_default_backends.h" + +APP_TIMER_DEF(m_reset_timer); + +static void delayed_reset_event_handler(void* ctx) { + while (NRF_LOG_PROCESS()); + ret_code_t ret = sd_nvic_SystemReset(); + APP_ERROR_CHECK(ret); + while (1) { + __NOP(); + } +} + +void delayed_reset(uint32_t delay) { + NRF_LOG_INFO("Resetting in %d ms...", delay); + ret_code_t ret; + ret = app_timer_create(&m_reset_timer, APP_TIMER_MODE_SINGLE_SHOT, delayed_reset_event_handler); + APP_ERROR_CHECK(ret); + ret = app_timer_start(m_reset_timer, APP_TIMER_TICKS(delay), NULL); + APP_ERROR_CHECK(ret); +} diff --git a/firmware/application/src/utils/delayed_reset.h b/firmware/application/src/utils/delayed_reset.h new file mode 100644 index 0000000..6be37ad --- /dev/null +++ b/firmware/application/src/utils/delayed_reset.h @@ -0,0 +1,3 @@ +#pragma once + +void delayed_reset(uint32_t delay); \ No newline at end of file diff --git a/software/script/chameleon_cli_unit.py b/software/script/chameleon_cli_unit.py index 7bd0fa7..d4cc599 100644 --- a/software/script/chameleon_cli_unit.py +++ b/software/script/chameleon_cli_unit.py @@ -1084,11 +1084,9 @@ class HWFactoryReset(DeviceRequiredUnit): if not args.i_know_what_im_doing: print("This time your data's safe. Read the command documentation next time.") return - try: - resp = self.cmd_positive.factory_reset() - if resp.status != chameleon_status.Device.STATUS_DEVICE_SUCCESS: - print(" - Reset failed!") - return - except KeyError: - print(" - A Serial Error above is normal, please ignore it") + resp = self.cmd_positive.factory_reset() + if resp.status == chameleon_status.Device.STATUS_DEVICE_SUCCESS: print(" - Reset successful! Please reconnect.") + print(" - A Serial Error below is normal, please ignore it") + else: + print(" - Reset failed!")