From 0cac7612db26d8d2c027b86907a0a03d1a3db651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Wed, 22 Feb 2023 18:06:02 +0000 Subject: [PATCH] optimisation: Always make sound when knob is clicked or rotated This commit adds the ability for firmware to make sounds when the knob is clicked or rotated, when LCD updates are disabled. The improvement here is the sound is being made with one line of code whether or not LCD updates are enabled or disabled. Change in memory: Flash: -24 bytes SRAM: 0 bytes --- Firmware/lcd.cpp | 6 ++++++ Firmware/mmu2_reporting.cpp | 4 +--- Firmware/ultralcd.cpp | 18 +++--------------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/Firmware/lcd.cpp b/Firmware/lcd.cpp index 5c0159050..6c458d1ae 100644 --- a/Firmware/lcd.cpp +++ b/Firmware/lcd.cpp @@ -701,6 +701,12 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) if (lcd_backlight_wake_trigger) { lcd_backlight_wake_trigger = false; backlight_wake(); + if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) { + // TODO: update lcd_encoder here + Sound_MakeSound(e_SOUND_TYPE_EncoderMove); + } else { + Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); + } } backlight_update(); diff --git a/Firmware/mmu2_reporting.cpp b/Firmware/mmu2_reporting.cpp index 87615b56e..0ae183b22 100644 --- a/Firmware/mmu2_reporting.cpp +++ b/Firmware/mmu2_reporting.cpp @@ -179,14 +179,12 @@ static uint8_t ReportErrorHookMonitor(uint8_t ei) { // More button for two button screen lcd_putc_at(18, 3, current_selection == LCD_MIDDLE_BUTTON_CHOICE ? '>': ' '); } - // Consume rotation event and make feedback sound + // Consume rotation event enc_dif = lcd_encoder_diff; - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); } // Check if knob was clicked and consume the event if (lcd_clicked()) { - Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); choice_selected = current_selection; } else { // continue monitoring diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d098e614d..d568b785d 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2230,8 +2230,7 @@ uint8_t lcd_alright() { lcd_consume_click(); while (1) { - manage_heater(); - manage_inactivity(true); + delay_keep_alive(0); if (abs(enc_dif - lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP) { @@ -2257,13 +2256,11 @@ uint8_t lcd_alright() { // Consume rotation event and make feedback sound enc_dif = lcd_encoder_diff; - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); _delay(100); } if (lcd_clicked()) { - Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); lcd_clear(); lcd_return_to_status(); return cursor_pos; @@ -3132,14 +3129,12 @@ uint8_t lcd_show_multiscreen_message_with_choices_and_wait_P( } lcd_show_choices_prompt_P(current_selection, first_choice, second_choice, second_col, third_choice); enc_dif = lcd_encoder_diff; - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); } else { Sound_MakeSound(e_SOUND_TYPE_BlindAlert); break; // turning knob skips waiting loop } } if (lcd_clicked()) { - Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); if (msg_next == NULL) { goto exit; } else @@ -4736,8 +4731,7 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite KEEPALIVE_STATE(PAUSED_FOR_USER); while (1) { - manage_heater(); - manage_inactivity(true); + delay_keep_alive(0); if (abs((enc_dif - lcd_encoder_diff)) > 4) { @@ -4751,7 +4745,6 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite cursor_pos++; } enc_dif = lcd_encoder_diff; - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); } if (cursor_pos > 3) @@ -4802,7 +4795,6 @@ uint8_t choose_menu_P(const char *header, const char *item, const char *last_ite if (lcd_clicked()) { - Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); KEEPALIVE_STATE(IN_HANDLER); lcd_encoder_diff = 0; return(cursor_pos + first - 1); @@ -4834,8 +4826,7 @@ char reset_menu() { lcd_puts_at_P(1, i, item[first + i]); } - manage_heater(); - manage_inactivity(true); + delay_keep_alive(0); if (abs((enc_dif - lcd_encoder_diff)) > 4) { @@ -4868,7 +4859,6 @@ char reset_menu() { lcd_puts_at_P(0, 0, PSTR(" \n \n \n ")); lcd_set_cursor(0, cursor_pos); lcd_putc('>'); - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); enc_dif = lcd_encoder_diff; _delay(100); } @@ -4876,7 +4866,6 @@ char reset_menu() { } if (lcd_clicked()) { - Sound_MakeSound(e_SOUND_TYPE_ButtonEcho); return(cursor_pos + first); } @@ -7499,7 +7488,6 @@ void menu_lcd_lcdupdate_func(void) if (lcd_draw_update == 0) lcd_draw_update = 1; lcd_encoder += lcd_encoder_diff / ENCODER_PULSES_PER_STEP; - Sound_MakeSound(e_SOUND_TYPE_EncoderMove); lcd_encoder_diff = 0; lcd_timeoutToStatus.start(); }