From cb47c03f4fa4af4a71f1ea29c8c0fb27735e15d6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 27 Jan 2014 12:25:13 +0100 Subject: [PATCH] [Taranis] Issue #554 - Bug fixes (radio part) --- radio/src/gui/menu_model.cpp | 9 +++++++-- radio/src/lcd.cpp | 7 ++++--- radio/src/myeeprom.h | 5 +++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 9f7c2e8f4..2520b5f90 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -1737,6 +1737,11 @@ enum FlightModesItems { ITEM_PHASES_LAST = ITEM_PHASES_COUNT-1 }; +bool isTrimModeAvailable(int16_t mode) +{ + return (mode == TRIM_MODE_NONE || (mode%2) == 0 || (mode/2) != (m_posVert-1)); +} + void menuModelFlightModesAll(uint8_t event) { MENU(STR_MENUFLIGHTPHASES, menuTabModel, e_FlightModesAll, 1+MAX_PHASES+1, {0, NAVIGATION_LINE_BY_LINE|(ITEM_PHASES_LAST-5), NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, NAVIGATION_LINE_BY_LINE|ITEM_PHASES_LAST, 0}); @@ -1796,7 +1801,7 @@ void menuModelFlightModesAll(uint8_t event) putsTrimMode((4+LEN_FP_NAME)*FW+j*(5*FW/2), y, k, t, attr); if (active) { trim_t & v = p->trim[t]; - v.mode = checkIncDec(event, v.mode, -1, 2*MAX_PHASES-1, EE_MODEL); + v.mode = checkIncDec(event, v.mode==TRIM_MODE_NONE ? -1 : v.mode, -1, 2*MAX_PHASES-1, EE_MODEL, isTrimModeAvailable); } } break; @@ -2858,7 +2863,7 @@ void menuModelExpoOne(uint8_t event) case EXPO_FIELD_SCALE: lcd_putsLeft(y, STR_SCALE); putsTelemetryChannel(EXPO_ONE_2ND_COLUMN, y, ed->srcRaw - MIXSRC_FIRST_TELEM, convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale), LEFT|attr); - if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL, NULL); + if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL); break; #endif diff --git a/radio/src/lcd.cpp b/radio/src/lcd.cpp index 631715ec6..d8ac8aff0 100644 --- a/radio/src/lcd.cpp +++ b/radio/src/lcd.cpp @@ -1166,13 +1166,14 @@ void putsTmrMode(xcoord_t x, uint8_t y, int8_t mode, LcdFlags att) void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att) { trim_t v = getRawTrimValue(phase, idx); + unsigned int mode = v.mode; + unsigned int p = mode >> 1; - if (v.mode < 0) { + if (mode == TRIM_MODE_NONE) { lcd_putsAtt(x, y, "--", att); } else { - uint8_t p = v.mode >> 1; - if (v.mode % 2 == 0) + if (mode % 2 == 0) lcd_putcAtt(x+2, y, ':', att); else lcd_putcAtt(x, y, '+', att); diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index d0973c639..ba18118fc 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -1074,9 +1074,10 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data #else #if defined(PCBTARANIS) PACK(typedef struct { - int16_t value:11; - int16_t mode:5; + int16_t value:11; + uint16_t mode:5; }) trim_t; + #define TRIM_MODE_NONE 0b11111 #else #define trim_t int16_t #endif