From e33579f305c45e0b4ec63e908dc3bc87f0faded4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 8 Mar 2019 11:01:24 +0100 Subject: [PATCH] For RX SETTINGS tests --- radio/src/gui/128x64/model_setup.cpp | 34 +++++++++++++++++--------- radio/src/gui/128x64/radio_version.cpp | 6 +++++ radio/src/opentx.h | 2 ++ radio/src/pulses/pxx2.cpp | 24 +++++++++++++----- radio/src/telemetry/telemetry.cpp | 8 +++--- 5 files changed, 52 insertions(+), 22 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 87d6ef0d1..da164c678 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -23,6 +23,14 @@ #warning "TODO remove it" uint8_t g_moduleIdx; +void drawReceiverName(uint8_t x, uint8_t y, uint8_t receiverSlot) +{ + if (g_model.receiverData[receiverSlot].name[0] != '\0') + lcdDrawSizedText(x, y, g_model.receiverData[receiverSlot].name, PXX2_LEN_RX_NAME); + else + lcdDrawText(x, y, "---"); +} + void menuModelFailsafe(event_t event); void menuModelPinmap(event_t event); @@ -1247,7 +1255,6 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, STR_RECEIVER); lcdDrawNumber(lcdLastRightPos + 1, y, receiverIdx + 1); - // lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].rxName, PXX2_LEN_RX_NAME, ZCHAR); if (receiverSlot) { lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DEL_BUTTON, attr); @@ -1294,7 +1301,6 @@ void menuModelSetup(event_t event) memclear(&reusableBuffer.receiverSetup, sizeof(reusableBuffer.receiverSetup)); reusableBuffer.receiverSetup.moduleIdx = moduleIdx; reusableBuffer.receiverSetup.receiverId = receiverSlot; - moduleSettings[moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; pushMenu(menuModelPinmap); } } @@ -1329,11 +1335,7 @@ void menuModelSetup(event_t event) uint8_t receiverIdx = CURRENT_RECEIVER_EDITED(k); uint8_t receiverSlot = g_model.moduleData[moduleIdx].pxx2.getReceiverSlot(receiverIdx) - 1; - if (g_model.receiverData[receiverSlot].name[0] != '\0') - lcdDrawSizedText(INDENT_WIDTH * 2, y, g_model.receiverData[receiverSlot].name, PXX2_LEN_RX_NAME); - else - lcdDrawTextAlignedLeft(y, INDENT INDENT "---"); - + drawReceiverName(INDENT_WIDTH * 2, y, receiverSlot); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_BIND, menuHorizontalPosition==0 ? attr : 0); lcdDrawText(lcdLastRightPos + FW/2, y, BUTTON("Share"), menuHorizontalPosition==1 ? attr : 0); @@ -1927,15 +1929,26 @@ void menuModelFailsafe(event_t event) void menuModelPinmap(event_t event) { + if (menuEvent) { + moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_NORMAL; + return; + } + const int lim = (g_model.extendedLimits ? (512 * LIMIT_EXT_PERCENT / 100) : 512) * 2; uint8_t wbar = LCD_W / 2 - 20; SIMPLE_SUBMENU_NOTITLE(sentModuleChannels(g_moduleIdx)); lcdDrawTextAlignedLeft(0, STR_PINMAPSET); - // TODO write receiver name here + drawReceiverName(FW * 10, 0, reusableBuffer.receiverSetup.receiverId); lcdInvertLine(0); - if (reusableBuffer.receiverSetup.state > 0) { + if (event == EVT_ENTRY || (reusableBuffer.receiverSetup.state == 0x00 && get_tmr10ms() >= reusableBuffer.receiverSetup.updateTime)) { + reusableBuffer.receiverSetup.updateTime = get_tmr10ms() + 100/*1s*/; + reusableBuffer.receiverSetup.timeout = 0; + moduleSettings[reusableBuffer.receiverSetup.moduleIdx].mode = MODULE_MODE_RECEIVER_SETTINGS; + } + + if (reusableBuffer.receiverSetup.state != 0) { for (uint8_t i = 0; i < NUM_BODY_LINES; i++) { coord_t y = MENU_HEADER_HEIGHT + 1 + i * FH; uint8_t pin = menuVerticalOffset + i; @@ -1952,8 +1965,7 @@ void menuModelPinmap(event_t event) flags |= INVERS; if (s_editMode > 0) { flags |= BLINK; - #warning "Not a MODELVAR" - CHECK_INCDEC_MODELVAR(event, channel, 0, sentModuleChannels(g_moduleIdx)); + channel = checkIncDec(event, channel, 0, sentModuleChannels(g_moduleIdx)); if (checkIncDec_Ret) { reusableBuffer.receiverSetup.channelMapping[pin] = channel; reusableBuffer.receiverSetup.state = 0x40; diff --git a/radio/src/gui/128x64/radio_version.cpp b/radio/src/gui/128x64/radio_version.cpp index 02ee48d4c..53de9ea9d 100644 --- a/radio/src/gui/128x64/radio_version.cpp +++ b/radio/src/gui/128x64/radio_version.cpp @@ -36,6 +36,12 @@ #if defined(PXX2) void menuRadioModulesVersion(event_t event) { + if (menuEvent) { + moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL; + moduleSettings[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL; + return; + } + TITLE("MODULES / RX VERSION"); if (event == EVT_ENTRY || get_tmr10ms() >= reusableBuffer.hardware.updateTime) { diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 85e541277..8cc333285 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1143,6 +1143,8 @@ union ReusableBuffer struct { uint8_t state; // 0x00 = READ 0x40 = WRITE + tmr10ms_t timeout; + tmr10ms_t updateTime; uint8_t moduleIdx; uint8_t receiverId; uint8_t channelMapping[24]; diff --git a/radio/src/pulses/pxx2.cpp b/radio/src/pulses/pxx2.cpp index ecd9264bc..c280f65cb 100644 --- a/radio/src/pulses/pxx2.cpp +++ b/radio/src/pulses/pxx2.cpp @@ -115,10 +115,12 @@ void Pxx2Pulses::setupHardwareInfoFrame(uint8_t module) } else { reusableBuffer.hardware.modules[module].timeout--; + setupChannelsFrame(module); } } else { moduleSettings[module].mode = MODULE_MODE_NORMAL; + setupChannelsFrame(module); } } @@ -142,13 +144,23 @@ void Pxx2Pulses::setupRegisterFrame(uint8_t module) void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module) { - addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS); - Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId); - Pxx2Transport::addByte(0x0); - for (int i=0; i<24; i++) { - Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]); + if (reusableBuffer.receiverSetup.timeout) { + if (get_tmr10ms() > reusableBuffer.receiverSetup.timeout) { + reusableBuffer.receiverSetup.timeout = 0; + moduleSettings[module].mode = MODULE_MODE_NORMAL; + } + #warning "TODO send channels during the timeout" + //setupChannelsFrame(module); + } + else { + addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_RX_SETTINGS); + Pxx2Transport::addByte(reusableBuffer.receiverSetup.state + reusableBuffer.receiverSetup.receiverId); + Pxx2Transport::addByte(0x0); + for (int i = 0; i < 24; i++) { + Pxx2Transport::addByte(reusableBuffer.receiverSetup.channelMapping[i]); + } + reusableBuffer.receiverSetup.timeout = get_tmr10ms() + 10/*100ms*/; } - // TODO moduleSettings[module].mode = MODULE_MODE_NORMAL; } void Pxx2Pulses::setupBindFrame(uint8_t module) diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 879e560db..0244c458d 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -90,17 +90,15 @@ void processGetHardwareInfoFrame(uint8_t module, uint8_t * frame) void processReceiverSettingsFrame(uint8_t module, uint8_t * frame) { - #warning "TODO This will be needed to ensure we are in the right menu" - // if (moduleSettings[module].mode != MODULE_MODE_GET_HARDWARE_INFO) { - // return; - // } + if (moduleSettings[module].mode != MODULE_MODE_RECEIVER_SETTINGS) { + return; + } for (uint8_t pin=0; pin<24; pin++) { reusableBuffer.receiverSetup.channelMapping[pin] = frame[5 + pin]; } reusableBuffer.receiverSetup.state = 0xFF; - moduleSettings[module].mode = MODULE_MODE_NORMAL; } void processRegisterFrame(uint8_t module, uint8_t * frame)