From 4f05c084d94c5a1be55655e1e16bef36c3dc6ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sat, 9 May 2020 20:40:31 +0200 Subject: [PATCH] Make ptdump command async: Main loop will continue if comamnd is called --- stm-firmware/main.c | 10 +++++--- stm-firmware/shell.c | 54 ++++++++++---------------------------------- 2 files changed, 19 insertions(+), 45 deletions(-) diff --git a/stm-firmware/main.c b/stm-firmware/main.c index 334308f..97b29ab 100644 --- a/stm-firmware/main.c +++ b/stm-firmware/main.c @@ -207,6 +207,8 @@ int main() while (1) { sd_card_mounted = mount_sd_card_if_avail(sd_card_mounted); + snprintf(&disp[0][0], 17, "SD %smounted", sd_card_mounted ? "" : "un"); + pt1000_value_status = adc_pt1000_get_current_resistance(&pt1000_value); if (systick_ticks_have_passed(pid_timestamp, 250)) { @@ -228,20 +230,22 @@ int main() loudspeaker_set(1); } else if (pid_controller_active) { /* In case temperature measuremnt is okay and controlelr is working, write output power */ - oven_driver_set_power(pid_controller_output < 0 ? 0U : pid_controller_output); + oven_driver_set_power(pid_controller_output < 0 ? 0U : (uint8_t)pid_controller_output); } button = button_read_event(); rot = rotary_encoder_get_abs_val(); /* TODO: handle gui */ + snprintf(&disp[1][0], 17, "Rotary: %u", (unsigned int)rot); + snprintf(&disp[2][0], 17, "Button: %s", (button == BUTTON_SHORT ? "SHORT" : (button == BUTTON_LONG ? "LONG" : ""))); /* Handle uart input for shell */ uart_receive_status = uart_receive_data_with_dma(&shell_uart, &uart_input, &uart_input_len); - if (uart_receive_status >= 1) + if (uart_receive_status >= 0) shell_handle_input(shell_handle, uart_input, uart_input_len); - if (systick_ticks_have_passed(display_timestamp, 1) || lcd_ret == LCD_FSM_CALL_AGAIN) { + if (systick_ticks_have_passed(display_timestamp, 2) || lcd_ret == LCD_FSM_CALL_AGAIN) { lcd_ret = lcd_fsm_write_buffer(disp); display_timestamp = systick_get_global_tick(); } diff --git a/stm-firmware/shell.c b/stm-firmware/shell.c index 62cd4a8..3054ad1 100644 --- a/stm-firmware/shell.c +++ b/stm-firmware/shell.c @@ -205,8 +205,8 @@ static shellmatta_retCode_t shell_cmd_cal(const shellmatta_handle_t handle, } static shellmatta_retCode_t shell_meminfo(const shellmatta_handle_t handle, - const char *arguments, - uint32_t length) + const char *arguments, + uint32_t length) { (void)arguments; (void)length; @@ -251,50 +251,20 @@ static shellmatta_retCode_t shell_cmd_rot(const shellmatta_handle_t handle, static shellmatta_retCode_t shell_cmd_pt1000_res_loop(const shellmatta_handle_t handle, const char *arguments, uint32_t length) { - char arg[20]; - size_t arg_len; - int led_status = 0; - bool run_loop = true; - bool single_line = false; - const char *data; - size_t len; - unsigned int i; + (void)arguments; + (void)length; + static uint64_t timestamp = 0ULL; - arg_len = (sizeof(arg) < length ? sizeof(arg) : length); - strncpy(arg, arguments, arg_len); - if (strstr(arg, "--single-line")) - single_line = true; - - shellmatta_printf(handle, "\r\n"); - - while (run_loop) { - uart_receive_data_with_dma(&shell_uart, &data , &len); - for (i = 0; i < len; i++) { - if (data[i] == '\x03') - run_loop = false; - } - if (single_line) - shellmatta_printf(handle, "\x1b[1A\x1b[150D\x1b[K"); + if (systick_ticks_have_passed(timestamp, 150)) { shell_cmd_pt1000_res(handle, "", 0UL); - - led_set(1, led_status); - if (adc_pt1000_check_error() & ADC_PT1000_WATCHDOG_ERROR) { - led_set(0, 1); - } - - led_status ^= 0x1; - - systick_wait_ms(150); + timestamp = systick_get_global_tick(); } - led_set(0, 0); - led_set(1, 0); - - return SHELLMATTA_OK; + return SHELLMATTA_CONTINUE; } static shellmatta_retCode_t shell_cmd_ls(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { (void)length; (void)arguments; @@ -320,7 +290,7 @@ static shellmatta_retCode_t shell_cmd_ls(const shellmatta_handle_t handle, const } static shellmatta_retCode_t shell_cmd_reset(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { (void)handle; (void)length; @@ -332,7 +302,7 @@ static shellmatta_retCode_t shell_cmd_reset(const shellmatta_handle_t handle, co } static shellmatta_retCode_t shell_cmd_cat(const shellmatta_handle_t handle, const char *arguments, - uint32_t length) + uint32_t length) { FIL file; char path_buff[256]; @@ -404,7 +374,7 @@ static shellmatta_cmd_t cmd[13] = { .cmd = "pt1000-dump", .cmdAlias = "ptdump", .helpText = "Get current filtered and calibrated PT1000 resistance in a loop", - .usageText = "pt1000-dump [--single-line]", + .usageText = "pt1000-dump", .cmdFct = shell_cmd_pt1000_res_loop, .next = &cmd[3], },