From 6b5f6bc8170062982de57131140d3db440becb69 Mon Sep 17 00:00:00 2001 From: 3djc Date: Sat, 7 Mar 2020 10:47:10 +0100 Subject: [PATCH 01/12] Reset ISRM upgrade moduel counter reset when mode is changed (#7425) Reset authentication counter on ISRM mode change --- radio/src/gui/480x272/model_setup.cpp | 4 ++++ radio/src/gui/480x272/radio_power_meter.cpp | 4 ++++ radio/src/gui/480x272/radio_spectrum_analyser.cpp | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/480x272/model_setup.cpp b/radio/src/gui/480x272/model_setup.cpp index 0b0554336..b8c01cbaa 100644 --- a/radio/src/gui/480x272/model_setup.cpp +++ b/radio/src/gui/480x272/model_setup.cpp @@ -1018,6 +1018,10 @@ bool menuModelSetup(event_t event) uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); if (checkIncDec_Ret) { setModuleType(INTERNAL_MODULE, moduleType); +#if defined(ACCESS_LIB) + // the module will reset on mode switch, we need to reset the authentication counter + globalData.authenticationCount = 0; +#endif } } else if (isModuleXJT(INTERNAL_MODULE)) { diff --git a/radio/src/gui/480x272/radio_power_meter.cpp b/radio/src/gui/480x272/radio_power_meter.cpp index e20755ba9..f49eeb93c 100644 --- a/radio/src/gui/480x272/radio_power_meter.cpp +++ b/radio/src/gui/480x272/radio_power_meter.cpp @@ -50,6 +50,10 @@ bool menuRadioPowerMeter(event_t event) lcdDrawCenteredText(LCD_H/2, STR_STOPPING); lcdRefresh(); moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); +#if defined(ACCESS_LIB) + // the module will reset on mode switch, we need to reset the authentication counter + globalData.authenticationCount = 0; +#endif /* wait 1s to resume normal operation before leaving */ watchdogSuspend(500 /*5s*/); RTOS_WAIT_MS(1000); diff --git a/radio/src/gui/480x272/radio_spectrum_analyser.cpp b/radio/src/gui/480x272/radio_spectrum_analyser.cpp index be26e58d3..39ff66e02 100644 --- a/radio/src/gui/480x272/radio_spectrum_analyser.cpp +++ b/radio/src/gui/480x272/radio_spectrum_analyser.cpp @@ -56,8 +56,13 @@ bool menuRadioSpectrumAnalyser(event_t event) if (menuEvent) { lcdDrawCenteredText(LCD_H / 2, STR_STOPPING); lcdRefresh(); - if (isModulePXX2(g_moduleIdx)) + if (isModulePXX2(g_moduleIdx)) { moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); +#if defined(ACCESS_LIB) + // the module will reset on mode switch, we need to reset the authentication counter + globalData.authenticationCount = 0; +#endif + } else if (isModuleMultimodule(g_moduleIdx)) { if (reusableBuffer.spectrumAnalyser.moduleOFF) setModuleType(INTERNAL_MODULE, MODULE_TYPE_NONE); From e26abb5650ebf72fac672b04a2ea3d65a06fd0bb Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 8 Mar 2020 11:54:34 +0100 Subject: [PATCH 02/12] Fix #7428 --- radio/src/lua/api_model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/lua/api_model.cpp b/radio/src/lua/api_model.cpp index 3d9a4e48a..b183043c7 100644 --- a/radio/src/lua/api_model.cpp +++ b/radio/src/lua/api_model.cpp @@ -1265,7 +1265,7 @@ static int luaModelSetOutput(lua_State *L) } /*luadoc -@function model.getGlobalVariable(index [, flight_mode]) +@function model.getGlobalVariable(index, flight_mode) Return current global variable value From 18e07258aadb0f6b9b3608d84d7082a2893b808c Mon Sep 17 00:00:00 2001 From: 3djc Date: Sun, 8 Mar 2020 19:53:30 +0100 Subject: [PATCH 03/12] Add internalaccess firmware option to version screen --- radio/src/options.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/radio/src/options.h b/radio/src/options.h index e7ddb0caf..2afb1596b 100644 --- a/radio/src/options.h +++ b/radio/src/options.h @@ -59,6 +59,9 @@ static const char * options[] = { #if defined(INTERNAL_MODULE_MULTI) "internalmulti", #endif +#if defined(INTERNAL_MODULE_PXX2) + "internalaccess", +#endif #if defined(MULTIMODULE) "multimodule", #endif From ad188aa9160c89a4c046c58bc309d1dbcefa47d6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 9 Mar 2020 18:45:21 +0100 Subject: [PATCH 04/12] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index 52e7ad5f4..a710e2e02 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1704,3 +1704,4 @@ Roland Nittby Frank Barbas Scott McCoy Fabrice Debonnet +James Laver From cf5e2b3fd50b8a7276ef3fa46625203a6b3beee6 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 10 Mar 2020 17:17:59 +0100 Subject: [PATCH 05/12] 128 chan monitor (#7418) Introduce 128x64 channels monitor --- radio/src/dataconstants.h | 1 + radio/src/gui/128x64/gui.h | 6 +- radio/src/gui/128x64/lcd.h | 2 - radio/src/gui/128x64/model_curve_edit.cpp | 12 + radio/src/gui/128x64/model_failsafe.cpp | 2 +- radio/src/gui/128x64/model_input_edit.cpp | 11 + radio/src/gui/128x64/model_mix_edit.cpp | 11 + radio/src/gui/128x64/radio_calibration.cpp | 2 +- radio/src/gui/128x64/view_channels.cpp | 161 +++++---- radio/src/gui/128x64/view_main.cpp | 374 ++++++++++----------- radio/src/gui/128x64/widgets.cpp | 11 + radio/src/gui/212x64/lcd.h | 2 - radio/src/gui/212x64/model_failsafe.cpp | 2 +- radio/src/gui/212x64/radio_calibration.cpp | 2 +- radio/src/gui/212x64/view_channels.cpp | 6 +- radio/src/gui/480x272/view_text.cpp | 8 - radio/src/targets/sky9x/CMakeLists.txt | 1 + 17 files changed, 338 insertions(+), 276 deletions(-) diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 836e60e88..65f12aa48 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -168,6 +168,7 @@ enum MainViews { VIEW_OUTPUTS_BARS, VIEW_INPUTS, VIEW_TIMER2, + VIEW_CHAN_MONITOR, VIEW_COUNT }; #endif diff --git a/radio/src/gui/128x64/gui.h b/radio/src/gui/128x64/gui.h index 8ac31d239..d7e1538f5 100644 --- a/radio/src/gui/128x64/gui.h +++ b/radio/src/gui/128x64/gui.h @@ -235,6 +235,9 @@ void pushMenuTextView(const char *filename); void pushModelNotes(); void readModelNotes(); +void menuChannelsView(event_t event); +void menuChannelsViewCommon(event_t event); + #define CURSOR_MOVED_LEFT(event) (IS_ROTARY_LEFT(event) || EVT_KEY_MASK(event) == KEY_LEFT) #define CURSOR_MOVED_RIGHT(event) (IS_ROTARY_RIGHT(event) || EVT_KEY_MASK(event) == KEY_RIGHT) @@ -294,6 +297,7 @@ void drawProgressScreen(const char * title, const char * message, int num, int d void drawSleepBitmap(); void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible); +void drawGauge(coord_t x, coord_t y, coord_t w, coord_t h, int32_t val, int32_t max); void drawAlertBox(const char * title, const char * text, const char * action); void showAlertBox(const char * title, const char * text, const char * action , uint8_t sound); @@ -303,7 +307,7 @@ void showAlertBox(const char * title, const char * text, const char * action , u #define IS_MAIN_VIEW_DISPLAYED() menuHandlers[0] == menuMainView #define IS_TELEMETRY_VIEW_DISPLAYED() menuHandlers[0] == menuViewTelemetry -#define IS_OTHER_VIEW_DISPLAYED() false +#define IS_OTHER_VIEW_DISPLAYED() menuHandlers[0] == menuChannelsView void editCurveRef(coord_t x, coord_t y, CurveRef & curve, event_t event, LcdFlags flags); diff --git a/radio/src/gui/128x64/lcd.h b/radio/src/gui/128x64/lcd.h index 3e7e609ac..f1fc72810 100644 --- a/radio/src/gui/128x64/lcd.h +++ b/radio/src/gui/128x64/lcd.h @@ -114,8 +114,6 @@ void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len); void lcdDrawTextAlignedLeft(coord_t y, const char * s); void drawTimerWithMode(coord_t x, coord_t y, uint8_t index, LcdFlags att); -#define lcdDrawTextAlignedCenter(y, s) lcdDrawText((LCD_W-sizeof(s)*FW+FW+1)/2, y, s) - void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags mode=0); void lcdDrawHexChar(coord_t x, coord_t y, uint8_t val, LcdFlags flags=0); diff --git a/radio/src/gui/128x64/model_curve_edit.cpp b/radio/src/gui/128x64/model_curve_edit.cpp index 188f4c868..51294e1b3 100644 --- a/radio/src/gui/128x64/model_curve_edit.cpp +++ b/radio/src/gui/128x64/model_curve_edit.cpp @@ -161,6 +161,18 @@ void menuModelCurveOne(event_t event) POPUP_MENU_START(onCurveOneMenu); } break; + +#if defined(NAVIGATION_X7) + case EVT_KEY_LONG(KEY_MENU): + pushMenu(menuChannelsView); + killEvents(event); + break; +#elif defined(NAVIGATION_XLITE) + case EVT_KEY_LONG(KEY_SHIFT): + pushMenu(menuChannelsView); + killEvents(event); + break; +#endif } drawCurve(0); diff --git a/radio/src/gui/128x64/model_failsafe.cpp b/radio/src/gui/128x64/model_failsafe.cpp index f0a926074..7648cd9f3 100644 --- a/radio/src/gui/128x64/model_failsafe.cpp +++ b/radio/src/gui/128x64/model_failsafe.cpp @@ -51,7 +51,7 @@ void menuModelFailsafe(event_t event) SIMPLE_SUBMENU_NOTITLE(sentModuleChannels(g_moduleIdx)); - lcdDrawTextAlignedCenter(0, TR_FAILSAFESET); + lcdDrawText(LCD_W / 2, 0, STR_FAILSAFESET, CENTERED); lcdInvertLine(0); for (uint8_t i=0; ichn, 0); diff --git a/radio/src/gui/128x64/model_mix_edit.cpp b/radio/src/gui/128x64/model_mix_edit.cpp index 785d8a989..681b425b4 100644 --- a/radio/src/gui/128x64/model_mix_edit.cpp +++ b/radio/src/gui/128x64/model_mix_edit.cpp @@ -85,6 +85,17 @@ void drawOffsetBar(uint8_t x, uint8_t y, MixData * md) void menuModelMixOne(event_t event) { +#if defined(NAVIGATION_X7) + if (event == EVT_KEY_LONG(KEY_MENU)) { + pushMenu(menuChannelsView); + killEvents(event); + } +#elif defined(NAVIGATION_XLITE) + if (event == EVT_KEY_LONG(KEY_SHIFT)) { + pushMenu(menuChannelsView); + killEvents(event); + } +#endif MixData * md2 = mixAddress(s_currIdx) ; putsChn(PSIZE(TR_MIXES)*FW+FW, 0, md2->destCh+1,0); diff --git a/radio/src/gui/128x64/radio_calibration.cpp b/radio/src/gui/128x64/radio_calibration.cpp index a8004c7a2..3e1a30d20 100644 --- a/radio/src/gui/128x64/radio_calibration.cpp +++ b/radio/src/gui/128x64/radio_calibration.cpp @@ -179,7 +179,7 @@ void menuFirstCalib(event_t event) chainMenu(menuMainView); } else { - lcdDrawTextAlignedCenter(0*FH, TR_MENUCALIBRATION); + lcdDrawText(LCD_W / 2, 0, STR_MENUCALIBRATION, CENTERED); lcdInvertLine(0); menuCommonCalib(event); } diff --git a/radio/src/gui/128x64/view_channels.cpp b/radio/src/gui/128x64/view_channels.cpp index f13b871ce..2e3ed0a40 100644 --- a/radio/src/gui/128x64/view_channels.cpp +++ b/radio/src/gui/128x64/view_channels.cpp @@ -20,7 +20,30 @@ #include "opentx.h" -void menuChannelsView(event_t event) +constexpr coord_t CHANNEL_NAME_OFFSET = 1; +constexpr coord_t CHANNEL_VALUE_OFFSET = CHANNEL_NAME_OFFSET + 42; +constexpr coord_t CHANNEL_GAUGE_OFFSET = CHANNEL_VALUE_OFFSET; +constexpr coord_t CHANNEL_BAR_WIDTH = 70; +constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR_WIDTH + 2; + +#if defined(NAVIGATION_X7) +#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE) +#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE) +#define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT +#define EVT_KEY_PREVIOUS_PAGE EVT_ROTARY_LEFT +#elif defined(NAVIGATION_XLITE) +#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_UP) +#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_DOWN) +#define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_RIGHT) +#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_LEFT) +#else +#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_UP) +#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_DOWN) +#define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_RIGHT) +#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_LEFT) +#endif + +void menuChannelsViewCommon(event_t event) { bool newLongNames = false; @@ -31,13 +54,79 @@ void menuChannelsView(event_t event) memclear(&reusableBuffer.viewChannels, sizeof(reusableBuffer.viewChannels)); break; + case EVT_KEY_FIRST(KEY_ENTER): + reusableBuffer.viewChannels.mixersView = !reusableBuffer.viewChannels.mixersView; + break; + } + + ch = 8 * (g_eeGeneral.view / ALTERNATE_VIEW); + + // Screen title + lcdDrawText(LCD_W / 2, 0, reusableBuffer.viewChannels.mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED); + lcdInvertLine(0); + + int16_t limits = 512 * 2; + + // Channels + for (uint8_t line = 0; line < 8; line++) { + LimitData * ld = limitAddress(ch); + const uint8_t y = 9 + line * 7; + const int32_t val = reusableBuffer.viewChannels.mixersView ? ex_chans[ch] : channelOutputs[ch]; + const uint8_t lenLabel = ZLEN(g_model.limitData[ch].name); + + // Channel name if present, number if not + if (lenLabel > 0) { + if (lenLabel > 4) + reusableBuffer.viewChannels.longNames = true; + lcdDrawSizedText(CHANNEL_NAME_OFFSET, y, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), ZCHAR | SMLSIZE); + } + else { + putsChn(CHANNEL_NAME_OFFSET, y, ch + 1, SMLSIZE); + } + + // Value +#if defined(PPM_UNIT_US) + lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, PPM_CH_CENTER(ch) + val / 2, TINSIZE | RIGHT); +#elif defined(PPM_UNIT_PERCENT_PREC1) + lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val), PREC1 | TINSIZE | RIGHT); +#else + lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val) / 10, TINSIZE | RIGHT); +#endif + + // Gauge + drawGauge(CHANNEL_GAUGE_OFFSET, y, CHANNEL_BAR_WIDTH, 6, val, limits); + + if (!reusableBuffer.viewChannels.mixersView) { + // Properties +#if defined(OVERRIDE_CHANNEL_FUNCTION) + if (safetyCh[ch] != OVERRIDE_CHANNEL_UNDEFINED) + lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "OVR", TINSIZE); + else +#endif + if (ld && ld->revert) { + lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "INV", TINSIZE); + } + } + + ++ch; + } + + reusableBuffer.viewChannels.longNames = newLongNames; +} + +void menuChannelsView(event_t event) +{ + switch (event) { case EVT_KEY_BREAK(KEY_EXIT): popMenu(); break; - case EVT_KEY_FIRST(KEY_RIGHT): - case EVT_KEY_FIRST(KEY_LEFT): - reusableBuffer.viewChannels.secondPage = !reusableBuffer.viewChannels.secondPage; + case EVT_KEY_NEXT_PAGE: + g_eeGeneral.view = (g_eeGeneral.view + (4 * ALTERNATE_VIEW) + ALTERNATE_VIEW) % (4 * ALTERNATE_VIEW); + break; + + case EVT_KEY_PREVIOUS_PAGE: + g_eeGeneral.view = (g_eeGeneral.view + (4 * ALTERNATE_VIEW) - ALTERNATE_VIEW) % (4 * ALTERNATE_VIEW); break; case EVT_KEY_FIRST(KEY_ENTER): @@ -45,67 +134,5 @@ void menuChannelsView(event_t event) break; } - if (reusableBuffer.viewChannels.secondPage) - ch = 16; - else - ch = 0; - - if (reusableBuffer.viewChannels.mixersView) { - lcdDrawTextAlignedCenter(0, TR_MIXERS_MONITOR); - } - else { - lcdDrawTextAlignedCenter(0, TR_CHANNELS_MONITOR); - } - - lcdInvertLine(0); - - // Column separator - lcdDrawSolidVerticalLine(LCD_W/2, FH, LCD_H-FH); - - for (uint8_t col=0; col<2; col++) { - - uint8_t x = col*LCD_W/2+1; - - // Channels - for (uint8_t line=0; line<8; line++) { - uint8_t y = 9+line*7; - int32_t val = (reusableBuffer.viewChannels.mixersView) ? ex_chans[ch] : channelOutputs[ch]; - uint8_t ofs = (col ? 0 : 1); - - // Channel name if present, number if not - uint8_t lenLabel = ZLEN(g_model.limitData[ch].name); - if (lenLabel > 4) { - newLongNames = reusableBuffer.viewChannels.longNames = true; - } - - if (lenLabel > 0) - lcdDrawSizedText(x+1-ofs, y, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), ZCHAR | SMLSIZE); - else - putsChn(x+1-ofs, y, ch+1, SMLSIZE); - - // Value -#if defined(PPM_UNIT_US) - uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, PPM_CH_CENTER(ch)+val/2, TINSIZE|RIGHT); -#elif defined(PPM_UNIT_PERCENT_PREC1) - uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 48 : 58); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val), PREC1|TINSIZE|RIGHT); -#else - uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val)/10, TINSIZE|RIGHT); -#endif - - // Gauge -// uint16_t lim = (g_model.extendedLimits ? (512 * (long)LIMIT_EXT_PERCENT / 100) : 512) * 2; -//#ifdef MIXERS_MONITOR -// if (mixersView) -// lim = 512 * 2 * 2; -//#endif - // TODO ? drawGauge(x+LCD_W/2-3-wbar-ofs, y, wbar, 6, val, lim); - - ch++; - } - } - - reusableBuffer.viewChannels.longNames = newLongNames; + menuChannelsViewCommon(event); } diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index b1ab8cd79..b5f067162 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -56,7 +56,7 @@ void drawExternalAntennaAndRSSI() { #if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) if (isModuleXJT(INTERNAL_MODULE) && isExternalAntennaEnabled()) { - lcdDrawText(VBATT_X-1, VBATT_Y+8, "E", TINSIZE); + lcdDrawText(VBATT_X - 1, VBATT_Y + 8, "E", TINSIZE); } #endif @@ -75,10 +75,10 @@ void drawExternalAntennaAndRSSI() void drawPotsBars() { // Optimization by Mike Blandford - for (uint8_t x=LCD_W/2 - (NUM_POTS+NUM_SLIDERS-1) * 5 / 2, i=NUM_STICKS; i TRIM_MAX) { exttrim = true; } - if (val < -(TRIM_LEN+1)*4) { - val = -(TRIM_LEN+1); + if (val < -(TRIM_LEN + 1) * 4) { + val = -(TRIM_LEN + 1); } - else if (val > (TRIM_LEN+1)*4) { - val = TRIM_LEN+1; + else if (val > (TRIM_LEN + 1) * 4) { + val = TRIM_LEN + 1; } else { val /= 4; @@ -129,65 +129,65 @@ void displayTrims(uint8_t phase) if (vert[i]) { ym = 31; - lcdDrawSolidVerticalLine(xm, ym-TRIM_LEN, TRIM_LEN*2); - if (i!=2 || !g_model.thrTrim) { - lcdDrawSolidVerticalLine(xm-1, ym-1, 3); - lcdDrawSolidVerticalLine(xm+1, ym-1, 3); + lcdDrawSolidVerticalLine(xm, ym - TRIM_LEN, TRIM_LEN * 2); + if (i != 2 || !g_model.thrTrim) { + lcdDrawSolidVerticalLine(xm - 1, ym - 1, 3); + lcdDrawSolidVerticalLine(xm + 1, ym - 1, 3); } ym -= val; - lcdDrawFilledRect(xm-3, ym-3, 7, 7, SOLID, att|ERASE); + lcdDrawFilledRect(xm - 3, ym - 3, 7, 7, SOLID, att | ERASE); if (dir >= 0) { - lcdDrawSolidHorizontalLine(xm-1, ym-1, 3); + lcdDrawSolidHorizontalLine(xm - 1, ym - 1, 3); } if (dir <= 0) { - lcdDrawSolidHorizontalLine(xm-1, ym+1, 3); + lcdDrawSolidHorizontalLine(xm - 1, ym + 1, 3); } if (exttrim) { - lcdDrawSolidHorizontalLine(xm-1, ym, 3); + lcdDrawSolidHorizontalLine(xm - 1, ym, 3); } if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && dir != 0) { - if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? 12 : 40, xm-2, -abs(dir), TINSIZE|VERTICAL); + if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1 << i)))) { + lcdDrawNumber(dir > 0 ? 12 : 40, xm - 2, -abs(dir), TINSIZE | VERTICAL); } } } else { ym = 60; - lcdDrawSolidHorizontalLine(xm-TRIM_LEN, ym, TRIM_LEN*2); - lcdDrawSolidHorizontalLine(xm-1, ym-1, 3); - lcdDrawSolidHorizontalLine(xm-1, ym+1, 3); + lcdDrawSolidHorizontalLine(xm - TRIM_LEN, ym, TRIM_LEN * 2); + lcdDrawSolidHorizontalLine(xm - 1, ym - 1, 3); + lcdDrawSolidHorizontalLine(xm - 1, ym + 1, 3); xm += val; - lcdDrawFilledRect(xm-3, ym-3, 7, 7, SOLID, att|ERASE); + lcdDrawFilledRect(xm - 3, ym - 3, 7, 7, SOLID, att | ERASE); if (dir >= 0) { - lcdDrawSolidVerticalLine(xm+1, ym-1, 3); + lcdDrawSolidVerticalLine(xm + 1, ym - 1, 3); } if (dir <= 0) { - lcdDrawSolidVerticalLine(xm-1, ym-1, 3); + lcdDrawSolidVerticalLine(xm - 1, ym - 1, 3); } if (exttrim) { - lcdDrawSolidVerticalLine(xm, ym-1, 3); + lcdDrawSolidVerticalLine(xm, ym - 1, 3); } if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && dir != 0) { - if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? TRIM_LH_POS : TRIM_LH_NEG) : (dir>0 ? TRIM_RH_POS : TRIM_RH_NEG)), ym-2, -abs(dir), TINSIZE); + if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1 << i)))) { + lcdDrawNumber((stickIndex == 0 ? (dir > 0 ? TRIM_LH_POS : TRIM_LH_NEG) : (dir > 0 ? TRIM_RH_POS : TRIM_RH_NEG)), ym - 2, -abs(dir), TINSIZE); } } } - lcdDrawSquare(xm-3, ym-3, 7, att); + lcdDrawSquare(xm - 3, ym - 3, 7, att); } } void displayBattVoltage() { #if defined(BATTGRAPH) - putsVBat(VBATT_X-8, VBATT_Y+1, RIGHT); - lcdDrawSolidFilledRect(VBATT_X-25, VBATT_Y+9, 21, 5); - lcdDrawSolidVerticalLine(VBATT_X-4, VBATT_Y+10, 3); + putsVBat(VBATT_X - 8, VBATT_Y + 1, RIGHT); + lcdDrawSolidFilledRect(VBATT_X - 25, VBATT_Y + 9, 21, 5); + lcdDrawSolidVerticalLine(VBATT_X - 4, VBATT_Y + 10, 3); uint8_t count = GET_TXBATT_BARS(20); - for (uint8_t i=0; i= 0) { lcdDrawSolidHorizontalLine(x, y, width); - lcdDrawSolidHorizontalLine(x, y+2, width); + lcdDrawSolidHorizontalLine(x, y + 2, width); y += 4; if (val > 0) { lcdDrawSolidHorizontalLine(x, y, width); - lcdDrawSolidHorizontalLine(x, y+2, width); + lcdDrawSolidHorizontalLine(x, y + 2, width); y += 4; } } - lcdDrawChar(width==5 ? x+1 : x, y, 'A'+index, SMLSIZE); + lcdDrawChar(width == 5 ? x + 1 : x, y, 'A' + index, SMLSIZE); y += 7; if (val <= 0) { lcdDrawSolidHorizontalLine(x, y, width); - lcdDrawSolidHorizontalLine(x, y+2, width); + lcdDrawSolidHorizontalLine(x, y + 2, width); if (val < 0) { - lcdDrawSolidHorizontalLine(x, y+4, width); - lcdDrawSolidHorizontalLine(x, y+6, width); + lcdDrawSolidHorizontalLine(x, y + 4, width); + lcdDrawSolidHorizontalLine(x, y + 6, width); } } } @@ -320,25 +320,20 @@ void menuMainView(event_t event) killEvents(KEY_DOWN); break; - /* TODO if timer2 is OFF, it's possible to use this timer2 as in er9x... - case EVT_KEY_BREAK(KEY_MENU): - if (view_base == VIEW_TIMER2) { - Timer2_running = !Timer2_running; - AUDIO_KEY_PRESS(); - } - break; - */ - + /* TODO if timer2 is OFF, it's possible to use this timer2 as in er9x... + case EVT_KEY_BREAK(KEY_MENU): + if (view_base == VIEW_TIMER2) { + Timer2_running = !Timer2_running; + AUDIO_KEY_PRESS(); + } + break; + */ case EVT_KEY_NEXT_PAGE: case EVT_KEY_PREVIOUS_PAGE: - if (view_base <= VIEW_INPUTS) { - if (view_base == VIEW_INPUTS) - g_eeGeneral.view ^= ALTERNATE_VIEW; - else - g_eeGeneral.view = (g_eeGeneral.view + (4*ALTERNATE_VIEW) + ((event==EVT_KEY_PREVIOUS_PAGE) ? -ALTERNATE_VIEW : ALTERNATE_VIEW)) % (4*ALTERNATE_VIEW); - storageDirty(EE_GENERAL); - AUDIO_KEY_PRESS(); - } + if (view_base == VIEW_INPUTS) + g_eeGeneral.view ^= ALTERNATE_VIEW; + else + g_eeGeneral.view = (g_eeGeneral.view + (4*ALTERNATE_VIEW) + ((event==EVT_KEY_PREVIOUS_PAGE) ? -ALTERNATE_VIEW : ALTERNATE_VIEW)) % (4*ALTERNATE_VIEW); break; case EVT_KEY_CONTEXT_MENU: @@ -379,12 +374,13 @@ void menuMainView(event_t event) case EVT_KEY_PREVIOUS_VIEW: case EVT_KEY_NEXT_VIEW: // TODO try to split those 2 cases on 9X - g_eeGeneral.view = (event == EVT_KEY_PREVIOUS_VIEW ? (view_base == VIEW_COUNT-1 ? 0 : view_base+1) : (view_base == 0 ? VIEW_COUNT-1 : view_base-1)); + g_eeGeneral.view = (event == EVT_KEY_PREVIOUS_VIEW ? (view_base == VIEW_COUNT - 1 ? 0 : view_base + 1) : (view_base == 0 ? VIEW_COUNT - 1 : view_base - + 1)); storageDirty(EE_GENERAL); break; #else case EVT_KEY_NEXT_VIEW: - g_eeGeneral.view = (view_base == 0 ? VIEW_COUNT-1 : view_base-1); + g_eeGeneral.view = (view_base == 0 ? VIEW_COUNT - 1 : view_base - 1); storageDirty(EE_GENERAL); break; #endif @@ -410,53 +406,34 @@ void menuMainView(event_t event) break; } - { - // Flight Mode Name - uint8_t mode = mixerCurrentFlightMode; - lcdDrawSizedText(PHASE_X, PHASE_Y, g_model.flightModeData[mode].name, sizeof(g_model.flightModeData[mode].name), ZCHAR|PHASE_FLAGS); + switch (view_base) { + case VIEW_CHAN_MONITOR: + menuChannelsViewCommon(event); + break; - // Model Name - putsModelName(MODELNAME_X, MODELNAME_Y, g_model.header.name, g_eeGeneral.currModel, BIGSIZE); + case VIEW_OUTPUTS_VALUES: + case VIEW_OUTPUTS_BARS: + // scroll bar + lcdDrawHorizontalLine(38, 34, 54, DOTTED); + lcdDrawSolidHorizontalLine(38 + (g_eeGeneral.view / ALTERNATE_VIEW) * 13, 34, 13, SOLID); + for (uint8_t i=0; i<8; i++) { + uint8_t x0, y0; + uint8_t chan = 8 * (g_eeGeneral.view / ALTERNATE_VIEW) + i; + int16_t val = channelOutputs[chan]; - // Main Voltage (or alarm if any) - displayVoltageOrAlarm(); - - // Timer 1 - drawTimerWithMode(125, 2*FH, 0, RIGHT | DBLSIZE); - - // Trims sliders - displayTrims(mode); - - // RSSI gauge / external antenna - drawExternalAntennaAndRSSI(); - } - - if (view_base < VIEW_INPUTS) { - // scroll bar - lcdDrawHorizontalLine(38, 34, 54, DOTTED); - lcdDrawSolidHorizontalLine(38 + (g_eeGeneral.view / ALTERNATE_VIEW) * 13, 34, 13, SOLID); - - for (uint8_t i=0; i<8; i++) { - uint8_t x0,y0; - uint8_t chan = 8*(g_eeGeneral.view / ALTERNATE_VIEW) + i; - - int16_t val = channelOutputs[chan]; - - switch (view_base) { - case VIEW_OUTPUTS_VALUES: - x0 = (i%4*9+3)*FW/2; - y0 = i/4*FH+40; + if (view_base == VIEW_OUTPUTS_VALUES) { + x0 = (i % 4 * 9 + 3) * FW / 2; + y0 = i / 4 * FH + 40; #if defined(PPM_UNIT_US) - lcdDrawNumber(x0+4*FW , y0, PPM_CH_CENTER(chan)+val/2, RIGHT); + lcdDrawNumber(x0 + 4 * FW, y0, PPM_CH_CENTER(chan) + val / 2, RIGHT); #elif defined(PPM_UNIT_PERCENT_PREC1) - lcdDrawNumber(x0+4*FW , y0, calcRESXto1000(val), RIGHT|PREC1); + lcdDrawNumber(x0 + 4 * FW, y0, calcRESXto1000(val), RIGHT | PREC1); #else lcdDrawNumber(x0+4*FW , y0, calcRESXto1000(val)/10, RIGHT); // G: Don't like the decimal part* #endif - break; - - case VIEW_OUTPUTS_BARS: -#define WBAR2 (50/2) + } + else { + constexpr coord_t WBAR2 = (50/2); x0 = i<4 ? LCD_W/4+2 : LCD_W*3/4-2; y0 = 38+(i%4)*5; @@ -473,99 +450,121 @@ void menuMainView(event_t event) x0 -= len; lcdDrawSolidHorizontalLine(x0, y0+1, len); lcdDrawSolidHorizontalLine(x0, y0-1, len); - break; + } } - } - } - else if (view_base == VIEW_INPUTS) { - if (view == VIEW_INPUTS) { - // Sticks + Pots - doMainScreenGraphics(); + break; - // Switches + case VIEW_TIMER2: + drawTimerWithMode(87, 5 * FH, 1, RIGHT | DBLSIZE); + break; + + case VIEW_INPUTS: + if (view == VIEW_INPUTS) { + // Sticks + Pots + doMainScreenGraphics(); + + // Switches #if defined(PCBX9LITES) - static const uint8_t x[NUM_SWITCHES-2] = {2*FW-2, 2*FW-2, 17*FW+1, 2*FW-2, 17*FW+1}; - static const uint8_t y[NUM_SWITCHES-2] = {4*FH+1, 5*FH+1, 5*FH+1, 6*FH+1, 6*FH+1}; - for (int i=0; i= switches/2) { - x = 16*FW+1; - y -= (switches/2)*FH; + uint8_t switches = min(NUM_SWITCHES, 6); + for (int i = 0; i < switches; ++i) { + if (SWITCH_EXISTS(i)) { + uint8_t x = 2 * FW - 2, y = 4 * FH + i * FH + 1; + if (i >= switches / 2) { + x = 16 * FW + 1; + y -= (switches / 2) * FH; + } + getvalue_t val = getValue(MIXSRC_FIRST_SWITCH + i); + getvalue_t sw = ((val < 0) ? 3 * i + 1 : ((val == 0) ? 3 * i + 2 : 3 * i + 3)); + drawSwitch(x, y, sw, 0, false); } - getvalue_t val = getValue(MIXSRC_FIRST_SWITCH+i); - getvalue_t sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3)); - drawSwitch(x, y, sw, 0, false); } - } #else - // The ID0 3-POS switch is merged with the TRN switch - for (uint8_t i=SWSRC_THR; i<=SWSRC_TRN; i++) { - int8_t sw = (i == SWSRC_TRN ? (switchState(SW_ID0) ? SWSRC_ID0 : (switchState(SW_ID1) ? SWSRC_ID1 : SWSRC_ID2)) : i); - uint8_t x = 2*FW-2, y = i*FH+1; - if (i >= SWSRC_AIL) { - x = 17*FW-1; - y -= 3*FH; + // The ID0 3-POS switch is merged with the TRN switch + for (uint8_t i=SWSRC_THR; i<=SWSRC_TRN; i++) { + int8_t sw = (i == SWSRC_TRN ? (switchState(SW_ID0) ? SWSRC_ID0 : (switchState(SW_ID1) ? SWSRC_ID1 : SWSRC_ID2)) : i); + uint8_t x = 2*FW-2, y = i*FH+1; + if (i >= SWSRC_AIL) { + x = 17*FW-1; + y -= 3*FH; + } + drawSwitch(x, y, sw, getSwitch(i) ? INVERS : 0, false); } - drawSwitch(x, y, sw, getSwitch(i) ? INVERS : 0, false); - } #endif - } - else { - // Logical Switches - uint8_t index = 0; - uint8_t y = LCD_H-20; - for (uint8_t line=0; line<2; line++) { - for (uint8_t column=0; column0) ? x+w/2 : x+1+w/2-len; + for (coord_t i=h-2; i>0; i--) { + lcdDrawSolidHorizontalLine(x0, y+i, len); + } +} + void title(const char * s) { lcdDrawText(0, 0, s, INVERS); diff --git a/radio/src/gui/212x64/lcd.h b/radio/src/gui/212x64/lcd.h index c4e427771..8fdafdfd4 100644 --- a/radio/src/gui/212x64/lcd.h +++ b/radio/src/gui/212x64/lcd.h @@ -111,8 +111,6 @@ void lcdDrawText(coord_t x, coord_t y, const char * s); void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len); void lcdDrawTextAlignedLeft(coord_t y, const char * s); -#define lcdDrawTextAlignedCenter(y, s) lcdDrawText((LCD_W-sizeof(s)*FW+FW+1)/2, y, s) - void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags mode=0); void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode, uint8_t len); void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode=0); diff --git a/radio/src/gui/212x64/model_failsafe.cpp b/radio/src/gui/212x64/model_failsafe.cpp index 939e7927a..85ab66805 100644 --- a/radio/src/gui/212x64/model_failsafe.cpp +++ b/radio/src/gui/212x64/model_failsafe.cpp @@ -80,7 +80,7 @@ void menuModelFailsafe(event_t event) } } - lcdDrawTextAlignedCenter(0, TR_FAILSAFESET); + lcdDrawText(LCD_W / 2, 0, STR_FAILSAFESET, CENTERED); lcdInvertLine(0); coord_t x = colW; diff --git a/radio/src/gui/212x64/radio_calibration.cpp b/radio/src/gui/212x64/radio_calibration.cpp index bf4c829c3..6ec060e6f 100644 --- a/radio/src/gui/212x64/radio_calibration.cpp +++ b/radio/src/gui/212x64/radio_calibration.cpp @@ -202,7 +202,7 @@ void menuFirstCalib(event_t event) chainMenu(menuMainView); } else { - lcdDrawTextAlignedCenter(0*FH, TR_MENUCALIBRATION); + lcdDrawText(LCD_W / 2, 0, STR_MENUCALIBRATION, CENTERED); lcdInvertLine(0); menuCommonCalib(event); } diff --git a/radio/src/gui/212x64/view_channels.cpp b/radio/src/gui/212x64/view_channels.cpp index 4b34f7f4f..e00b3e9d0 100644 --- a/radio/src/gui/212x64/view_channels.cpp +++ b/radio/src/gui/212x64/view_channels.cpp @@ -61,11 +61,7 @@ void menuChannelsView(event_t event) else if (g_model.extendedLimits) limits *= LIMIT_EXT_PERCENT / 100; - if (reusableBuffer.viewChannels.mixersView) - lcdDrawTextAlignedCenter(0, TR_MIXERS_MONITOR); - else - lcdDrawTextAlignedCenter(0, TR_CHANNELS_MONITOR); - + lcdDrawText(LCD_W / 2, 0, reusableBuffer.viewChannels.mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED); lcdInvertLine(0); // Column separator diff --git a/radio/src/gui/480x272/view_text.cpp b/radio/src/gui/480x272/view_text.cpp index a7969d21f..24a1779db 100644 --- a/radio/src/gui/480x272/view_text.cpp +++ b/radio/src/gui/480x272/view_text.cpp @@ -59,14 +59,6 @@ bool menuTextView(event_t event) lcd->drawTextMaxWidth(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + i * FH, reusableBuffer.viewText.lines[i], 0, LCD_W - 2 * MENUS_MARGIN_LEFT); } -#if 0 - char * title = s_text_file; -#if defined(SIMU) - if (!strncmp(title, "./", 2)) title += 2; -#endif - lcdDrawTextAlignedCenter(MENU_FOOTER_TOP, title, HEADER_COLOR); -#endif - drawVerticalScrollbar(LCD_W-5, 50, 195, menuVerticalOffset, lines_count, NUM_BODY_LINES); return true; diff --git a/radio/src/targets/sky9x/CMakeLists.txt b/radio/src/targets/sky9x/CMakeLists.txt index cb207e10a..0036e3630 100644 --- a/radio/src/targets/sky9x/CMakeLists.txt +++ b/radio/src/targets/sky9x/CMakeLists.txt @@ -71,6 +71,7 @@ set(GUI_SRC radio_diaganas.cpp view_telemetry.cpp view_about.cpp + view_channels.cpp ) if(GVARS) From f100e4375a67ad487ca70438769b985ccd3bd7fd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 10 Mar 2020 17:48:58 +0100 Subject: [PATCH 06/12] Bsongis/sport power line on off (#7435) SmartPort Power --- radio/src/datastructs.h | 4 ++-- radio/src/gui/480x272/radio_hardware.cpp | 20 +++++++++++++++++++ .../src/gui/common/stdlcd/radio_hardware.cpp | 19 +++++++++++++++++- radio/src/io/frsky_firmware_update.cpp | 10 ++++++++++ radio/src/io/multi_firmware_update.cpp | 5 +++++ radio/src/opentx.cpp | 4 ++++ radio/src/targets/horus/board.cpp | 8 ++++++++ radio/src/targets/horus/board.h | 5 +++++ radio/src/targets/simu/simpgmspace.cpp | 4 ++++ radio/src/targets/taranis/board.cpp | 8 ++++++++ radio/src/targets/taranis/board.h | 5 +++++ radio/src/translations.cpp | 2 ++ radio/src/translations.h | 2 ++ radio/src/translations/cz.h.txt | 3 +++ radio/src/translations/de.h.txt | 3 +++ radio/src/translations/en.h.txt | 3 +++ radio/src/translations/es.h.txt | 3 +++ radio/src/translations/fi.h.txt | 3 +++ radio/src/translations/fr.h.txt | 3 +++ radio/src/translations/it.h.txt | 3 +++ radio/src/translations/nl.h.txt | 3 +++ radio/src/translations/pl.h.txt | 3 +++ radio/src/translations/pt.h.txt | 3 +++ radio/src/translations/se.h.txt | 3 +++ 24 files changed, 126 insertions(+), 3 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 9c5e1b652..7a2454034 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -783,7 +783,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t disableRssiPoweroffAlarm:1); NOBACKUP(uint8_t USBMode:2); NOBACKUP(uint8_t jackMode:2); - NOBACKUP(uint8_t spare3:1); + NOBACKUP(uint8_t sportUpdatePower:1); NOBACKUP(char ttsLanguage[2]); NOBACKUP(int8_t beepVolume:4); NOBACKUP(int8_t wavVolume:4); @@ -941,4 +941,4 @@ static inline void check_struct() #undef CHKSIZE } -#endif /* BACKUP */ +#endif /* BACKUP */ \ No newline at end of file diff --git a/radio/src/gui/480x272/radio_hardware.cpp b/radio/src/gui/480x272/radio_hardware.cpp index 96f29cfbb..41f93259b 100644 --- a/radio/src/gui/480x272/radio_hardware.cpp +++ b/radio/src/gui/480x272/radio_hardware.cpp @@ -72,6 +72,9 @@ enum MenuRadioHardwareItems { #endif ITEM_RADIO_HARDWARE_JITTER_FILTER, +#if defined(SPORT_UPDATE_PWR_GPIO) + ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER, +#endif ITEM_RADIO_HARDWARE_DEBUG, ITEM_RADIO_HARDWARE_MAX }; @@ -119,6 +122,12 @@ void onHardwareAntennaSwitchConfirm(const char * result) #define MAX_BAUDRATE_ROW HIDDEN_ROW #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + #define SPORT_POWER_ROWS 0, +#else + #define SPORT_POWER_ROWS +#endif + bool menuRadioHardware(event_t event) { MENU(STR_HARDWARE, RADIO_ICONS, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, { @@ -148,6 +157,7 @@ bool menuRadioHardware(event_t event) AUX_SERIAL_ROW /* aux serial mode */ 0, /* ADC filter */ + SPORT_POWER_ROWS 1, /* Debug */ }); @@ -365,6 +375,16 @@ bool menuRadioHardware(event_t event) break; } +#if defined(SPORT_UPDATE_PWR_GPIO) + case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_SPORT_UPDATE_POWER_MODE); + g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN + 50, y, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event); + if (attr && checkIncDec_Ret) { + SPORT_UPDATE_POWER_INIT(); + } + break; +#endif + case ITEM_RADIO_HARDWARE_DEBUG: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_DEBUG); lcdDrawText(HW_SETTINGS_COLUMN + 50, y, STR_ANALOGS_BTN, menuHorizontalPosition == 0 ? attr : 0); diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index a64489528..e450e1624 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -184,6 +184,9 @@ enum { ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_HARDWARE_RAS, +#if defined(SPORT_UPDATE_PWR_GPIO) + ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER, +#endif ITEM_RADIO_HARDWARE_DEBUG, #if defined(EEPROM_RLC) ITEM_RADIO_BACKUP_EEPROM, @@ -295,6 +298,12 @@ void onHardwareAntennaSwitchConfirm(const char * result) #define HW_SETTINGS_COLUMN2 (HW_SETTINGS_COLUMN1 + 5*FW) #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + #define SPORT_POWER_ROWS 0, +#else + #define SPORT_POWER_ROWS +#endif + #if defined(EEPROM_RLC) void onFactoryResetConfirm(const char * result) { @@ -334,7 +343,7 @@ void menuRadioHardware(event_t event) 0 /* ADC filter */, READONLY_ROW /* RAS */, - + SPORT_POWER_ROWS 1 /* debugs */, 0, @@ -631,6 +640,14 @@ void menuRadioHardware(event_t event) else lcdDrawText(lcdNextPos, y, "---"); break; +#if defined(SPORT_UPDATE_PWR_GPIO) + case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER: + g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN2, y, STR_SPORT_UPDATE_POWER_MODE, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event); + if (attr && checkIncDec_Ret) { + SPORT_UPDATE_POWER_INIT(); + } + break; +#endif case ITEM_RADIO_HARDWARE_DEBUG: lcdDrawTextAlignedLeft(y, STR_DEBUG); diff --git a/radio/src/io/frsky_firmware_update.cpp b/radio/src/io/frsky_firmware_update.cpp index 1dca3b5a2..7cc7135b4 100644 --- a/radio/src/io/frsky_firmware_update.cpp +++ b/radio/src/io/frsky_firmware_update.cpp @@ -487,6 +487,7 @@ const char * FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); drawProgressScreen(getBasename(filename), STR_DEVICE_RESET, 0, 0); @@ -531,6 +532,10 @@ const char * FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + state = SPORT_IDLE; resumePulses(); @@ -752,6 +757,7 @@ const char * FrskyChipFirmwareUpdate::flashFirmware(const char * filename, bool uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); if (wait) { @@ -791,6 +797,10 @@ const char * FrskyChipFirmwareUpdate::flashFirmware(const char * filename, bool setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + resumePulses(); return result; diff --git a/radio/src/io/multi_firmware_update.cpp b/radio/src/io/multi_firmware_update.cpp index f7d8d238e..82ad5d81c 100644 --- a/radio/src/io/multi_firmware_update.cpp +++ b/radio/src/io/multi_firmware_update.cpp @@ -528,6 +528,7 @@ bool multiFlashFirmware(uint8_t moduleIdx, const char * filename) uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); drawProgressScreen(getBasename(filename), STR_DEVICE_RESET, 0, 0); @@ -575,6 +576,10 @@ bool multiFlashFirmware(uint8_t moduleIdx, const char * filename) setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + resumePulses(); return result == nullptr; diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 258eb74f8..e6a20db0b 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1966,6 +1966,10 @@ void opentxInit() btInit(); #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + SPORT_UPDATE_POWER_INIT(); +#endif + #if defined(COLORLCD) loadTheme(); loadFontCache(); diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 3e8ad4752..61a429a70 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -74,6 +74,14 @@ void sportUpdatePowerOff() { GPIO_ResetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); } + +void sportUpdatePowerInit() +{ + if (g_eeGeneral.sportUpdatePower == 1) + sportUpdatePowerOn(); + else + sportUpdatePowerOff(); +} #endif void boardInit() diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 09554c063..cdc8fb084 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -599,11 +599,16 @@ void telemetryPortInvertedInit(uint32_t baudrate); #if HAS_SPORT_UPDATE_CONNECTOR() void sportUpdatePowerOn(); void sportUpdatePowerOff(); +void sportUpdatePowerInit(); #define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn() #define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff() +#define SPORT_UPDATE_POWER_INIT() sportUpdatePowerInit() +#define IS_SPORT_UPDATE_POWER_ON() (GPIO_ReadInputDataBit(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN) == Bit_SET) #else #define SPORT_UPDATE_POWER_ON() #define SPORT_UPDATE_POWER_OFF() +#define SPORT_UPDATE_POWER_INIT() +#define IS_SPORT_UPDATE_POWER_ON() (false) #endif // Second serial port driver diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 4e1cdf535..ee4bcdb23 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -437,6 +437,10 @@ void sportUpdatePowerOff() { } +void sportUpdatePowerInit() +{ +} + void boardInit() { } diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 3cd6742f3..521ab1d9b 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -62,6 +62,14 @@ void sportUpdatePowerOff() { GPIO_SPORT_UPDATE_PWR_GPIO_OFF(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); } + +void sportUpdatePowerInit() +{ + if (g_eeGeneral.sportUpdatePower == 1) + sportUpdatePowerOn(); + else + sportUpdatePowerOff(); +} #endif void boardInit() diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index e978d8277..e735c8d33 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -720,12 +720,17 @@ void telemetryPortInvertedInit(uint32_t baudrate); void sportUpdateInit(); void sportUpdatePowerOn(); void sportUpdatePowerOff(); +void sportUpdatePowerInit(); #define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn() #define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff() +#define SPORT_UPDATE_POWER_INIT() sportUpdatePowerInit() +#define IS_SPORT_UPDATE_POWER_ON() (GPIO_ReadInputDataBit(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN) == Bit_SET) #else #define sportUpdateInit() #define SPORT_UPDATE_POWER_ON() #define SPORT_UPDATE_POWER_OFF() +#define SPORT_UPDATE_POWER_INIT() +#define IS_SPORT_UPDATE_POWER_ON() (false) #endif // Audio driver diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 1dfb9a692..1cd1c98a8 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -78,6 +78,7 @@ ISTR(SWTYPES); ISTR(POTTYPES); ISTR(SLIDERTYPES); ISTR(ANTENNA_MODES); +ISTR(SPORT_UPDATE_POWER_MODES); #if defined(PCBSKY9X) && defined(REVX) ISTR(VOUTPUT_TYPE); @@ -580,6 +581,7 @@ const char STR_RTC_CHECK[] = TR_RTC_CHECK; const char STR_EXIT[] = TR_EXIT; const char STR_MODULE_RANGE[] = TR_MODULE_RANGE; const char STR_RECEIVER_OPTIONS[] = TR_RECEIVER_OPTIONS; +const char STR_SPORT_UPDATE_POWER_MODE[] = TR_SPORT_UPDATE_POWER_MODE; #if defined(PCBHORUS) const char STR_ASSIGN_SPLASH[] = TR_ASSIGN_SPLASH; diff --git a/radio/src/translations.h b/radio/src/translations.h index df0cfd67d..e11ad3197 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -863,6 +863,8 @@ extern const char STR_MENU_OTHER[]; extern const char STR_MENU_INVERT[]; extern const char STR_JITTER_FILTER[]; extern const char STR_RTC_CHECK[]; +extern const char STR_SPORT_UPDATE_POWER_MODE[]; +extern const char STR_SPORT_UPDATE_POWER_MODES[]; #if MENUS_LOCK == 1 extern const char STR_UNLOCKED[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index cdcf5ae13..e0f453bb8 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -980,6 +980,9 @@ #define STR_FACTORYRESET "Tovární reset" #define TR_CONFIRMRESET TR("Smazat vše ?", "Smazat modely a nastavení?") #define TR_TOO_MANY_LUA_SCRIPTS "Příliš mnoho skriptů!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Název" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 24c37b13e..ae3f50756 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -986,6 +986,9 @@ #define STR_FACTORYRESET TR("Werksreset", "Auf Werkseinstellungen") #define TR_CONFIRMRESET TR("Alles löschen? ","ALLE Modelle+Einst. löschen?") #define TR_TOO_MANY_LUA_SCRIPTS "Zu viele Skripte!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis specific column headers #define TR_PHASES_HEADERS_NAME "Name " diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index f37006215..d50b5a2cd 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -985,6 +985,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET TR("Erase ALL", "Erase ALL models and settings?") #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Name" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index c1ae1f49c..ab7c4b98c 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1005,6 +1005,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 839269089..19f24ff02 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -999,6 +999,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 2e6eb35df..3dcde7dcd 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1009,6 +1009,9 @@ #endif #define TR_CONFIRMRESET TR("Effacer TOUT?","Effacer TOUS modèles/réglages?") #define TR_TOO_MANY_LUA_SCRIPTS "Trop de scripts lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Nom" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 2125f0189..4644bf056 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1001,6 +1001,9 @@ #define STR_FACTORYRESET "Inizializza dati" #define TR_CONFIRMRESET "Resettare TUTTI i dati?" #define TR_TOO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 6e3388f4c..50d624d2c 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -993,6 +993,9 @@ #endif #define TR_CONFIRMRESET TR("Wis Alles?", "Wis ALLE modellen en instellingen?") #define TR_TOO_MANY_LUA_SCRIPTS "Te veel Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 2fe3c84a3..1034c98d9 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1000,6 +1000,9 @@ #define STR_FACTORYRESET "Ustaw.Fabrycz" #define TR_CONFIRMRESET "WYkasować wszytkie modele? " #define TR_TOO_MANY_LUA_SCRIPTS "Za dużo skryptów Lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 33b3568e2..6b3aaaf0e 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -990,6 +990,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 8bbb15270..663d90be3 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1000,6 +1000,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "För många Lua-scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers From e4f8735c7ab08c5c014ccbecd32d076cc7367c35 Mon Sep 17 00:00:00 2001 From: Offer Shmuely Date: Tue, 10 Mar 2020 19:02:11 +0200 Subject: [PATCH 07/12] Shmuely/horus batt widget reset telemetry (#7407) Batt widget reset telemetry --- radio/sdcard/horus/WIDGETS/BattCheck/main.lua | 53 ++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/radio/sdcard/horus/WIDGETS/BattCheck/main.lua b/radio/sdcard/horus/WIDGETS/BattCheck/main.lua index abe3460d5..215d589ac 100755 --- a/radio/sdcard/horus/WIDGETS/BattCheck/main.lua +++ b/radio/sdcard/horus/WIDGETS/BattCheck/main.lua @@ -36,6 +36,8 @@ local function create(zone, options) counter = 0, shadowed = 0, + telemResetCount = 0, + telemResetLowestMinRSSI = 101, no_telem_blink = 0, isDataAvailable = 0, cellDataLive = {0,0,0,0,0,0}, @@ -76,14 +78,47 @@ local function update(wgt, options) end --- A quick and dirty check for empty table -local function isEmpty(self) - for _, _ in pairs(self) do - return false - end - return true + +-- clear old telemetry data upon reset event +local function onTelemetryResetEvent(wgt) + wgt.telemResetCount = wgt.telemResetCount + 1 + + wgt.cellDataLive = {0,0,0,0,0,0} + wgt.cellDataHistoryLowest = {5,5,5,5,5,5} + wgt.cellDataHistoryCellLowest = 5 end + +-- workaround to detect telemetry-reset event, until a proper implementation on the lua interface will be created +-- this workaround assume that: +-- RSSI- is always going down +-- RSSI- is reset on the C++ side when a telemetry-reset is pressed by user +-- widget is calling this func on each refresh/background +-- on event detection, the function onTelemetryResetEvent() will be trigger +-- +local function detectResetEvent(wgt) + + local currMinRSSI = getValue('RSSI-') + if (currMinRSSI == nil) then return + end + if (currMinRSSI == wgt.telemResetLowestMinRSSI) then return end + + if (currMinRSSI < wgt.telemResetLowestMinRSSI) then + -- rssi just got lower, record it + wgt.telemResetLowestMinRSSI = currMinRSSI + return + end + + + -- reset telemetry detected + wgt.telemResetLowestMinRSSI = 101 + + -- notify event + onTelemetryResetEvent(wgt) + +end + + --- This function return the percentage remaining in a single Lipo cel local function getCellPercent(cellValue) if cellValue == nil then @@ -293,13 +328,14 @@ local function refreshZoneMedium(wgt) for i = 1, wgt.cellCount, 1 do local cellY = wgt.zone.y + (i-1)* (cellH -1) - -- fill current value + -- fill current cell lcd.setColor(CUSTOM_COLOR, getRangeColor(wgt.cellDataLive[i], wgt.cellMax, wgt.cellMax - 0.2)) --lcd.drawFilledRectangle(wgt.zone.x + cellX , cellY, 58, cellH, CUSTOM_COLOR) local percentCurrent = getCellPercent(wgt.cellDataLive[i]) local percentMin = getCellPercent(wgt.cellDataHistoryLowest[i]) lcd.drawFilledRectangle(wgt.zone.x + cellX , cellY, cellW * percentCurrent / 100, cellH, CUSTOM_COLOR) + -- fill min lcd.setColor(CUSTOM_COLOR, getRangeColor(wgt.cellDataHistoryLowest[i], wgt.cellMax, wgt.cellMax - 0.2)) lcd.drawFilledRectangle(wgt.zone.x + cellX + ((percentCurrent - percentMin) / 100) , cellY, cellW - (cellW * (percentCurrent - percentMin) / 100), cellH, CUSTOM_COLOR) @@ -413,6 +449,8 @@ end local function background(wgt) if (wgt == nil) then return end + detectResetEvent(wgt) + calculateBatteryData(wgt) end @@ -430,6 +468,7 @@ local function refresh(wgt) wgt.shadowed = 0 end + detectResetEvent(wgt) calculateBatteryData(wgt) From cc585950c33db0eb7f557111eb097a1f07b80ae6 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 10 Mar 2020 18:15:03 +0100 Subject: [PATCH 08/12] Review sensor physID handling (#7374) Review sensor physID handling --- radio/src/gui/128x64/model_telemetry_sensor.cpp | 2 +- radio/src/targets/simu/opentxsimulator.cpp | 2 +- radio/src/telemetry/frsky_sport.cpp | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/128x64/model_telemetry_sensor.cpp b/radio/src/gui/128x64/model_telemetry_sensor.cpp index d8a63079e..301b956c1 100644 --- a/radio/src/gui/128x64/model_telemetry_sensor.cpp +++ b/radio/src/gui/128x64/model_telemetry_sensor.cpp @@ -104,7 +104,7 @@ void menuModelSensor(event_t event) if (sensor->type == TELEM_TYPE_CUSTOM) { lcdDrawTextAlignedLeft(y, STR_ID); lcdDrawHexNumber(SENSOR_2ND_COLUMN, y, sensor->id, LEFT|(menuHorizontalPosition==0 ? attr : 0)); - lcdDrawHexChar(SENSOR_3RD_COLUMN, y, (sensor->instance & 0x1F) + 1, LEFT|(menuHorizontalPosition==1 ? attr : 0)); + lcdDrawNumber(SENSOR_3RD_COLUMN, y, (sensor->instance & 0x1F) + 1, LEFT|(menuHorizontalPosition==1 ? attr : 0)); if (attr && s_editMode > 0) { switch (menuHorizontalPosition) { case 0: diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index be01f250e..edc435c12 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -326,7 +326,7 @@ uint8_t OpenTxSimulator::getSensorInstance(uint16_t id, uint8_t defaultValue) if (isTelemetryFieldAvailable(i)) { TelemetrySensor * sensor = &g_model.telemetrySensors[i]; if (sensor->id == id) { - return sensor->instance; + return sensor->frskyInstance.physID + 1; } } } diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index d67da2559..299553050 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -168,7 +168,13 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe if (primId == DATA_FRAME) { uint8_t originMask; if (origin == TELEMETRY_ENDPOINT_SPORT) { +#if defined(SIMU) && defined(INTERNAL_MODULE_PXX2) + // When running simu on ACCESS radio, we set the origin as internal module + origin = 0; + originMask = 0x01; +#else originMask = 0x04; +#endif } else { uint8_t moduleIndex = (origin >> 2); From b37ca0d32aedab22fbde26d91bc5d0db2caea04f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 16 Mar 2020 10:36:13 +0100 Subject: [PATCH 09/12] Update CREDITS.txt --- CREDITS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CREDITS.txt b/CREDITS.txt index a710e2e02..f4c1799f1 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1705,3 +1705,4 @@ Frank Barbas Scott McCoy Fabrice Debonnet James Laver +Kevin Bowens From 02787671f829b0b165707327d1cf5b1ee6ed9f83 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 16 Mar 2020 12:34:51 +0100 Subject: [PATCH 10/12] Fix crash in RADIO views if compiled without LUA --- radio/src/gui/480x272/menu_radio.cpp | 2 +- radio/src/gui/480x272/menus.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/480x272/menu_radio.cpp b/radio/src/gui/480x272/menu_radio.cpp index dd5368bc2..dcb7e9dea 100644 --- a/radio/src/gui/480x272/menu_radio.cpp +++ b/radio/src/gui/480x272/menu_radio.cpp @@ -21,7 +21,7 @@ #include "opentx.h" const MenuHandlerFunc menuTabGeneral[MENU_RADIO_PAGES_COUNT] = { -#if defined(LUA) || defined(PXX2) +#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) menuRadioTools, #endif menuRadioSdManager, diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index cefa95378..f0623e164 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -203,7 +203,7 @@ enum EnumTabRadio { const uint8_t RADIO_ICONS[MENU_RADIO_PAGES_COUNT + 1] = { ICON_RADIO, -#if defined(LUA) || defined(PXX2) +#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) ICON_RADIO_TOOLS, #endif ICON_RADIO_SD_MANAGER, From 9999187dbf792c697a65c8162806b84b322a43f4 Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 16 Mar 2020 14:50:21 +0100 Subject: [PATCH 11/12] Radio tools related fixes (#7444) Radio tools related fixes --- radio/src/gui/128x64/menus.h | 4 ++-- radio/src/gui/128x64/view_main.cpp | 2 +- radio/src/gui/212x64/menu_radio.cpp | 2 +- radio/src/gui/212x64/view_main.cpp | 2 +- radio/src/gui/480x272/menu_radio.cpp | 2 +- radio/src/gui/480x272/menus.cpp | 2 ++ radio/src/gui/480x272/menus.h | 4 ++-- radio/src/opentx.h | 4 ++++ 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/128x64/menus.h b/radio/src/gui/128x64/menus.h index daa3f1885..a1e980874 100644 --- a/radio/src/gui/128x64/menus.h +++ b/radio/src/gui/128x64/menus.h @@ -50,7 +50,7 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF enum MenuRadioIndexes { -#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) +#if defined(RADIO_TOOLS) MENU_RADIO_TOOLS, #endif CASE_SDCARD(MENU_RADIO_SD_MANAGER) @@ -76,7 +76,7 @@ void menuRadioPowerMeter(event_t event); void menuRadioCalibration(event_t event); static const MenuHandlerFunc menuTabGeneral[MENU_RADIO_PAGES_COUNT] = { -#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) +#if defined(RADIO_TOOLS) menuRadioTools, #endif CASE_SDCARD(menuRadioSdManager) diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index b5f067162..a6f77528b 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -364,7 +364,7 @@ void menuMainView(event_t event) break; case EVT_KEY_GENERAL_MENU: - pushMenu(menuRadioTools); + pushMenu(menuTabGeneral[0]); killEvents(event); break; #endif diff --git a/radio/src/gui/212x64/menu_radio.cpp b/radio/src/gui/212x64/menu_radio.cpp index 6e7647a72..fe5765cb6 100644 --- a/radio/src/gui/212x64/menu_radio.cpp +++ b/radio/src/gui/212x64/menu_radio.cpp @@ -21,7 +21,7 @@ #include "opentx.h" const MenuHandlerFunc menuTabGeneral[MENU_RADIO_PAGES_COUNT] = { -#if defined(LUA) || defined(PXX2) +#if defined(RADIO_TOOLS) menuRadioTools, #endif menuRadioSdManager, diff --git a/radio/src/gui/212x64/view_main.cpp b/radio/src/gui/212x64/view_main.cpp index bdbcb10a6..659781ea6 100644 --- a/radio/src/gui/212x64/view_main.cpp +++ b/radio/src/gui/212x64/view_main.cpp @@ -455,7 +455,7 @@ void menuMainView(event_t event) break; case EVT_KEY_LONG(KEY_MENU): - pushMenu(menuRadioTools); + pushMenu(menuTabGeneral[0]); killEvents(event); break; #endif diff --git a/radio/src/gui/480x272/menu_radio.cpp b/radio/src/gui/480x272/menu_radio.cpp index dcb7e9dea..e50486b0d 100644 --- a/radio/src/gui/480x272/menu_radio.cpp +++ b/radio/src/gui/480x272/menu_radio.cpp @@ -21,7 +21,7 @@ #include "opentx.h" const MenuHandlerFunc menuTabGeneral[MENU_RADIO_PAGES_COUNT] = { -#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) +#if defined(RADIO_TOOLS) menuRadioTools, #endif menuRadioSdManager, diff --git a/radio/src/gui/480x272/menus.cpp b/radio/src/gui/480x272/menus.cpp index c166eb86b..e88c02a25 100644 --- a/radio/src/gui/480x272/menus.cpp +++ b/radio/src/gui/480x272/menus.cpp @@ -55,8 +55,10 @@ void pushMenu(MenuHandlerFunc newMenu) killEvents(KEY_ENTER); if (menuLevel == 0) { +#if defined(RADIO_TOOLS) if (newMenu == menuRadioTools) menuVerticalPositions[0] = 1; +#endif if (newMenu == menuModelSetup) menuVerticalPositions[0] = 0; } diff --git a/radio/src/gui/480x272/menus.h b/radio/src/gui/480x272/menus.h index f0623e164..83c667f19 100644 --- a/radio/src/gui/480x272/menus.h +++ b/radio/src/gui/480x272/menus.h @@ -189,7 +189,7 @@ bool menuRadioDiagAnalogs(event_t event); extern const MenuHandlerFunc menuTabModel[MENU_MODEL_PAGES_COUNT]; enum EnumTabRadio { -#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) +#if defined(RADIO_TOOLS) MENU_RADIO_TOOLS, #endif MENU_RADIO_SD_MANAGER, @@ -203,7 +203,7 @@ enum EnumTabRadio { const uint8_t RADIO_ICONS[MENU_RADIO_PAGES_COUNT + 1] = { ICON_RADIO, -#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) +#if defined(RADIO_TOOLS) ICON_RADIO_TOOLS, #endif ICON_RADIO_SD_MANAGER, diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 8a8ea96a9..c96d94e1e 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -219,6 +219,10 @@ #define IS_SLAVE_TRAINER() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) #endif +#if defined(LUA) || defined(PXX2) || defined(MULTIMODULE) + #define RADIO_TOOLS +#endif + // RESX range is used for internal calculation; The menu says -100.0 to 100.0; internally it is -1024 to 1024 to allow some optimizations #define RESX_SHIFT 10 #define RESX 1024 From 5444cd1ab6b717ed3cc8bf1b07d33b6458d5a1aa Mon Sep 17 00:00:00 2001 From: 3djc Date: Mon, 16 Mar 2020 14:51:16 +0100 Subject: [PATCH 12/12] Fix MULTI trainer with external R9M issue (#7443) --- radio/src/telemetry/telemetry.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index c4a5e325a..0d15c3c0c 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -151,7 +151,7 @@ inline uint8_t modelTelemetryProtocol() return PROTOCOL_TELEMETRY_MULTIMODULE; } #if defined(INTERNAL_MODULE_MULTI) - if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) { + if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE) { return PROTOCOL_TELEMETRY_MULTIMODULE; } #endif