From 096fac2f273ae1ba9a82fc9cdd7dc1d1bcc60d11 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 8 Mar 2019 15:30:47 +0100 Subject: [PATCH] [Exit] in a popup menu now calls onPopupHandler(nullptr) --- radio/src/gui/128x64/model_custom_scripts.cpp | 2 +- radio/src/gui/128x64/model_display.cpp | 2 +- .../src/gui/128x64/model_logical_switches.cpp | 3 +- radio/src/gui/128x64/model_select.cpp | 2 +- radio/src/gui/128x64/model_setup.cpp | 32 +++++++------- .../gui/128x64/model_special_functions.cpp | 4 +- radio/src/gui/212x64/model_custom_scripts.cpp | 2 +- radio/src/gui/212x64/model_display.cpp | 2 +- radio/src/gui/212x64/model_select.cpp | 2 +- radio/src/gui/212x64/model_setup.cpp | 2 +- .../gui/212x64/model_special_functions.cpp | 4 +- .../src/gui/480x272/model_custom_scripts.cpp | 2 +- radio/src/gui/480x272/model_setup.cpp | 2 +- .../gui/480x272/model_special_functions.cpp | 4 +- radio/src/gui/480x272/screens_setup.cpp | 2 +- radio/src/main.cpp | 4 +- radio/src/opentx.h | 4 +- radio/src/pulses/pxx2.cpp | 41 ++++++++++------- radio/src/pulses/pxx2.h | 1 - radio/src/telemetry/telemetry.cpp | 44 +++++++++++-------- radio/src/translations.cpp | 4 +- 21 files changed, 88 insertions(+), 77 deletions(-) diff --git a/radio/src/gui/128x64/model_custom_scripts.cpp b/radio/src/gui/128x64/model_custom_scripts.cpp index e63e57e5f..f1063e9a8 100644 --- a/radio/src/gui/128x64/model_custom_scripts.cpp +++ b/radio/src/gui/128x64/model_custom_scripts.cpp @@ -37,7 +37,7 @@ void onModelCustomScriptMenu(const char *result) POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); } } - else { + else if (result) { // The user choosed a lua file in the list copySelection(sd.file, result, sizeof(sd.file)); memset(sd.inputs, 0, sizeof(sd.inputs)); diff --git a/radio/src/gui/128x64/model_display.cpp b/radio/src/gui/128x64/model_display.cpp index cc8db7a72..dc740822b 100644 --- a/radio/src/gui/128x64/model_display.cpp +++ b/radio/src/gui/128x64/model_display.cpp @@ -73,7 +73,7 @@ void onTelemetryScriptFileSelectionMenu(const char *result) POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); } } - else { + else if (result) { // The user choosed a file in the list memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file)); storageDirty(EE_MODEL); diff --git a/radio/src/gui/128x64/model_logical_switches.cpp b/radio/src/gui/128x64/model_logical_switches.cpp index cebf9c9a2..85686a27e 100644 --- a/radio/src/gui/128x64/model_logical_switches.cpp +++ b/radio/src/gui/128x64/model_logical_switches.cpp @@ -234,8 +234,7 @@ void onLogicalSwitchesMenu(const char *result) s_currIdx = sub; pushMenu(menuModelLogicalSwitchOne); } - - if (result == STR_COPY) { + else if (result == STR_COPY) { clipboard.type = CLIPBOARD_TYPE_CUSTOM_SWITCH; clipboard.data.csw = *cs; } diff --git a/radio/src/gui/128x64/model_select.cpp b/radio/src/gui/128x64/model_select.cpp index 61953626c..09a31eb2e 100644 --- a/radio/src/gui/128x64/model_select.cpp +++ b/radio/src/gui/128x64/model_select.cpp @@ -57,7 +57,7 @@ void onModelSelectMenu(const char * result) SET_WARNING_INFO(modelHeaders[sub].name, sizeof(g_model.header.name), ZCHAR); } #if defined(SDCARD) - else { + else if (result) { // The user choosed a file on SD to restore storageCheck(true); POPUP_WARNING(eeRestoreModel(sub, (char *)result)); diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index af3f71848..c50dc4916 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -25,6 +25,7 @@ uint8_t g_moduleIdx; void drawReceiverName(uint8_t x, uint8_t y, uint8_t receiverSlot) { + TRACE("receiverSlot=%d", receiverSlot); if (g_model.receiverData[receiverSlot].name[0] != '\0') lcdDrawSizedText(x, y, g_model.receiverData[receiverSlot].name, PXX2_LEN_RX_NAME); else @@ -92,7 +93,7 @@ enum MenuModelSetupItems { ITEM_MODEL_INTERNAL_MODULE_ANTENNA, #endif ITEM_MODEL_INTERNAL_MODULE_FAILSAFE, - ITEM_MODEL_INTERNAL_MODULE_PXX2_RANGE_REGISTER, + ITEM_MODEL_INTERNAL_MODULE_PXX2_REGISTER_RANGE, ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_LABEL, ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_PINMAP, ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_BIND_SHARE, @@ -181,7 +182,7 @@ enum MenuModelSetupItems { #if defined(PCBTARANIS) #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE) - #define CURRENT_RECEIVER_EDITED(k) ((k - (k >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_LABEL : ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_LABEL)) / 4) + #define CURRENT_RECEIVER_EDITED(k) ((k - (k >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_EXTERNAL_MODULE_PXX2_RECEIVER_1_LABEL : ITEM_MODEL_INTERNAL_MODULE_PXX2_RECEIVER_1_LABEL)) / 3) #elif defined(PCBSKY9X) && !defined(REVA) #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_EXTRA_MODULE_LABEL ? EXTRA_MODULE : EXTERNAL_MODULE) #else @@ -266,8 +267,15 @@ enum MenuModelSetupItems { void onPXX2BindMenu(const char * result) { - reusableBuffer.moduleSetup.pxx2.bindSelectedReceiverIndex = (result - reusableBuffer.moduleSetup.pxx2.bindCandidateReceiversNames[0]) / PXX2_LEN_RX_NAME; - reusableBuffer.moduleSetup.pxx2.bindStep = BIND_RX_NAME_SELECTED; + if (result) { + reusableBuffer.moduleSetup.pxx2.bindSelectedReceiverIndex = (result - reusableBuffer.moduleSetup.pxx2.bindCandidateReceiversNames[0]) / sizeof(reusableBuffer.moduleSetup.pxx2.bindCandidateReceiversNames[0]); + reusableBuffer.moduleSetup.pxx2.bindStep = BIND_RX_NAME_SELECTED; + } + else { + // the user pressed [Exit] + uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition); + moduleSettings[moduleIdx].mode = MODULE_MODE_NORMAL; + } } void onBindMenu(const char * result) @@ -434,19 +442,15 @@ void menuModelSetup(event_t event) IF_PXX2_MODULE(INTERNAL_MODULE, 1), // Range check and Register buttons IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Receiver Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 0, 0), // Receiver Pinmap - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 0, 0), // Receiver Telemetry IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 0, 1), // Receiver Bind/Share IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 0, 0), // Receiver2 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 1, 0), // Receiver2 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 1, 0), // Receiver2 Telemetry IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 1, 1), // Receiver2 Bind/Share IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 1, 0), // Receiver3 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 0), // Receiver3 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 0), // Receiver3 Telemetry IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 1), // Receiver3 Bind/Share IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 2, 0), // Receiver4 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 3, 0), // Receiver4 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 3, 0), // Receiver4 Telemetry IF_PXX2_RECEIVER_DISPLAYED(INTERNAL_MODULE, 3, 1), // Receiver4 Bind/Share LABEL(ExternalModule), @@ -465,19 +469,15 @@ void menuModelSetup(event_t event) IF_PXX2_MODULE(EXTERNAL_MODULE, 1), // Range check and Register buttons IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 0, 0), // Receiver Pinmap - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 0, 0), // Receiver Telemetry IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 0, 1), // Receiver Bind/Share IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 0, 0), // Receiver2 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 1, 0), // Receiver2 Range - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 1, 0), // Receiver2 Telemetry IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 1, 1), // Receiver2 Bind/Share IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 1, 0), // Receiver3 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 0), // Receiver3 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 0), // Receiver3 Telemetry IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 1), // Receiver3 Bind/Share IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 2, 0), // Receiver4 Name + Add/Del buttons IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 3, 0), // Receiver4 Pinmap - IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 3, 0), // Receiver4 Telemetry IF_PXX2_RECEIVER_DISPLAYED(EXTERNAL_MODULE, 3, 1), // Receiver4 Bind/Share TRAINER_ROWS @@ -1205,7 +1205,7 @@ void menuModelSetup(event_t event) } break; - case ITEM_MODEL_INTERNAL_MODULE_PXX2_RANGE_REGISTER: + case ITEM_MODEL_INTERNAL_MODULE_PXX2_REGISTER_RANGE: case ITEM_MODEL_EXTERNAL_MODULE_PXX2_REGISTER_RANGE: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); @@ -1252,7 +1252,7 @@ void menuModelSetup(event_t event) lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DEL_BUTTON, attr); if (attr && s_editMode > 0) { g_model.moduleData[moduleIdx].pxx2.receivers = (g_model.moduleData[moduleIdx].pxx2.receivers & BF_MASK(0, receiverIdx * 3)) | ((g_model.moduleData[moduleIdx].pxx2.receivers & BF_MASK((receiverIdx + 1) * 3, (MAX_RECEIVERS_PER_MODULE - 1 - receiverIdx) * 3)) >> 3); - memclear(&g_model.receiverData[receiverSlot], sizeof(ReceiverData)); + memclear(&g_model.receiverData[receiverSlot - 1], sizeof(ReceiverData)); s_editMode = 0; killEvents(event); storageDirty(EE_MODEL); @@ -1320,12 +1320,12 @@ void menuModelSetup(event_t event) if (event == EVT_KEY_BREAK(KEY_ENTER)) { // TODO this will go to module.cpp memclear(&reusableBuffer.moduleSetup.pxx2, sizeof(reusableBuffer.moduleSetup.pxx2)); - reusableBuffer.moduleSetup.pxx2.bindReceiverSlot = receiverSlot; + reusableBuffer.moduleSetup.pxx2.bindReceiverId = receiverSlot; moduleSettings[moduleIdx].mode ^= MODULE_MODE_BIND; } if (moduleSettings[moduleIdx].mode == MODULE_MODE_BIND) { s_editMode = 1; - if (reusableBuffer.moduleSetup.pxx2.bindStep == BIND_RX_NAME_RECEIVED) { + if (reusableBuffer.moduleSetup.pxx2.bindStep == BIND_START && reusableBuffer.moduleSetup.pxx2.bindCandidateReceiversCount > 0) { popupMenuItemsCount = min(reusableBuffer.moduleSetup.pxx2.bindCandidateReceiversCount, PXX2_MAX_RECEIVERS_PER_MODULE); for (uint8_t i=0; iplay.name, result, sizeof(cfn->play.name)); storageDirty(eeFlags); @@ -96,7 +96,7 @@ void onAdjustGvarSourceLongEnterPress(const char * result) CFN_PARAM(cfn) = 0; storageDirty(EE_MODEL); } - else { + else if (result) { onSourceLongEnterPress(result); } } diff --git a/radio/src/gui/212x64/model_custom_scripts.cpp b/radio/src/gui/212x64/model_custom_scripts.cpp index e0f052de5..bd9f81969 100644 --- a/radio/src/gui/212x64/model_custom_scripts.cpp +++ b/radio/src/gui/212x64/model_custom_scripts.cpp @@ -29,7 +29,7 @@ void onModelCustomScriptMenu(const char *result) POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); } } - else { + else if (result) { // The user choosed a lua file in the list copySelection(sd.file, result, sizeof(sd.file)); memset(sd.inputs, 0, sizeof(sd.inputs)); diff --git a/radio/src/gui/212x64/model_display.cpp b/radio/src/gui/212x64/model_display.cpp index 42520142a..72191bfbe 100644 --- a/radio/src/gui/212x64/model_display.cpp +++ b/radio/src/gui/212x64/model_display.cpp @@ -72,7 +72,7 @@ void onTelemetryScriptFileSelectionMenu(const char *result) POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); } } - else { + else if (result) { // The user choosed a file in the list memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file)); storageDirty(EE_MODEL); diff --git a/radio/src/gui/212x64/model_select.cpp b/radio/src/gui/212x64/model_select.cpp index 7eb4bb8a3..76de6a69e 100644 --- a/radio/src/gui/212x64/model_select.cpp +++ b/radio/src/gui/212x64/model_select.cpp @@ -55,7 +55,7 @@ void onModelSelectMenu(const char * result) POPUP_CONFIRMATION(STR_DELETEMODEL); SET_WARNING_INFO(nametmp, sizeof(g_model.header.name), 0); } - else { + else if (result) { // The user choosed a file on SD to restore storageCheck(true); POPUP_WARNING(eeRestoreModel(sub, (char *)result)); diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 3bb4cabbc..e38270196 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -148,7 +148,7 @@ void onModelSetupBitmapMenu(const char * result) POPUP_WARNING(STR_NO_BITMAPS_ON_SD); } } - else { + else if (result) { // The user choosed a bmp file in the list copySelection(g_model.header.bitmap, result, sizeof(g_model.header.bitmap)); memcpy(modelHeaders[g_eeGeneral.currModel].bitmap, g_model.header.bitmap, sizeof(g_model.header.bitmap)); diff --git a/radio/src/gui/212x64/model_special_functions.cpp b/radio/src/gui/212x64/model_special_functions.cpp index 0d911a3bc..50ffa5869 100644 --- a/radio/src/gui/212x64/model_special_functions.cpp +++ b/radio/src/gui/212x64/model_special_functions.cpp @@ -56,7 +56,7 @@ void onCustomFunctionsFileSelectionMenu(const char * result) POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD); } } - else { + else if (result) { // The user choosed a file in the list memcpy(cfn->play.name, result, sizeof(cfn->play.name)); storageDirty(eeFlags); @@ -129,7 +129,7 @@ void onAdjustGvarSourceLongEnterPress(const char * result) CFN_PARAM(cfn) = 0; storageDirty(EE_MODEL); } - else { + else if (result) { onSourceLongEnterPress(result); } } diff --git a/radio/src/gui/480x272/model_custom_scripts.cpp b/radio/src/gui/480x272/model_custom_scripts.cpp index b2c0a08b8..9a5fba277 100644 --- a/radio/src/gui/480x272/model_custom_scripts.cpp +++ b/radio/src/gui/480x272/model_custom_scripts.cpp @@ -29,7 +29,7 @@ void onModelCustomScriptMenu(const char *result) POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); } } - else { + else if (result) { // The user choosed a lua file in the list copySelection(sd.file, result, sizeof(sd.file)); memset(sd.inputs, 0, sizeof(sd.inputs)); diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 3cce3cd3e..5edb39c02 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -148,7 +148,7 @@ void onModelSetupBitmapMenu(const char * result) POPUP_WARNING(STR_NO_BITMAPS_ON_SD); } } - else { + else if (result) { // The user choosed a bmp file in the list copySelection(g_model.header.bitmap, result, sizeof(g_model.header.bitmap)); storageDirty(EE_MODEL); diff --git a/radio/src/gui/480x272/model_special_functions.cpp b/radio/src/gui/480x272/model_special_functions.cpp index 1ed3528d2..9e9695645 100644 --- a/radio/src/gui/480x272/model_special_functions.cpp +++ b/radio/src/gui/480x272/model_special_functions.cpp @@ -56,7 +56,7 @@ void onCustomFunctionsFileSelectionMenu(const char * result) POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD); } } - else { + else if (result) { // The user choosed a file in the list memcpy(cf->play.name, result, sizeof(cf->play.name)); storageDirty(eeFlags); @@ -128,7 +128,7 @@ void onAdjustGvarSourceLongEnterPress(const char * result) CFN_PARAM(cfn) = 0; storageDirty(EE_MODEL); } - else { + else if (result) { onSourceLongEnterPress(result); } } diff --git a/radio/src/gui/480x272/screens_setup.cpp b/radio/src/gui/480x272/screens_setup.cpp index a329a136f..800e584fb 100644 --- a/radio/src/gui/480x272/screens_setup.cpp +++ b/radio/src/gui/480x272/screens_setup.cpp @@ -53,7 +53,7 @@ void onZoneOptionFileSelectionMenu(const char * result) POPUP_WARNING(STR_NO_BITMAPS_ON_SD); } } - else { + else if (result) { fileSelectionDone = true; memcpy(fileSelection, result, sizeof(fileSelection)); } diff --git a/radio/src/main.cpp b/radio/src/main.cpp index c7a1ae721..32be237c9 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -313,7 +313,7 @@ void guiMain(event_t evt) if (warn) DISPLAY_WARNING(evt); if (menu) { const char * result = runPopupMenu(evt); - if (result) { + if (popupMenuItemsCount == 0) { popupMenuHandler(result); if (menuEvent == 0) { evt = EVT_REFRESH; @@ -451,7 +451,7 @@ void guiMain(event_t evt) inPopupMenu = true; } const char * result = runPopupMenu(evt); - if (result) { + if (popupMenuItemsCount == 0) { TRACE("popupMenuHandler(%s)", result); popupMenuHandler(result); } diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 8cc333285..fc4b630cd 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1130,9 +1130,9 @@ union ReusableBuffer int8_t registerPopupEditMode; char registerRxName[PXX2_LEN_RX_NAME]; char registrationID[PXX2_LEN_REGISTRATION_ID]; - char bindCandidateReceiversNames[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME]; + char bindCandidateReceiversNames[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME + 1]; uint8_t bindCandidateReceiversCount; - uint8_t bindReceiverSlot; + uint8_t bindReceiverId; union { uint8_t bindSelectedReceiverIndex; uint8_t shareReceiverIndex; diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index 875b14b44..0529b449f 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -180,7 +180,7 @@ void Pxx2Pulses::setupBindFrame(uint8_t module) for (uint8_t i=0; i