From 5ad21550c7ab39a898678d6fd28e03caa9c6bd55 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Wed, 11 May 2022 18:22:14 +0200 Subject: [PATCH] Jump to PLA temps in LCD settings when starting from zero Allow the LCD menu update function to preset an initial value during the first encoder increase from the minimal (usually zero) value. This is useful to jump to a more sensible initial value when turning on an heater which is currently disabled. The user is still allowed to decrease the value after the jump, so there's no functional restriction. --- Firmware/menu.cpp | 17 ++++++++++++++--- Firmware/menu.h | 7 ++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index 67a9ee9dc..bde394932 100755 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -467,6 +467,16 @@ static void _menu_edit_P(void) menu_data_edit_t* _md = (menu_data_edit_t*)&(menu_data[0]); if (lcd_draw_update) { + // handle initial value jumping + if (_md->minJumpValue && lcd_encoder) { + if (lcd_encoder > 0 && _md->currentValue == _md->minEditValue) { + _md->currentValue = _md->minJumpValue; + lcd_encoder = 0; + } + // disable after first use and/or if the initial value is not minEditValue + _md->minJumpValue = 0; + } + _md->currentValue += lcd_encoder; lcd_encoder = 0; // Consume knob rotation event @@ -483,7 +493,7 @@ static void _menu_edit_P(void) } template -void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val) +void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val, int16_t jmp_val) { menu_data_edit_t* _md = (menu_data_edit_t*)&(menu_data[0]); if (menu_item == menu_line) @@ -501,6 +511,7 @@ void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val) _md->currentValue = *pval; _md->minEditValue = min_val; _md->maxEditValue = max_val; + _md->minJumpValue = jmp_val; menu_item_ret(); return; } @@ -508,8 +519,8 @@ void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val) menu_item++; } -template void menu_item_edit_P(const char* str, int16_t *pval, int16_t min_val, int16_t max_val); -template void menu_item_edit_P(const char* str, uint8_t *pval, int16_t min_val, int16_t max_val); +template void menu_item_edit_P(const char* str, int16_t *pval, int16_t min_val, int16_t max_val, int16_t jmp_val); +template void menu_item_edit_P(const char* str, uint8_t *pval, int16_t min_val, int16_t max_val, int16_t jmp_val); static uint8_t progressbar_block_count = 0; static uint16_t progressbar_total = 0; diff --git a/Firmware/menu.h b/Firmware/menu.h index f3425b81f..9f764fae4 100755 --- a/Firmware/menu.h +++ b/Firmware/menu.h @@ -24,6 +24,7 @@ typedef struct int16_t currentValue; int16_t minEditValue; int16_t maxEditValue; + int16_t minJumpValue; } menu_data_edit_t; extern uint8_t menu_data[MENU_DATA_SIZE]; @@ -144,10 +145,10 @@ struct SheetFormatBuffer extern void menu_format_sheet_E(const Sheet &sheet_E, SheetFormatBuffer &buffer); -#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { menu_item_edit_P(str, pval, minval, maxval); } while (0) -//#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) MENU_ITEM_EDIT(int3, str, pval, minval, maxval) +#define MENU_ITEM_EDIT_int3_P(str, pval, minval, maxval) do { menu_item_edit_P(str, pval, minval, maxval, 0); } while (0) +#define MENU_ITEM_EDIT_int3_jmp_P(str, pval, minval, maxval, jmpval) do { menu_item_edit_P(str, pval, minval, maxval, jmpval); } while (0) template -extern void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val); +extern void menu_item_edit_P(const char* str, T pval, int16_t min_val, int16_t max_val, int16_t jmp_val); extern void menu_progressbar_init(uint16_t total, const char* title); extern void menu_progressbar_update(uint16_t newVal);