From 914abd85624af2be6092582eff90ac89fd2bd30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 30 Aug 2020 18:20:58 +0200 Subject: [PATCH 1/4] Issue #17: Add override function for button --- stm-firmware/button.c | 13 +++++++++++++ stm-firmware/include/reflow-controller/button.h | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/stm-firmware/button.c b/stm-firmware/button.c index ec6a3fb..30939ec 100644 --- a/stm-firmware/button.c +++ b/stm-firmware/button.c @@ -29,6 +29,7 @@ static volatile uint64_t IN_SECTION(.ccm.bss) to_active_timestamp; static volatile enum button_state IN_SECTION(.ccm.bss) int_state; +static volatile enum button_state IN_SECTION(.ccm.bss) override_state; void button_init() { @@ -40,6 +41,7 @@ void button_init() to_active_timestamp = 0ULL; int_state = BUTTON_IDLE; + override_state = BUTTON_IDLE; SYSCFG->EXTICR[1] |= 0x3; EXTI->IMR |= (1U<<4); @@ -53,6 +55,12 @@ enum button_state button_read_event() uint64_t time_delta; enum button_state temp_state; + if (override_state != BUTTON_IDLE) { + temp_state = override_state; + override_state = BUTTON_IDLE; + return temp_state; + } + if (BUTTON_PORT->IDR & (1U< Date: Sun, 30 Aug 2020 18:25:10 +0200 Subject: [PATCH 2/4] Issue #17: Add override function for deltas of rotary encoder --- .../include/reflow-controller/rotary-encoder.h | 2 ++ stm-firmware/rotary-encoder.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/stm-firmware/include/reflow-controller/rotary-encoder.h b/stm-firmware/include/reflow-controller/rotary-encoder.h index 706cb32..3b5721b 100644 --- a/stm-firmware/include/reflow-controller/rotary-encoder.h +++ b/stm-firmware/include/reflow-controller/rotary-encoder.h @@ -41,4 +41,6 @@ void rotary_encoder_stop(void); void rotary_encoder_zero(void); +void rotary_encoder_override_delta(int16_t delta); + #endif /* __ROTARY_ENCODER_H__ */ diff --git a/stm-firmware/rotary-encoder.c b/stm-firmware/rotary-encoder.c index d079b50..d4dc2b5 100644 --- a/stm-firmware/rotary-encoder.c +++ b/stm-firmware/rotary-encoder.c @@ -23,6 +23,8 @@ #include #include +static int16_t IN_SECTION(.ccm.bss) override_delta; + static inline void rotary_encoder_setup_pins(void) { rcc_manager_enable_clock(&RCC->AHB1ENR, BITMASK_TO_BITNO(ROTARY_ENCODER_RCC_MASK)); @@ -45,6 +47,8 @@ void rotary_encoder_setup(void) ROTARY_ENCODER_TIMER->CCER = TIM_CCER_CC1P | TIM_CCER_CC2P; ROTARY_ENCODER_TIMER->PSC = 0; ROTARY_ENCODER_TIMER->CR1 = TIM_CR1_CEN; + + override_delta = 0; } uint32_t rotary_encoder_get_abs_val(void) @@ -72,6 +76,9 @@ int32_t rotary_encoder_get_change_val(void) last_val = val; + diff += override_delta; + override_delta = 0; + return diff; } @@ -88,3 +95,8 @@ void rotary_encoder_zero(void) { ROTARY_ENCODER_TIMER->CNT = 0UL; } + +void rotary_encoder_override_delta(int16_t delta) +{ + override_delta = delta; +} From f32d1afde58a7a8d119d1d1d2517f1556cebe9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 30 Aug 2020 18:44:36 +0200 Subject: [PATCH 3/4] Issue #17: Add ui-emulate command to shell --- stm-firmware/shell.c | 75 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 12 deletions(-) diff --git a/stm-firmware/shell.c b/stm-firmware/shell.c index 01d9758..481ff28 100644 --- a/stm-firmware/shell.c +++ b/stm-firmware/shell.c @@ -37,6 +37,7 @@ #include #include #include +#include #ifndef GIT_VER #define GIT_VER "VERSION NOT SET" @@ -60,7 +61,7 @@ static shellmatta_retCode_t shell_cmd_ver(const shellmatta_handle_t handle, unique_id_get(&high_id, &mid_id, &low_id); shellmatta_printf(handle, "Reflow Oven Controller Firmware " xstr(GIT_VER) "\r\n" - "Compiled: " __DATE__ " at " __TIME__ "\r\n"); + "Compiled: " __DATE__ " at " __TIME__ "\r\n"); shellmatta_printf(handle, "Serial: %08X-%08X-%08X", high_id, mid_id, low_id); return SHELLMATTA_OK; @@ -180,10 +181,10 @@ static shellmatta_retCode_t shell_cmd_uptime(const shellmatta_handle_t handle, systick_get_uptime_from_tick(&days, &hours, &mins, &secs); shellmatta_printf(handle, "Uptime: %u day%s %02u:%02u:%02u", - days, (days == 1 ? "" : "s"), - hours, - mins, - secs); + days, (days == 1 ? "" : "s"), + hours, + mins, + secs); return SHELLMATTA_OK; } @@ -344,7 +345,7 @@ static shellmatta_retCode_t shell_cmd_cat(const shellmatta_handle_t handle, cons } static shellmatta_retCode_t shell_cmd_read_flags(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { (void)length; (void)arguments; @@ -357,7 +358,7 @@ static shellmatta_retCode_t shell_cmd_read_flags(const shellmatta_handle_t handl struct timing_monitor_info timing_info; shellmatta_printf(handle, "Error flags\r\n" - "-----------\r\n"); + "-----------\r\n"); count = safety_controller_get_flag_count(); for (i = 0; i < count; i++) { @@ -406,7 +407,7 @@ static shellmatta_retCode_t shell_cmd_read_flags(const shellmatta_handle_t handl } shellmatta_printf(handle, "\r\nTiming Monitors\r\n" - "--------------\r\n"); + "--------------\r\n"); count = safety_controller_get_timing_monitor_count(); @@ -425,7 +426,7 @@ static shellmatta_retCode_t shell_cmd_read_flags(const shellmatta_handle_t handl } static shellmatta_retCode_t shell_cmd_save_cal(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { (void)length; @@ -447,7 +448,7 @@ static shellmatta_retCode_t shell_cmd_save_cal(const shellmatta_handle_t handle, } static shellmatta_retCode_t shell_cmd_hang(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { (void)handle; (void)arguments; @@ -458,6 +459,48 @@ static shellmatta_retCode_t shell_cmd_hang(const shellmatta_handle_t handle, con return SHELLMATTA_OK; } +static shellmatta_retCode_t shell_cmd_ui_emulation(const shellmatta_handle_t handle, const char *arguments, + uint32_t length) +{ + (void)length; + (void)arguments; + uint32_t i; + uint32_t len; + char *buff; + + shellmatta_read(handle, &buff, &len); + + for (i = 0; i < len; i++) { + switch (buff[i]) { + case 'W': + case 'w': + rotary_encoder_override_delta(4); + break; + case 's': + case 'S': + rotary_encoder_override_delta(-4); + break; + case '\r': + button_override_event(BUTTON_SHORT_RELEASED); + break; + case 'l': + case 'L': + button_override_event(BUTTON_LONG); + break; + case 'k': + case 'K': + button_override_event(BUTTON_SHORT); + break; + case 'r': + case 'R': + button_override_event(BUTTON_LONG_RELEASED); + break; + } + } + + return SHELLMATTA_CONTINUE; +} + //typedef struct shellmatta_cmd //{ // char *cmd; /**< command name */ @@ -467,7 +510,7 @@ static shellmatta_retCode_t shell_cmd_hang(const shellmatta_handle_t handle, con // shellmatta_cmdFct_t cmdFct; /**< pointer to the cmd callack function */ // struct shellmatta_cmd *next; /**< pointer to next command or NULL */ //} shellmatta_cmd_t; -static shellmatta_cmd_t cmd[15] = { +static shellmatta_cmd_t cmd[16] = { { .cmd = "version", .cmdAlias = "ver", @@ -586,8 +629,16 @@ static shellmatta_cmd_t cmd[15] = { .helpText = "", .usageText = "", .cmdFct = shell_cmd_hang, + .next = &cmd[15], + }, + { + .cmd = "ui-emulate", + .cmdAlias = NULL, + .helpText = "", + .usageText = "", + .cmdFct = shell_cmd_ui_emulation, .next = NULL, - } + }, }; shellmatta_handle_t shell_init(shellmatta_write_t write_func) From 9024402a3b4cda0e7032a3ee53aa5060d95fcf8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 30 Aug 2020 19:03:17 +0200 Subject: [PATCH 4/4] Issue #17: Write documentation for emulation function --- doc/source/usage/command-line.rst | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/doc/source/usage/command-line.rst b/doc/source/usage/command-line.rst index e00c623..a7214f9 100644 --- a/doc/source/usage/command-line.rst +++ b/doc/source/usage/command-line.rst @@ -58,3 +58,31 @@ Calibration is most likely not necessary! See the :ref:`usage_calibration` page. The command will guide you through the calibration process and will ask for two reference resistors with ``1000 Ohm`` and ``2000 Ohm`` values. Calibration can be aborted using ``CTRL + C``. + + +.. _shell_command_hang: + +hang +~~~~ + +The ``hang`` command hangs the main-loop in an infinite loop. This function tests, whether the controller is correctly rescued by the watchdog. + + +.. _shell_command_ui_emulate: + +ui-emulate +~~~~~~~~~~ + +The ``ui-emulate`` command emulates the rotary encoder and button from the shell. The following keys are available: + +========== ================================ +Key Emulation +========== ================================ +``CTRL+C`` Exit the command +``ENTER`` Button press: short released +``s`` Rotary Encoder: anti-clockwise +``w`` Rotary Encoder: clockwise +``l`` Button press: long +``k`` Button press: short +``r`` Button press: long released +========== ================================