From ca4ffaf9c7c722ab3001666ed476511353fd51d4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 6 Mar 2019 11:25:12 +0100 Subject: [PATCH] First step for a new MODULES / RX VERSION screen --- radio/src/gui/128x64/radio_version.cpp | 76 ++++++++++++++++++-------- radio/src/opentx.h | 7 +++ radio/src/pulses/pulses.h | 3 +- radio/src/pulses/pxx2.cpp | 22 +++++++- radio/src/pulses/pxx2.h | 3 + radio/src/translations/en.h.txt | 9 --- 6 files changed, 87 insertions(+), 33 deletions(-) diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 66c27cbef..9a2fc4b3e 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -20,6 +20,32 @@ #include "opentx.h" +#if defined(PXX2) +void menuRadioModulesVersion(event_t event) +{ + if (event == EVT_ENTRY) { + moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_GET_HARDWARE_INFO; + reusableBuffer.hardware.modules[INTERNAL_MODULE].step = -1; + reusableBuffer.hardware.modules[INTERNAL_MODULE].timeout = 0; + } + + SIMPLE_SUBMENU("MODULES / RX VERSION", 0); +} +#endif + +enum MenuRadioVersionItems +{ + ITEM_RADIO_VERSION_FIRST = HEADER_LINE - 1, +#if defined(PXX2) + ITEM_RADIO_MODULES_VERSION, +#endif +#if defined(EEPROM_RLC) + ITEM_RADIO_BACKUP_EEPROM, + ITEM_RADIO_FACTORY_RESET, +#endif + ITEM_RADIO_VERSION_COUNT +}; + void menuRadioVersion(event_t event) { #if defined(EEPROM_RLC) @@ -31,40 +57,46 @@ void menuRadioVersion(event_t event) } #endif - SIMPLE_MENU(STR_MENUVERSION, menuTabGeneral, MENU_RADIO_VERSION, 1); + SIMPLE_MENU(STR_MENUVERSION, menuTabGeneral, MENU_RADIO_VERSION, ITEM_RADIO_VERSION_COUNT); - lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+FH, vers_stamp); + coord_t y = MENU_HEADER_HEIGHT + 1; + lcdDrawTextAlignedLeft(y, vers_stamp); + y += 4*FH; + // TODO this was good on AVR radios, but horrible now ... #if defined(COPROCESSOR) if (Coproc_valid == 1) { - lcdDrawTextAlignedLeft(6*FH, "CoPr:"); - lcdDraw8bitsNumber(10*FW, 6*FH, Coproc_read); + lcdDrawTextAlignedLeft(y, "CoPr:"); + lcdDraw8bitsNumber(10*FW, y, Coproc_read); } else { - lcdDrawTextAlignedLeft(6*FH, "CoPr: ---"); + lcdDrawTextAlignedLeft(y, "CoPr: ---"); } -#elif defined(EEPROM_RLC) - lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+5*FH+1, STR_EEBACKUP); - lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH+1, STR_FACTORYRESET); - lcdDrawFilledRect(0, MENU_HEADER_HEIGHT+5*FH, LCD_W, 2*FH+1, SOLID); + y += FH; +#endif -#if defined(PCBXLITE) - if (event == EVT_KEY_LONG(KEY_ENTER)) { - killEvents(KEY_ENTER); - if (IS_SHIFT_PRESSED()) { - POPUP_CONFIRMATION(STR_CONFIRMRESET); - } - else { - eepromBackup(); - } +#if defined(PXX2) + lcdDrawText(0, y, BUTTON("Modules / RX version"), menuVerticalPosition == ITEM_RADIO_MODULES_VERSION ? INVERS : 0); + y += FH; + if (menuVerticalPosition == ITEM_RADIO_MODULES_VERSION && event == EVT_KEY_BREAK(KEY_ENTER)) { + s_editMode = EDIT_SELECT_FIELD; + pushMenu(menuRadioModulesVersion); } -#else - if (event == EVT_KEY_LONG(KEY_ENTER)) { +#endif + +#if defined(EEPROM_RLC) + lcdDrawText(0, y, BUTTON(TR_EEBACKUP), menuVerticalPosition == ITEM_RADIO_BACKUP_EEPROM ? INVERS : 0); + y += FH; + if (menuVerticalPosition == ITEM_RADIO_BACKUP_EEPROM && event == EVT_KEY_BREAK(KEY_ENTER)) { + s_editMode = EDIT_SELECT_FIELD; eepromBackup(); } - else if (event == EVT_KEY_LONG(KEY_MENU)) { + + lcdDrawText(0, y, BUTTON(TR_FACTORYRESET), menuVerticalPosition == ITEM_RADIO_FACTORY_RESET ? INVERS : 0); + // y += FH; + if (menuVerticalPosition == ITEM_RADIO_FACTORY_RESET && event == EVT_KEY_BREAK(KEY_ENTER)) { + s_editMode = EDIT_SELECT_FIELD; POPUP_CONFIRMATION(STR_CONFIRMRESET); } #endif -#endif } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 0cb5d3bdf..e7a2f3cbf 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1168,6 +1168,13 @@ union ReusableBuffer } sdmanager; #endif + struct { + struct { + int8_t step; + uint8_t timeout; + } modules[NUM_MODULES]; + } hardware; + struct { uint8_t stickMode; } generalSettings; diff --git a/radio/src/pulses/pulses.h b/radio/src/pulses/pulses.h index 49b73c397..1a12dd49f 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -76,7 +76,8 @@ enum ModuleSettingsMode MODULE_MODE_BIND, MODULE_MODE_REGISTER, MODULE_MODE_SPECTRUM_ANALYSER, - MODULE_MODE_SHARE + MODULE_MODE_SHARE, + MODULE_MODE_GET_HARDWARE_INFO }; PACK(struct ModuleSettings { diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index ad4e2cde5..e9756fe85 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -104,6 +104,24 @@ void Pxx2Pulses::setupChannelsFrame(uint8_t module) } } +void Pxx2Pulses::setupHardwareInfoFrame(uint8_t module) +{ + if (reusableBuffer.hardware.modules[module].step >= -1 && reusableBuffer.hardware.modules[module].step < PXX2_MAX_RECEIVERS_PER_MODULE) { + if (reusableBuffer.hardware.modules[module].timeout == 0) { + addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_HW_INFO); + Pxx2Transport::addByte(reusableBuffer.hardware.modules[module].step); + reusableBuffer.hardware.modules[module].timeout = 20; + reusableBuffer.hardware.modules[module].step++; + } + else { + reusableBuffer.hardware.modules[module].timeout--; + } + } + else { + moduleSettings[module].mode = MODULE_MODE_NORMAL; + } +} + void Pxx2Pulses::setupRegisterFrame(uint8_t module) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_REGISTER); @@ -194,7 +212,9 @@ void Pxx2Pulses::setupFrame(uint8_t module) uint8_t mode = moduleSettings[module].mode; - if (mode == MODULE_MODE_REGISTER) + if (mode == MODULE_MODE_GET_HARDWARE_INFO) + setupHardwareInfoFrame(module); + else if (mode == MODULE_MODE_REGISTER) setupRegisterFrame(module); else if (mode == MODULE_MODE_BIND) setupBindFrame(module); diff --git a/radio/src/pulses/pxx2.h b/radio/src/pulses/pxx2.h index 117dddbfe..6181c5fe6 100644 --- a/radio/src/pulses/pxx2.h +++ b/radio/src/pulses/pxx2.h @@ -30,6 +30,7 @@ #define PXX2_TYPE_ID_BIND 0x02 #define PXX2_TYPE_ID_CHANNELS 0x03 #define PXX2_TYPE_ID_RX_SETUP 0x05 + #define PXX2_TYPE_ID_HW_INFO 0x06 #define PXX2_TYPE_ID_TELEMETRY 0xFE #define PXX2_TYPE_C_POWER_METER 0x02 @@ -103,6 +104,8 @@ class Pxx2Pulses: public PxxPulses { void setupFrame(uint8_t module); protected: + void setupHardwareInfoFrame(uint8_t module); + void setupRegisterFrame(uint8_t module); void setupBindFrame(uint8_t module); diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 2a2ed3347..f05f34401 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -1027,20 +1027,11 @@ #define TR_SCRIPT "Script" #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" -#if defined(COLORLCD) #define TR_EEBACKUP "EEPROM backup" #define TR_FACTORYRESET "Factory reset" -#elif defined(PCBXLITE) -#define TR_EEBACKUP "\001[ENT. Long]: Backup" -#define TR_FACTORYRESET "\001[\300ENT. Long]: Fact. reset" -#else -#define TR_EEBACKUP TR("\001[ENTER Long]: Backup", "\012[ENTER Long]: EEPROM backup") -#define TR_FACTORYRESET TR("\001[MENU Long]: Fact. reset", "\012[MENU Long]: Factory reset") -#endif #define TR_CONFIRMRESET TR("Erase ALL", "Erase ALL models and settings?") #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" - // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Name" #define TR_PHASES_HEADERS_SW "Switch"