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.
This commit is contained in:
Yuri D'Elia 2022-05-11 18:22:14 +02:00
parent 1030a3ab1d
commit 5ad21550c7
2 changed files with 18 additions and 6 deletions

View File

@ -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 <typename T>
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<int16_t*>(const char* str, int16_t *pval, int16_t min_val, int16_t max_val);
template void menu_item_edit_P<uint8_t*>(const char* str, uint8_t *pval, int16_t min_val, int16_t max_val);
template void menu_item_edit_P<int16_t*>(const char* str, int16_t *pval, int16_t min_val, int16_t max_val, int16_t jmp_val);
template void menu_item_edit_P<uint8_t*>(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;

View File

@ -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 <typename T>
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);