diff --git a/radio/src/gui/128x64/radio_hardware.cpp b/radio/src/gui/128x64/radio_hardware.cpp index 1973a5b35..3785ac758 100644 --- a/radio/src/gui/128x64/radio_hardware.cpp +++ b/radio/src/gui/128x64/radio_hardware.cpp @@ -123,6 +123,7 @@ enum MenuRadioHardwareItems { #endif ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_OWNER_ID, + ITEM_RADIO_REGISTER_RECEIVER, ITEM_RADIO_HARDWARE_MAX }; @@ -152,6 +153,61 @@ enum MenuRadioHardwareItems { #define HW_SETTINGS_COLUMN1 30 #define HW_SETTINGS_COLUMN2 (30 + 5*FW) +void runPopupHWSetupRegister(event_t event) +{ + menuVerticalPosition = reusableBuffer.hardwareSetup.pxx2.registerPopupVerticalPosition; + menuHorizontalPosition = reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition; + s_editMode = reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode; + uint8_t backupVerticalOffset = menuVerticalOffset; + + switch (event) { + case EVT_KEY_BREAK(KEY_ENTER): + if (menuVerticalPosition != 2) { + break; + } + else if (menuHorizontalPosition == 0) { + // [Enter] pressed + moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_REGISTER; + } + // no break + + case EVT_KEY_LONG(KEY_EXIT): + s_editMode = 0; + // no break; + + case EVT_KEY_BREAK(KEY_EXIT): + if (s_editMode <= 0) { + warningText = NULL; + } + break; + } + + if (warningText) { + const uint8_t dialogRows[] = { 0, 0, 1}; + check(event, 0, nullptr, 0, dialogRows, 2, 2); + + drawMessageBox(); + + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 3, "Reg. ID"); + editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 3, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, event, menuVerticalPosition == 0); + + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y - 2 + FH, "Rx Name"); + editName(WARNING_LINE_X + 8*FW, WARNING_LINE_Y - 2 + FH, reusableBuffer.hardwareSetup.pxx2.registerRxName, PXX2_LEN_RX_NAME, event, menuVerticalPosition == 1); + + lcdDrawText(WARNING_LINE_X, WARNING_LINE_Y+2*FH + 2, TR_ENTER, menuVerticalPosition == 2 && menuHorizontalPosition == 0 ? INVERS : 0); + lcdDrawText(WARNING_LINE_X + 8*FW, WARNING_LINE_Y+2*FH + 2, TR_EXIT, menuVerticalPosition == 2 && menuHorizontalPosition == 1 ? INVERS : 0); + + reusableBuffer.hardwareSetup.pxx2.registerPopupVerticalPosition = menuVerticalPosition; + reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition = menuHorizontalPosition; + reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode = s_editMode; + } + + menuVerticalPosition = ITEM_RADIO_REGISTER_RECEIVER + HEADER_LINE; + menuHorizontalPosition = 1; + menuVerticalOffset = backupVerticalOffset; + s_editMode = (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_REGISTER ? EDIT_MODIFY_FIELD : 0); +} + void menuRadioHardware(event_t event) { MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, HEADER_LINE+ITEM_RADIO_HARDWARE_MAX, { @@ -302,6 +358,26 @@ void menuRadioHardware(event_t event) case ITEM_RADIO_OWNER_ID: editSingleName(HW_SETTINGS_COLUMN2, y, STR_OWNER_ID, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, event, attr); break; + + case ITEM_RADIO_REGISTER_RECEIVER: + lcdDrawTextAlignedLeft(y, NO_INDENT(STR_RECEIVER)); + lcdDrawText(HW_SETTINGS_COLUMN2, y, "[Register]", attr ); + if (attr) { + if (moduleSettings[INTERNAL_MODULE].mode == MODULE_MODE_NORMAL && s_editMode > 0) { + + reusableBuffer.hardwareSetup.pxx2.registerPopupVerticalPosition = 0; + reusableBuffer.hardwareSetup.pxx2.registerPopupHorizontalPosition = 0; + reusableBuffer.hardwareSetup.pxx2.registerPopupEditMode = 0; + s_editMode = 0; + POPUP_INPUT("", runPopupHWSetupRegister); + + } + if (s_editMode == 0) { + moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL; + } + } + break; + } } } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 21bfc9c3b..20d8f6106 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1134,7 +1134,7 @@ union ReusableBuffer uint8_t bindSelectedReceiverIndex; } pxx2; }; - } modelSetup; + } modelSetup, hardwareSetup; // 103 bytes struct {