From ed1d312f2045bebcd3af05f4be35fe8d623b03b0 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 22 Mar 2019 12:00:01 +0100 Subject: [PATCH] Many fixes --- radio/src/gui/128x64/model_setup.cpp | 4 ++-- radio/src/gui/128x64/radio_version.cpp | 10 ++++++++-- radio/src/gui/common/stdlcd/popups.cpp | 3 ++- radio/src/opentx.h | 12 ++++++------ radio/src/pulses/modules.h | 4 +++- radio/src/pulses/pxx2.cpp | 4 ++-- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index ce205ec30..43c3d7ae2 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -2067,7 +2067,7 @@ void onRxOptionsUpdateConfirm(const char * result) } } -enum MenuModelReceiverOptionsItems { +enum { ITEM_RECEIVER_TELEMETRY, ITEM_RECEIVER_PWM_RATE, ITEM_RECEIVER_PINMAP_FIRST @@ -2092,7 +2092,7 @@ void menuModelReceiverOptions(event_t event) } } - if (reusableBuffer.moduleSettings.dirty == 2 && reusableBuffer.receiverSettings.state == PXX2_SETTINGS_OK) { + if (reusableBuffer.receiverSettings.dirty == 2 && reusableBuffer.receiverSettings.state == PXX2_SETTINGS_OK) { popMenu(); } diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 576e365d7..4b47f5f59 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -132,7 +132,10 @@ void menuRadioModulesVersion(event_t event) // Module model if (y >= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { lcdDrawText(INDENT_WIDTH, y, "Model"); - lcdDrawText(12 * FW, y, modulesModels[reusableBuffer.hardware.modules[module].modelID]); + uint8_t modelId = reusableBuffer.hardware.modules[module].modelID; + if (modelId >= DIM(modulesModels)) + modelId = 0; + lcdDrawText(12 * FW, y, modulesModels[modelId]); } y += FH; @@ -151,7 +154,10 @@ void menuRadioModulesVersion(event_t event) if (y >= MENU_BODY_TOP && y < MENU_BODY_BOTTOM) { lcdDrawText(INDENT_WIDTH, y, "Receiver"); lcdDrawNumber(lcdLastRightPos + 2, y, receiver + 1); - lcdDrawText(12 * FW, y, receiversModels[reusableBuffer.hardware.modules[module].receivers[receiver].modelID]); + uint8_t modelId = reusableBuffer.hardware.modules[module].receivers[receiver].modelID; + if (modelId >= DIM(receiversModels)) + modelId = 0; + lcdDrawText(12 * FW, y, receiversModels[modelId]); } y += FH; diff --git a/radio/src/gui/common/stdlcd/popups.cpp b/radio/src/gui/common/stdlcd/popups.cpp index cd8d0fc6c..d382b2deb 100644 --- a/radio/src/gui/common/stdlcd/popups.cpp +++ b/radio/src/gui/common/stdlcd/popups.cpp @@ -156,9 +156,10 @@ void runPopupWarning(event_t event) if (warningType == WARNING_TYPE_CONFIRM) { warningType = WARNING_TYPE_ASTERISK; warningText = nullptr; - warningResult = true; if (popupMenuHandler) popupMenuHandler(STR_OK); + else + warningResult = true; break; } // no break diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 055ac369b..9558e2141 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1138,12 +1138,12 @@ union ReusableBuffer } moduleSetup; struct { - uint8_t state; // 0x00 = READ 0x40 = WRITE - tmr10ms_t timeout; - uint8_t dirty; - uint8_t rfProtocol; - uint8_t externalAntenna; - int8_t txPower; + uint8_t state; // 0x00 = READ 0x40 = WRITE + tmr10ms_t timeout; + uint8_t dirty; + uint8_t rfProtocol; + uint8_t externalAntenna; + int8_t txPower; } moduleSettings; struct { diff --git a/radio/src/pulses/modules.h b/radio/src/pulses/modules.h index 84eb5d1b8..d73f367dd 100644 --- a/radio/src/pulses/modules.h +++ b/radio/src/pulses/modules.h @@ -192,7 +192,7 @@ inline bool isModuleDSM2(uint8_t idx) #endif // order is the same as in enum Protocols in myeeprom.h (none, ppm, pxx, pxx2, dsm, crossfire, multi, r9m, r9m2, sbus) -static const int8_t maxChannelsModules[] = { 0, 8, 8, 8, -2, 8, 4, 8, 8, 8}; // relative to 8! +static const int8_t maxChannelsModules[] = { 0, 8, 8, 16, -2, 8, 4, 8, 16, 8}; // relative to 8! static const int8_t maxChannelsXJT[] = { 0, 8, 0, 4 }; // relative to 8! constexpr int8_t MAX_TRAINER_CHANNELS_M8 = MAX_TRAINER_CHANNELS - 8; @@ -216,6 +216,8 @@ inline int8_t defaultModuleChannels_M8(uint8_t idx) return 0; // 8 channels else if (isModuleMultimoduleDSM2(idx)) return -1; // 7 channels + else if (isModulePXX2(idx)) + return 8; // 16 channels else return maxModuleChannels_M8(idx); } diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index 9abb29acf..18727d19a 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -191,9 +191,9 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module) if (reusableBuffer.receiverSettings.pwmRate) flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM; Pxx2Transport::addByte(flag1); - uint8_t outputsCount = min(16, reusableBuffer.receiverSettings.outputsCount); + uint8_t outputsCount = min(24, reusableBuffer.receiverSettings.outputsCount); for (int i = 0; i < outputsCount; i++) { - Pxx2Transport::addByte(reusableBuffer.receiverSettings.outputsMapping[i]); + Pxx2Transport::addByte(min(23, reusableBuffer.receiverSettings.outputsMapping[i])); } } reusableBuffer.receiverSettings.timeout = get_tmr10ms() + 200/*next try in 2s*/;