diff --git a/ubitx_iop/menu.h b/ubitx_iop/menu.h index 16cb01d..1109d63 100644 --- a/ubitx_iop/menu.h +++ b/ubitx_iop/menu.h @@ -188,23 +188,23 @@ class Config_parm : public Menu_item { Update_func on_update; }; -class Parm_int : public Config_parm { +class Parm_uint8 : public Config_parm { public: - Parm_int(const char* title, int parm, int min, int max, int step, Update_func f): - Config_parm(title, parm, min, max, step, f) {} + Parm_uint8(const char* title, uint8_t& parm, uint8_t min, uint8_t max, uint8_t step, Update_func f): + Config_parm(title, parm, min, max, step, f) {} virtual void get_text(Menu_string& outstr) const { - snprintf(outstr.data(), max_text_len+1, "%-*s %3d", max_text_len-4, title().data(), value()); + snprintf(outstr.data(), max_text_len+1, "%-*.*s %3d", max_text_len-4, max_text_len-4, title().data(), value()); } }; class Parm_float : public Config_parm { public: - Parm_float(const char* title, float parm, float min, float max, float step, Update_func f): - Config_parm(title, parm, min, max, step, f) {} + Parm_float(const char* title, float& parm, float min, float max, float step, Update_func f): + Config_parm(title, parm, min, max, step, f) {} virtual void get_text(Menu_string& outstr) const { - snprintf(outstr.data(), max_text_len+1, "%-*s %5.2f", max_text_len-6, title().data(), value()); + snprintf(outstr.data(), max_text_len+1, "%-*.*s %5.2f", max_text_len-6, max_text_len-6, title().data(), value()); } }; @@ -357,6 +357,9 @@ public class CWMenu { private: }; */ + +extern const Menu_item* audio_config_menu; + #endif //====================================================================== diff --git a/ubitx_iop/menu.ino b/ubitx_iop/menu.ino index 07d9d13..456d1aa 100644 --- a/ubitx_iop/menu.ino +++ b/ubitx_iop/menu.ino @@ -9,9 +9,9 @@ void do_nothing_func() {} Update_func do_nothing = Update_func::create(); -List_menu<7> audio_config_menu("Audio Config", { - new Parm_int ("RX ADC Lvl", rigConfig.audio.rxRigInLevel, 0, 15, 1, do_nothing), - new Parm_int ("RX DAC Lvl", rigConfig.audio.rxLineOutLevel, 13, 31, 1, do_nothing), +List_menu<7> audio_config_menu_("Audio Config", { + new Parm_uint8 ("RX ADC Lvl", rigConfig.audio.rxRigInLevel, 0, 15, 1, do_nothing), + new Parm_uint8 ("RX DAC Lvl", rigConfig.audio.rxLineOutLevel, 13, 31, 1, do_nothing), new Parm_float ("RX Inp Lvl", rigConfig.audio.rxRigInVol, 0.0, 1.0, 0.1, do_nothing), new Parm_float ("RX Inp Cal", rigConfig.audio.rxRigInCal, 0.0, 99.9, 0.1, do_nothing), new Parm_float ("RX Spkr Cal", rigConfig.audio.rxSpkrOutCal, 0.0, 99.9, 0.1, do_nothing), @@ -19,6 +19,8 @@ List_menu<7> audio_config_menu("Audio Config", { new Parm_float ("RX USB Cal", rigConfig.audio.rxUSBOutCal, 0.0, 99.9, 0.1, do_nothing), }); +const Menu_item* audio_config_menu = &audio_config_menu_; + /* commented out til I go back and fix SSBConfig class List_menu<3> ssb_config_menu("SSB Config", { Parm_float("Comp Thresh", rigConfig.lsb.comp_threshold, 0.0, 1.0, 0.1, do_nothing), diff --git a/ubitx_iop/ubitx_iop.ino b/ubitx_iop/ubitx_iop.ino index b4b2446..325b449 100644 --- a/ubitx_iop/ubitx_iop.ino +++ b/ubitx_iop/ubitx_iop.ino @@ -190,30 +190,33 @@ void loop() // cancel out any knob rotation that occurred during in conjunction with press/release knob.write(0); - } else if (btn.rose() && menu_is_active) { - menu_updated = true; + } else if (btn.rose()) { + menu_updated = true; if (btnMillis > 1000) { // long press - exit menu_item = menu_item->exit(); USBDEBUG("button released - long (exit)"); } else if (btnMillis > 500) { // medium press - altSelect - menu_item = menu_item->altSelect(); + if (menu_is_active) { + menu_item = menu_item->altSelect(); + } else { + menu_item = audio_config_menu; + menu_is_active = true; + } USBDEBUG("button released - medium (altSelect)"); } else { // short press - select - menu_item = menu_item->select(); + if (menu_is_active) { + menu_item = menu_item->select(); + } else { + menu_item = &main_menu; + menu_is_active = true; + } USBDEBUG("button released - short (select)"); } // cancel out any knob rotation that occurred during in conjunction with press/release knob.write(0); - - } else if (btn.rose() && !menu_is_active) { - menu_is_active = true; - menu_updated = true; - // cancel out any knob rotation that occurred during in conjunction with press/release - knob.write(0); - USBDEBUG("button released - main menu activated"); } else if (knobPos > 3 && menu_is_active) { // left