From 6b499ea23df8638611a99e6a61ba89344c855e0f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sun, 17 Mar 2019 14:50:26 +0100 Subject: [PATCH] RX SET SETTINGS fix --- radio/src/gui/128x64/model_setup.cpp | 19 +++++++++---------- radio/src/opentx.h | 1 + radio/src/pulses/pxx2.cpp | 22 +++++++++------------- radio/src/pulses/pxx2.h | 6 +++--- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index af1c46a7a..821b5ec4d 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1376,11 +1376,13 @@ void menuModelSetup(event_t event) } } else { + // for now we will send the SHARE frame indefinitely (until the user manually stops it) if (event == EVT_KEY_BREAK(KEY_ENTER)) { - moduleSettings[moduleIdx].mode = MODULE_MODE_SHARE; + moduleSettings[moduleIdx].mode ^= MODULE_MODE_SHARE; reusableBuffer.moduleSetup.pxx2.shareReceiverIndex = receiverIdx; - s_editMode = 0; - POPUP_INFORMATION("Receiver shared"); + } + else if (event == EVT_KEY_BREAK(KEY_EXIT)) { + moduleSettings[moduleIdx].mode &= ~MODULE_MODE_SHARE; } } } @@ -1947,8 +1949,6 @@ enum MenuModelReceiverOptions { }; #define RECEIVER_OPTIONS_2ND_COLUMN 80 -#define IF_TELEM_DISPLAYED(x) (g_model.moduleData[g_moduleIdx].pxx.receiver_telem_off ? (uint8_t)(x) : HIDDEN_ROW) //Todo need capabilities -#define IF_PWM_RATE_DISPLAYED(x) (g_model.moduleData[g_moduleIdx].pxx.receiver_telem_off ? (uint8_t)(x) : HIDDEN_ROW) //Todo need capabilities void menuModelReceiverOptions(event_t event) { @@ -1967,16 +1967,15 @@ void menuModelReceiverOptions(event_t event) drawReceiverName(FW * 13, 0, reusableBuffer.receiverSetup.receiverId); lcdInvertLine(0); - if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_READ && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) { - reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 500/*5s*/; + if (event == EVT_ENTRY) { moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; } - if (!s_editMode && reusableBuffer.receiverSetup.dirty && (reusableBuffer.receiverSetup.state != RECEIVER_SETTINGS_WRITE || get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) { + if (!s_editMode && reusableBuffer.receiverSetup.dirty && reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_OK) { reusableBuffer.receiverSetup.state = RECEIVER_SETTINGS_WRITE; reusableBuffer.receiverSetup.dirty = 0; reusableBuffer.receiverSetup.timeout = 0; - reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 100/*1s*/; + reusableBuffer.receiverSetup.dirtyTimeout = get_tmr10ms() + 300/*3s*/; moduleSettings[g_moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; } @@ -1984,7 +1983,7 @@ void menuModelReceiverOptions(event_t event) reusableBuffer.receiverSetup.state = 0xFF; #endif - if (reusableBuffer.receiverSetup.state > RECEIVER_SETTINGS_READ) { + if (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_OK || get_tmr10ms() < reusableBuffer.receiverSetup.dirtyTimeout) { for (uint8_t k=0; k reusableBuffer.receiverSetup.timeout) { - reusableBuffer.receiverSetup.timeout = 0; - moduleSettings[module].mode = MODULE_MODE_NORMAL; - } - setupChannelsFrame(module); - } - else { + if (get_tmr10ms() > reusableBuffer.receiverSetup.timeout) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS); - Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId); + uint8_t flag0 = reusableBuffer.receiverSetup.receiverId; + if (reusableBuffer.receiverSetup.state == RECEIVER_SETTINGS_WRITE) + flag0 |= PXX2_RX_SETTINGS_FLAG0_WRITE; + Pxx2Transport::addByte(flag0); uint8_t flag1 = 0; if (reusableBuffer.receiverSetup.pwmRate) flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM; @@ -166,7 +162,10 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module) for (int i = 0; i < channelsCount; i++) { Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]); } - reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 30/*300ms*/; + reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 30/*next try in 300ms*/; + } + else { + setupChannelsFrame(module); } } @@ -224,10 +223,7 @@ void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module) void Pxx2Pulses::setupShareMode(uint8_t module) { addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_SHARE); - Pxx2Transport::addByte(reusableBuffer.moduleSetup.pxx2.shareReceiverIndex); - - moduleSettings[module].mode = MODULE_MODE_NORMAL; } void Pxx2Pulses::setupFrame(uint8_t module) diff --git a/radio/src/pulses/pxx2.h b/radio/src/pulses/pxx2.h index 13105f386..beae30fb0 100644 --- a/radio/src/pulses/pxx2.h +++ b/radio/src/pulses/pxx2.h @@ -63,9 +63,9 @@ enum PXX2BindSteps { }; enum PXX2ReceiverStatus { - RECEIVER_SETTINGS_READ = 0x00, - RECEIVER_SETTINGS_OK, - RECEIVER_SETTINGS_WRITE = PXX2_RX_SETTINGS_FLAG0_WRITE + RECEIVER_SETTINGS_READ, + RECEIVER_SETTINGS_WRITE, + RECEIVER_SETTINGS_OK }; extern ModuleFifo intmoduleFifo;