diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 07c5c803a..b0cab9afe 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -184,7 +184,7 @@ elseif(PCB STREQUAL TARANIS) add_definitions(-DPCBTARANIS) add_definitions(-DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DDBLKEYS -DVIRTUALINPUTS -DLUAINPUTS -DXCURVES -DVARIO) - set(GUI_SRC ${GUI_SRC} bmp.cpp menu_model_inputs.cpp menu_model_mixes.cpp menu_general_diagkeys.cpp menu_general_diaganas.cpp menu_general_hardware.cpp view_channels.cpp view_telemetry.cpp view_text.cpp view_about.cpp) + set(GUI_SRC ${GUI_SRC} bmp.cpp menu_model_inputs.cpp menu_model_mixes.cpp menu_model_display.cpp menu_general_diagkeys.cpp menu_general_diaganas.cpp menu_general_hardware.cpp view_channels.cpp view_telemetry.cpp view_text.cpp view_about.cpp) set(TARGET_SRC ${TARGET_SRC} board_taranis.cpp rtc_driver.cpp) set(FIRMWARE_SRC ${FIRMWARE_SRC} loadboot.cpp) set(FIRMWARE_TARGET_SRC diff --git a/radio/src/gui/taranis/lcd.cpp b/radio/src/gui/taranis/lcd.cpp index 3d0aa0e68..c4845870d 100644 --- a/radio/src/gui/taranis/lcd.cpp +++ b/radio/src/gui/taranis/lcd.cpp @@ -42,6 +42,30 @@ void lcdClear() coord_t lcdLastPos; coord_t lcdNextPos; +struct PatternData +{ + uint8_t width; + uint8_t height; + const uint8_t * data; +}; + +uint8_t getPatternWidth(const PatternData * pattern) +{ + uint8_t result = 0; + uint8_t lines = (pattern->height+7)/8; + const uint8_t * data = pattern->data; + for (int8_t i=0; iwidth; i++) { + for (uint8_t j=0; jwidth = 10; + pattern->height = 16; if (c >= 0xC0) { - q = &font_10x14_extra[((uint16_t)(c-0xC0))*20]; + pattern->data = &font_10x14_extra[((uint16_t)(c-0xC0))*20]; } else { if (c >= 128) c_remapped = c - 60; - q = &font_10x14[((uint16_t)c_remapped)*20]; + pattern->data = &font_10x14[((uint16_t)c_remapped)*20]; } - lcdPutPattern(x, y, q, 10, 16, flags); } else if (fontsize == XXLSIZE) { - q = &font_22x38_num[((uint16_t)c-'0'+5)*110]; - lcdPutPattern(x, y, q, 22, 38, flags); + pattern->width = 22; + pattern->height = 38; + pattern->data = &font_22x38_num[((uint16_t)c-'0'+5)*110]; } else if (fontsize == MIDSIZE) { - q = &font_8x10[((uint16_t)c-0x20)*16]; - lcdPutPattern(x, y, q, 8, 12, flags); + pattern->width = 8; + pattern->height = 12; + pattern->data = &font_8x10[((uint16_t)c-0x20)*16]; } else if (fontsize == SMLSIZE) { - q = (c < 0xc0 ? &font_4x6[(c-0x20)*5] : &font_4x6_extra[(c-0xc0)*5]); - lcdPutPattern(x, y, q, 5, 6, flags); + pattern->width = 5; + pattern->height = 6; + pattern->data = (c < 0xc0 ? &font_4x6[(c-0x20)*5] : &font_4x6_extra[(c-0xc0)*5]); } else if (fontsize == TINSIZE) { - q = &font_3x5[((uint16_t)c-0x20)*3]; - lcdPutPattern(x, y, q, 3, 5, flags); + pattern->width = 3; + pattern->height = 5; + pattern->data = &font_3x5[((uint16_t)c-0x20)*3]; } -#if defined(BOLD_FONT) else if (flags & BOLD) { - q = &font_5x7_B[c_remapped*5]; - lcdPutPattern(x, y, q, 5, 7, flags); + pattern->width = 5; + pattern->height = 7; + pattern->data = &font_5x7_B[c_remapped*5]; } + else { + pattern->width = 5; + pattern->height = 7; + pattern->data = (c < 0xC0) ? &font_5x7[(c-0x20)*5] : &font_5x7_extra[(c-0xC0)*5]; + } +} + +uint8_t getCharWidth(char c, LcdFlags flags) +{ + PatternData pattern; + getCharPattern(&pattern, c, flags); + return getPatternWidth(&pattern); +} #endif - else -#endif - { -#if !defined(BOOT) - q = (c < 0xC0) ? &font_5x7[(c-0x20)*5] : &font_5x7_extra[(c-0xC0)*5]; + +void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags flags) +{ + lcdNextPos = x-1; +#if defined(BOOT) + const uint8_t * data = &font_5x7[(c-0x20)*5]; + lcdPutPattern(x, y, data, 5, 7, flags); #else - q = &font_5x7[(c-0x20)*5]; + PatternData pattern; + getCharPattern(&pattern, c, flags); + lcdPutPattern(x, y, pattern.data, pattern.width, pattern.height, flags); #endif - lcdPutPattern(x, y, q, 5, 7, flags); - } } void lcdDrawChar(coord_t x, coord_t y, const unsigned char c) @@ -202,12 +238,37 @@ void lcdDrawChar(coord_t x, coord_t y, const unsigned char c) lcdDrawChar(x, y, c, 0); } -void lcdDrawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len, LcdFlags flags) +#if !defined(BOOT) +uint8_t getTextWidth(const char * s, uint8_t len, LcdFlags flags) +{ + uint8_t width = 0; + while (len--) { + unsigned char c = (flags & ZCHAR) ? idx2char(*s) : *s; + if (!c) { + break; + } + width += getCharWidth(c, flags) + 1; + s++; + } + return width; +} +#endif + +void lcdDrawSizedText(coord_t x, coord_t y, const char * s, uint8_t len, LcdFlags flags) { const coord_t orig_x = x; const uint8_t orig_len = len; uint32_t fontsize = FONTSIZE(flags); bool setx = false; + uint8_t width = 0; + +#if !defined(BOOT) + if (flags & RIGHT) { + width = getTextWidth(s, len, flags); + x -= width; + } +#endif + while (len--) { #if defined(BOOT) unsigned char c = *s; @@ -250,10 +311,16 @@ void lcdDrawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len, LcdF } s++; } + lcdLastPos = x; lcdNextPos = x; if (fontsize == MIDSIZE) lcdLastPos += 1; + + if (flags & RIGHT) { + lcdLastPos -= width; + lcdNextPos -= width; + } } void lcdDrawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len) @@ -285,13 +352,11 @@ void lcdDrawTextAtIndex(coord_t x, coord_t y, const pm_char * s,uint8_t idx, Lcd void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags flags) { - x += FWNUM*4+1; - for (int i=0; i<4; i++) { - x -= FWNUM; - char c = val & 0xf; + for (int i=12; i>=0; i-=4) { + char c = (val >> i) & 0xf; c = c>9 ? c+'A'-10 : c+'0'; - lcdDrawChar(x, y, c, flags|(c>='A' ? CONDENSED : 0)); - val >>= 4; + lcdDrawChar(x, y, c, flags); + x = lcdNextPos; } } @@ -313,10 +378,7 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t le bool tinsize = (fontsize == TINSIZE); bool neg = false; - if (flags & UNSIGN) { - flags -= UNSIGN; - } - else if (val < 0) { + if (val < 0) { neg = true; val = -val; } @@ -349,16 +411,14 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t le fw -= 1; } else { - if (flags & LEFT) { + if (!(flags & RIGHT)) { if (mode > 0) x += 2; } -#if defined(BOLD_FONT) if (flags & BOLD) fw += 1; -#endif } - if (flags & LEFT) { + if (!(flags & RIGHT)) { x += len * fw; if (neg) { x += ((xxlsize|dblsize|midsize) ? 7 : FWNUM); @@ -375,7 +435,6 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t le LcdFlags f = flags; lcdDrawChar(x, y, c, f); if (mode == i) { - flags &= ~PREC2; // TODO not needed but removes 20bytes, could be improved for sure, check asm if (dblsize) { xn = x - 2; if (c>='2' && c<='3') ln++; @@ -419,9 +478,7 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t le } val = qr.quot; x -= fw; -#if defined(BOLD_FONT) && !defined(CPUM64) || defined(EXTSTD) if (i==len && (flags & BOLD)) x += 1; -#endif } if (xn) { @@ -525,15 +582,15 @@ void lcdDrawTelemetryTopBar() { putsModelName(0, 0, g_model.header.name, g_eeGeneral.currModel, 0); uint8_t att = (IS_TXBATT_WARNING() ? BLINK : 0); - putsVBat(16*FW+1,0,att); + putsVBat(12*FW, 0, att); if (g_model.timers[0].mode) { att = (timersStates[0].val<0 ? BLINK : 0); - putsTimer(22*FW+5*FWNUM+3, 0, timersStates[0].val, att, att); + putsTimer(22*FW, 0, timersStates[0].val, att, att); putsMixerSource(18*FW+2, 1, MIXSRC_TIMER1, SMLSIZE); } if (g_model.timers[1].mode) { att = (timersStates[1].val<0 ? BLINK : 0); - putsTimer(31*FW+5*FWNUM+3, 0, timersStates[1].val, att, att); + putsTimer(31*FW, 0, timersStates[1].val, att, att); putsMixerSource(27*FW+2, 1, MIXSRC_TIMER2, SMLSIZE); } lcdInvertLine(0); @@ -548,7 +605,8 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 { div_t qr; - if (!(att & LEFT)) { + if (att & RIGHT) { + att -= RIGHT; if (att & DBLSIZE) x -= 5*(2*FWNUM)-4; else if (att & MIDSIZE) @@ -577,12 +635,13 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 else x += 13; } + lcdDrawNumber(x, y, qr.quot, att|LEADING0|LEFT, 2); if (att & TIMEBLINK) lcdDrawChar(lcdLastPos, y, separator, BLINK); else lcdDrawChar(lcdLastPos, y, separator, att&att2); - lcdDrawNumber(lcdNextPos, y, qr.rem, att2|LEADING0|LEFT, 2); + lcdDrawNumber(lcdNextPos, y, qr.rem, (att2|LEADING0) & (~RIGHT), 2); } // TODO to be optimized with putsValueWithUnit @@ -765,10 +824,8 @@ void putsSwitches(coord_t x, coord_t y, int32_t idx, LcdFlags att) #if defined(FLIGHT_MODES) void putsFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att) { - if (idx==0) { lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, att); return; } - if (idx < 0) { lcdDrawChar(x-2, y, '!', att); idx = -idx; } - if (att & CONDENSED) - lcdDrawNumber(x+FW*1, y, idx-1, (att & ~CONDENSED), 1); + if (idx==0) + lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, att); else drawStringWithIndex(x, y, STR_FP, idx-1, att); } @@ -956,13 +1013,14 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, int32_t va if (telemetrySensor.id >= RBOX_STATE_FIRST_ID && telemetrySensor.id <= RBOX_STATE_LAST_ID) { if (telemetrySensor.subId == 0) { if (value == 0) { - lcdDrawText(att & LEFT ? x : x-15, att & DBLSIZE ? y+1 : y, "OK"); + lcdDrawText(x, y, "OK", att); } else { for (uint8_t i=0; i<16; i++) { if (value & (1 << i)) { - drawStringWithIndex(att & LEFT ? x : x-40, att & DBLSIZE ? y+1 : y, "CH", i+1); - lcdDrawText(lcdLastPos+3, att & DBLSIZE ? y+1 : y, "KO"); + char s[] = "CH__ KO"; + strAppendUnsigned(&s[2], i+1, 2); + lcdDrawText(x, att & DBLSIZE ? y+1 : y, s, att & ~DBLSIZE); break; } } @@ -970,7 +1028,7 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, int32_t va } else { if (value == 0) { - lcdDrawText(x, att & DBLSIZE ? y+1 : y, "Rx OK"); + lcdDrawText(x, att & DBLSIZE ? y+1 : y, "Rx OK", att & ~DBLSIZE); } else { static const char * const RXS_STATUS[] = { @@ -988,7 +1046,7 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, int32_t va }; for (uint8_t i=0; i> 4) -#define LEFT 0x80 /* align left */ /* line, rect, square flags */ #define FORCE 0x02 diff --git a/radio/src/gui/taranis/menu_general_calib.cpp b/radio/src/gui/taranis/menu_general_calib.cpp index c9c62bd64..42da92ec3 100644 --- a/radio/src/gui/taranis/menu_general_calib.cpp +++ b/radio/src/gui/taranis/menu_general_calib.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #define XPOT_DELTA 10 #define XPOT_DELAY 10 /* cycles */ @@ -191,7 +191,7 @@ void menuCommonCalib(uint8_t event) steps = calib->count + 1; } if (steps > 0 && steps <= XPOTS_MULTIPOS_COUNT) { - lcdDrawNumber(LCD_W/2-2+(i-POT1)*5, LCD_H-6, steps, TINSIZE); + lcdDrawNumber(LCD_W/2-2+(i-POT1)*5, LCD_H-6, steps, TINSIZE|RIGHT); } } #endif diff --git a/radio/src/gui/taranis/menu_general_diaganas.cpp b/radio/src/gui/taranis/menu_general_diaganas.cpp index d55dea47d..0398197fb 100644 --- a/radio/src/gui/taranis/menu_general_diaganas.cpp +++ b/radio/src/gui/taranis/menu_general_diaganas.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" void menuGeneralDiagAna(uint8_t event) { @@ -33,11 +33,11 @@ void menuGeneralDiagAna(uint8_t event) lcdDrawChar(x+2*FW-2, y, ':'); lcdDrawHexNumber(x+3*FW-1, y, anaIn(i)); #if defined(JITTER_MEASURE) - lcdDrawNumber(x+10*FW-1, y, rawJitter[i].get()); - lcdDrawNumber(x+13*FW-1, y, avgJitter[i].get()); - lcdDrawNumber(x+17*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); + lcdDrawNumber(x+10*FW-1, y, rawJitter[i].get(), RIGHT); + lcdDrawNumber(x+13*FW-1, y, avgJitter[i].get(), RIGHT); + lcdDrawNumber(x+17*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256, RIGHT); #else - lcdDrawNumber(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); + lcdDrawNumber(x+10*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256, RIGHT); #endif } diff --git a/radio/src/gui/taranis/menu_general_setup.cpp b/radio/src/gui/taranis/menu_general_setup.cpp index e6f65c4df..259ff7fb4 100644 --- a/radio/src/gui/taranis/menu_general_setup.cpp +++ b/radio/src/gui/taranis/menu_general_setup.cpp @@ -136,11 +136,11 @@ void menuGeneralSetup(uint8_t event) uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); switch (j) { case 0: - lcdDrawNumber(RADIO_SETUP_DATE_COLUMN, y, t.tm_year+1900, rowattr); + lcdDrawNumber(RADIO_SETUP_DATE_COLUMN, y, t.tm_year+1900, rowattr|RIGHT); if (rowattr && s_editMode>0) t.tm_year = checkIncDec(event, t.tm_year, 112, 200, 0); break; case 1: - lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+3*FW-2, y, t.tm_mon+1, rowattr|LEADING0, 2); + lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+3*FW-2, y, t.tm_mon+1, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_mon = checkIncDec(event, t.tm_mon, 0, 11, 0); break; case 2: @@ -149,7 +149,7 @@ void menuGeneralSetup(uint8_t event) int8_t dlim = (((((year%4==0) && (year%100!=0)) || (year%400==0)) && (t.tm_mon==1)) ? 1 : 0); static const pm_uint8_t dmon[] PROGMEM = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dlim += pgm_read_byte(&dmon[t.tm_mon]); - lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+6*FW-4, y, t.tm_mday, rowattr|LEADING0, 2); + lcdDrawNumber(RADIO_SETUP_DATE_COLUMN+6*FW-4, y, t.tm_mday, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0); break; } @@ -168,15 +168,15 @@ void menuGeneralSetup(uint8_t event) uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); switch (j) { case 0: - lcdDrawNumber(RADIO_SETUP_TIME_COLUMN, y, t.tm_hour, rowattr|LEADING0, 2); + lcdDrawNumber(RADIO_SETUP_TIME_COLUMN, y, t.tm_hour, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_hour = checkIncDec(event, t.tm_hour, 0, 23, 0); break; case 1: - lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+3*FWNUM, y, t.tm_min, rowattr|LEADING0, 2); + lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+3*FWNUM, y, t.tm_min, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_min = checkIncDec(event, t.tm_min, 0, 59, 0); break; case 2: - lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+6*FWNUM, y, t.tm_sec, rowattr|LEADING0, 2); + lcdDrawNumber(RADIO_SETUP_TIME_COLUMN+6*FWNUM, y, t.tm_sec, rowattr|LEADING0|RIGHT, 2); if (rowattr && s_editMode>0) t.tm_sec = checkIncDec(event, t.tm_sec, 0, 59, 0); break; } diff --git a/radio/src/gui/taranis/menu_general_trainer.cpp b/radio/src/gui/taranis/menu_general_trainer.cpp index cc863d1be..bca96393f 100644 --- a/radio/src/gui/taranis/menu_general_trainer.cpp +++ b/radio/src/gui/taranis/menu_general_trainer.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #define TRAINER_CALIB_POS 12 @@ -59,7 +59,7 @@ void menuGeneralTrainer(uint8_t event) break; case 1: - lcdDrawNumber(11*FW, y, td->studWeight, attr); + lcdDrawNumber(11*FW, y, td->studWeight, attr|RIGHT); if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->studWeight, -125, 125); break; @@ -74,7 +74,7 @@ void menuGeneralTrainer(uint8_t event) attr = (sub==5) ? blink : 0; lcd_putsLeft(MENU_HEADER_HEIGHT+1+5*FH, STR_MULTIPLIER); - lcdDrawNumber(LEN_MULTIPLIER*FW+3*FW, MENU_HEADER_HEIGHT+1+5*FH, g_eeGeneral.PPM_Multiplier+10, attr|PREC1); + lcdDrawNumber(LEN_MULTIPLIER*FW+3*FW, MENU_HEADER_HEIGHT+1+5*FH, g_eeGeneral.PPM_Multiplier+10, attr|PREC1|RIGHT); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40); attr = (sub==6) ? INVERS : 0; @@ -83,9 +83,9 @@ void menuGeneralTrainer(uint8_t event) for (int i=0; i<4; i++) { uint8_t x = (i*TRAINER_CALIB_POS+16)*FW/2; #if defined (PPM_UNIT_PERCENT_PREC1) - lcdDrawNumber(x, MENU_HEADER_HEIGHT+1+6*FH, (ppmInput[i]-g_eeGeneral.trainer.calib[i])*2, PREC1); + lcdDrawNumber(x, MENU_HEADER_HEIGHT+1+6*FH, (ppmInput[i]-g_eeGeneral.trainer.calib[i])*2, PREC1|RIGHT); #else - lcdDrawNumber(x, MENU_HEADER_HEIGHT+1+6*FH, (ppmInput[i]-g_eeGeneral.trainer.calib[i])/5, 0); + lcdDrawNumber(x, MENU_HEADER_HEIGHT+1+6*FH, (ppmInput[i]-g_eeGeneral.trainer.calib[i])/5, RIGHT); #endif } diff --git a/radio/src/gui/taranis/menu_model_custom_functions.cpp b/radio/src/gui/taranis/menu_model_custom_functions.cpp index a0cd0db7e..efe864816 100644 --- a/radio/src/gui/taranis/menu_model_custom_functions.cpp +++ b/radio/src/gui/taranis/menu_model_custom_functions.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #define MODEL_CUSTOM_FUNC_1ST_COLUMN (4*FW+2) #define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*FW+2) @@ -407,7 +407,7 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu lcdDrawText(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, "1x", attr); } else { - lcdDrawNumber(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, CFN_PLAY_REPEAT(cfn)*CFN_PLAY_REPEAT_MUL, attr); + lcdDrawNumber(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, CFN_PLAY_REPEAT(cfn)*CFN_PLAY_REPEAT_MUL, attr|RIGHT); lcdDrawChar(MODEL_CUSTOM_FUNC_4TH_COLUMN+2+FW, y, 's', attr); } if (active) CFN_PLAY_REPEAT(cfn) = checkIncDec(event, CFN_PLAY_REPEAT(cfn)==CFN_PLAY_REPEAT_NOSTART?-1:CFN_PLAY_REPEAT(cfn), -1, 60/CFN_PLAY_REPEAT_MUL, eeFlags); diff --git a/radio/src/gui/taranis/menu_model_custom_scripts.cpp b/radio/src/gui/taranis/menu_model_custom_scripts.cpp index 1db47e000..cfdfecdb0 100644 --- a/radio/src/gui/taranis/menu_model_custom_scripts.cpp +++ b/radio/src/gui/taranis/menu_model_custom_scripts.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" void onModelCustomScriptMenu(const char *result) { @@ -111,14 +111,14 @@ void menuModelCustomScriptOne(uint8_t event) for (int i=0; i0) ? BLINK|INVERS : INVERS); + LcdFlags attr = (menuVerticalPosition == k ? blink : 0); + + switch (k) { + case ITEM_DISPLAY_TOP_BAR_LABEL: + lcd_putsLeft(y, STR_TOP_BAR); + break; + + case ITEM_DISPLAY_TOP_BAR_VOLTAGE: + lcd_putsLeft(y, STR_VOLTAGE); + putsMixerSource(DISPLAY_COL2, y, g_model.frsky.voltsSource ? MIXSRC_FIRST_TELEM+3*(g_model.frsky.voltsSource-1) : 0, attr); + if (attr) { + g_model.frsky.voltsSource = checkIncDec(event, g_model.frsky.voltsSource, 0, MAX_SENSORS, EE_MODEL|NO_INCDEC_MARKS, isVoltsSensor); + } + break; + + case ITEM_DISPLAY_TOP_BAR_ALTITUDE: + lcd_putsLeft(y, STR_ALTITUDE); + putsMixerSource(DISPLAY_COL2, y, g_model.frsky.altitudeSource ? MIXSRC_FIRST_TELEM+3*(g_model.frsky.altitudeSource-1) : 0, attr); + if (attr) { + g_model.frsky.altitudeSource = checkIncDec(event, g_model.frsky.altitudeSource, 0, MAX_SENSORS, EE_MODEL|NO_INCDEC_MARKS, isAltSensor); + } + break; + + case ITEM_DISPLAY_SCREEN_LABEL1: + case ITEM_DISPLAY_SCREEN_LABEL2: + case ITEM_DISPLAY_SCREEN_LABEL3: + case ITEM_DISPLAY_SCREEN_LABEL4: + { + uint8_t screenIndex = TELEMETRY_CURRENT_SCREEN(k); + drawStringWithIndex(0*FW, y, STR_SCREEN, screenIndex+1); + TelemetryScreenType oldScreenType = TELEMETRY_SCREEN_TYPE(screenIndex); + TelemetryScreenType newScreenType = (TelemetryScreenType)selectMenuItem(DISPLAY_COL2, y, PSTR(""), STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (menuHorizontalPosition==0 ? attr : 0), event); + if (newScreenType != oldScreenType) { + g_model.frsky.screensType = (g_model.frsky.screensType & (~(0x03 << (2*screenIndex)))) | (newScreenType << (2*screenIndex)); + memset(&g_model.frsky.screens[screenIndex], 0, sizeof(g_model.frsky.screens[screenIndex])); + } +#if defined(LUA) + if (newScreenType == TELEMETRY_SCREEN_TYPE_SCRIPT) { + TelemetryScriptData & scriptData = g_model.frsky.screens[screenIndex].script; + + // TODO better function name for --- + // TODO function for these lines + if (ZEXIST(scriptData.file)) + lcdDrawSizedText(DISPLAY_COL2+7*FW, y, scriptData.file, sizeof(scriptData.file), (menuHorizontalPosition==1 ? attr : 0)); + else + lcdDrawTextAtIndex(DISPLAY_COL2+7*FW, y, STR_VCSWFUNC, 0, (menuHorizontalPosition==1 ? attr : 0)); + + if (menuHorizontalPosition==1 && attr && event==EVT_KEY_BREAK(KEY_ENTER) && READ_ONLY_UNLOCKED()) { + s_editMode = 0; + if (sdListFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), g_model.frsky.screens[screenIndex].script.file)) { + POPUP_MENU_START(onTelemetryScriptFileSelectionMenu); + } + else { + POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); + } + } + } + else if (attr) { + MOVE_CURSOR_FROM_HERE(); + } +#endif + break; + } + + case ITEM_DISPLAY_SCREEN_LINE1: + case ITEM_DISPLAY_SCREEN_LINE2: + case ITEM_DISPLAY_SCREEN_LINE3: + case ITEM_DISPLAY_SCREEN_LINE4: + case ITEM_DISPLAY_SCREEN_LINE5: + case ITEM_DISPLAY_SCREEN_LINE6: + case ITEM_DISPLAY_SCREEN_LINE7: + case ITEM_DISPLAY_SCREEN_LINE8: + case ITEM_DISPLAY_SCREEN_LINE9: + case ITEM_DISPLAY_SCREEN_LINE10: + case ITEM_DISPLAY_SCREEN_LINE11: + case ITEM_DISPLAY_SCREEN_LINE12: + case ITEM_DISPLAY_SCREEN_LINE13: + case ITEM_DISPLAY_SCREEN_LINE14: + case ITEM_DISPLAY_SCREEN_LINE15: + case ITEM_DISPLAY_SCREEN_LINE16: + { + uint8_t screenIndex, lineIndex; + if (k < ITEM_DISPLAY_SCREEN_LABEL2) { + screenIndex = 0; + lineIndex = k-ITEM_DISPLAY_SCREEN_LINE1; + } + else if (k >= ITEM_DISPLAY_SCREEN_LABEL4) { + screenIndex = 3; + lineIndex = k-ITEM_DISPLAY_SCREEN_LINE13; + } + else if (k >= ITEM_DISPLAY_SCREEN_LABEL3) { + screenIndex = 2; + lineIndex = k-ITEM_DISPLAY_SCREEN_LINE9; + } + else { + screenIndex = 1; + lineIndex = k-ITEM_DISPLAY_SCREEN_LINE5; + } + + if (IS_BARS_SCREEN(screenIndex)) { + FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; + source_t barSource = bar.source; + putsMixerSource(DISPLAY_COL1, y, barSource, menuHorizontalPosition==0 ? attr : 0); + int barMax = getMaximumValue(barSource); + int barMin = -barMax; + if (barSource) { + if (barSource <= MIXSRC_LAST_CH) { + putsChannelValue(DISPLAY_COL2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT); + putsChannelValue(DISPLAY_COL3, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT); + } + else { + putsChannelValue(DISPLAY_COL2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT); + putsChannelValue(DISPLAY_COL3, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT); + } + } + else if (attr) { + MOVE_CURSOR_FROM_HERE(); + } + if (attr && s_editMode>0) { + switch (menuHorizontalPosition) { + case 0: + bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); + if (checkIncDec_Ret) { + if (barSource <= MIXSRC_LAST_CH) { + bar.barMin = -100; + bar.barMax = 100; + } + else { + bar.barMin = 0; + bar.barMax = 0; + } + } + break; + case 1: + bar.barMin = checkIncDec(event, bar.barMin, barMin, bar.barMax, EE_MODEL|NO_INCDEC_MARKS); + break; + case 2: + bar.barMax = checkIncDec(event, bar.barMax, bar.barMin, barMax, EE_MODEL|NO_INCDEC_MARKS); + break; + } + } + } + else { + for (int c=0; c0) { + value = checkIncDec(event, value, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); + } + } + if (attr && menuHorizontalPosition == NUM_LINE_ITEMS) { + REPEAT_LAST_CURSOR_MOVE(); + } + } + break; + } + } + } +} diff --git a/radio/src/gui/taranis/menu_model_flightmodes.cpp b/radio/src/gui/taranis/menu_model_flightmodes.cpp index 3cae038e3..b0745aa88 100644 --- a/radio/src/gui/taranis/menu_model_flightmodes.cpp +++ b/radio/src/gui/taranis/menu_model_flightmodes.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" void displayFlightModes(coord_t x, coord_t y, FlightModesType value) { @@ -156,12 +156,12 @@ void menuModelFlightModesAll(uint8_t event) } case ITEM_FLIGHT_MODES_FADE_IN: - lcdDrawNumber(32*FW-2, y, (10/DELAY_STEP)*p->fadeIn, attr|PREC1); + lcdDrawNumber(32*FW-2, y, (10/DELAY_STEP)*p->fadeIn, attr|PREC1|RIGHT); if (active) p->fadeIn = checkIncDec(event, p->fadeIn, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS); break; case ITEM_FLIGHT_MODES_FADE_OUT: - lcdDrawNumber(35*FW, y, (10/DELAY_STEP)*p->fadeOut, attr|PREC1); + lcdDrawNumber(35*FW, y, (10/DELAY_STEP)*p->fadeOut, attr|PREC1|RIGHT); if (active) p->fadeOut = checkIncDec(event, p->fadeOut, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS); break; diff --git a/radio/src/gui/taranis/menu_model_gvars.cpp b/radio/src/gui/taranis/menu_model_gvars.cpp index 2529f8eab..d643377b1 100644 --- a/radio/src/gui/taranis/menu_model_gvars.cpp +++ b/radio/src/gui/taranis/menu_model_gvars.cpp @@ -131,7 +131,7 @@ void onGVARSMenu(const char *result) } #define GVARS_COLUMNS (NAVIGATION_LINE_BY_LINE|(MAX_FLIGHT_MODES-1)) -#define GVARS_FM_COLUMN(p) (7*FW + 9 + (p)*20) +#define GVARS_FM_COLUMN(p) (7*FW - 7 + (p)*20) void menuModelGVars(uint8_t event) { @@ -142,7 +142,7 @@ void menuModelGVars(uint8_t event) if (after2seconds) { menuTitle = STR_GVARS; for (int i=0; i 0 ? BLINK | INVERS : INVERS) : 0); coord_t x = GVARS_FM_COLUMN(j); if (v > GVAR_MAX) { - x -= 16; attr |= SMLSIZE; } else if (g_model.gvars[i].prec > 0 || abs(v) >= 100) { diff --git a/radio/src/gui/taranis/menu_model_heli.cpp b/radio/src/gui/taranis/menu_model_heli.cpp index 2a33e0aff..1554eeea2 100644 --- a/radio/src/gui/taranis/menu_model_heli.cpp +++ b/radio/src/gui/taranis/menu_model_heli.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" enum menuModelHeliItems { ITEM_HELI_SWASHTYPE, @@ -65,7 +65,7 @@ void menuModelHeli(uint8_t event) case ITEM_HELI_ELE_WEIGHT: lcdDrawText(INDENT_WIDTH, y, STR_WEIGHT); - lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.elevatorWeight, LEFT|attr); + lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.elevatorWeight, LEFT|attr); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.elevatorWeight, -100, 100); break; @@ -77,7 +77,7 @@ void menuModelHeli(uint8_t event) case ITEM_HELI_AIL_WEIGHT: lcdDrawText(INDENT_WIDTH, y, STR_WEIGHT); - lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.aileronWeight, LEFT|attr); + lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.aileronWeight, LEFT|attr); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.aileronWeight, -100, 100); break; @@ -89,7 +89,7 @@ void menuModelHeli(uint8_t event) case ITEM_HELI_COL_WEIGHT: lcdDrawText(INDENT_WIDTH, y, STR_WEIGHT); - lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.collectiveWeight, LEFT|attr); + lcdDrawNumber(MODEL_HELI_2ND_COLUMN, y, g_model.swashR.collectiveWeight, LEFT|attr); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.collectiveWeight, -100, 100); break; } diff --git a/radio/src/gui/taranis/menu_model_inputs.cpp b/radio/src/gui/taranis/menu_model_inputs.cpp index 8eb2d9a07..b738c76c3 100644 --- a/radio/src/gui/taranis/menu_model_inputs.cpp +++ b/radio/src/gui/taranis/menu_model_inputs.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" #define EXPO_ONE_2ND_COLUMN (LCD_W-8*FW-90) #define EXPO_ONE_FM_WIDTH (9*FW) @@ -274,12 +274,12 @@ void menuModelExpoOne(uint8_t event) if (ed->scale > 0) x512 = (x512 * 1024) / convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale); } else { - lcdDrawNumber(LCD_W-8, 6*FH, calcRESXto1000(x512), PREC1); + lcdDrawNumber(LCD_W-8, 6*FH, calcRESXto1000(x512), RIGHT | PREC1); } x512 = limit(-1024, x512, 1024); int y512 = expoFn(x512); y512 = limit(-1024, y512, 1024); - lcdDrawNumber(LCD_W-8-6*FW, 1*FH, calcRESXto1000(y512), PREC1); + lcdDrawNumber(LCD_W-8-6*FW, 1*FH, calcRESXto1000(y512), RIGHT | PREC1); x512 = X0+x512/(RESX/WCHART); y512 = (LCD_H-1) - ((y512+RESX)/2) * (LCD_H-1) / RESX; @@ -481,13 +481,13 @@ void menuModelExposAll(uint8_t event) break; } - lcdDrawNumber(FW*sizeof(TR_MENUINPUTS)+FW+FW/2, 0, getExposCount()); + lcdDrawNumber(FW*sizeof(TR_MENUINPUTS)+FW+FW/2, 0, getExposCount(), RIGHT); lcdDrawText(FW*sizeof(TR_MENUINPUTS)+FW+FW/2, 0, STR_MAX(MAX_EXPOS)); // Value uint8_t index = expoAddress(s_currIdx)->chn; if (!s_currCh) { - lcdDrawNumber(127, 2, calcRESXto1000(anas[index]), PREC1|TINSIZE); + lcdDrawNumber(127, 2, calcRESXto1000(anas[index]), PREC1|TINSIZE|RIGHT); } SIMPLE_MENU(STR_MENUINPUTS, menuTabModel, e_InputsAll, s_maxLines); @@ -527,7 +527,7 @@ void menuModelExposAll(uint8_t event) if (cur-menuVerticalOffset >= 0 && cur-menuVerticalOffset < NUM_BODY_LINES) { uint8_t attr = ((s_copyMode || sub != cur) ? 0 : INVERS); - GVAR_MENU_ITEM(EXPO_LINE_WEIGHT_POS, y, ed->weight, MIN_EXPO_WEIGHT, 100, attr | (isExpoActive(i) ? BOLD : 0), 0, 0); + GVAR_MENU_ITEM(EXPO_LINE_WEIGHT_POS, y, ed->weight, MIN_EXPO_WEIGHT, 100, RIGHT | attr | (isExpoActive(i) ? BOLD : 0), 0, 0); displayExpoLine(y, ed); if (ed->mode!=3) { lcdDrawChar(EXPO_LINE_SIDE_POS, y, ed->mode == 2 ? 126 : 127); diff --git a/radio/src/gui/taranis/menu_model_limits.cpp b/radio/src/gui/taranis/menu_model_limits.cpp index b0a1db249..25c5349da 100644 --- a/radio/src/gui/taranis/menu_model_limits.cpp +++ b/radio/src/gui/taranis/menu_model_limits.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" bool isThrottleOutput(uint8_t ch) { @@ -49,25 +49,24 @@ enum LimitsItems { ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1 }; - #define LIMITS_NAME_POS 4*FW - #define LIMITS_OFFSET_POS 14*FW+4 - #define LIMITS_MIN_POS 20*FW-3 - #if defined(PPM_CENTER_ADJUSTABLE) - #define LIMITS_DIRECTION_POS 20*FW-3 +#define LIMITS_NAME_POS 4*FW +#define LIMITS_OFFSET_POS 14*FW+4 +#define LIMITS_MIN_POS 20*FW-3 +#if defined(PPM_CENTER_ADJUSTABLE) + #define LIMITS_DIRECTION_POS 20*FW-3 #define LIMITS_MAX_POS 24*FW+2 #define LIMITS_REVERT_POS 25*FW-1 #define LIMITS_CURVE_POS 27*FW-1 #define LIMITS_PPM_CENTER_POS 34*FW - #else - #define LIMITS_DIRECTION_POS 21*FW - #define LIMITS_MAX_POS 26*FW - #define LIMITS_REVERT_POS 27*FW - #define LIMITS_CURVE_POS 32*FW-3 - #endif +#else + #define LIMITS_DIRECTION_POS 21*FW + #define LIMITS_MAX_POS 26*FW + #define LIMITS_REVERT_POS 27*FW + #define LIMITS_CURVE_POS 32*FW-3 +#endif - #define LIMITS_MIN_MAX_OFFSET 1000 - #define CONVERT_US_MIN_MAX(x) (((x)*1280)/250) - #define MIN_MAX_ATTR attr|PREC1 +#define LIMITS_MIN_MAX_OFFSET 1000 +#define CONVERT_US_MIN_MAX(x) (((x)*1280)/250) #if defined(PPM_UNIT_US) #define SET_MIN_MAX(x, val) x = ((val)*250)/128 @@ -104,10 +103,10 @@ void menuModelLimits(uint8_t event) if (sub < NUM_CHNOUT) { #if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_UNIT_US) - lcdDrawNumber(13*FW, 0, PPM_CH_CENTER(sub)+channelOutputs[sub]/2, 0); + lcdDrawNumber(13*FW, 0, PPM_CH_CENTER(sub)+channelOutputs[sub]/2, RIGHT); lcdDrawText(13*FW, 0, STR_US); #else - lcdDrawNumber(13*FW, 0, calcRESXto1000(channelOutputs[sub]), PREC1); + lcdDrawNumber(13*FW, 0, calcRESXto1000(channelOutputs[sub]), PREC1|RIGHT); #endif } @@ -179,9 +178,9 @@ void menuModelLimits(uint8_t event) } #if defined(PPM_UNIT_US) - lcdDrawNumber(LIMITS_OFFSET_POS, y, ((int32_t)ld->offset*128) / 25, attr|PREC1); + lcdDrawNumber(LIMITS_OFFSET_POS, y, ((int32_t)ld->offset*128) / 25, attr|PREC1|RIGHT); #else - lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1); + lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1|RIGHT); #endif if (active) { ld->offset = checkIncDec(event, ld->offset, -1000, 1000, EE_MODEL, NULL, stops1000); @@ -194,19 +193,19 @@ void menuModelLimits(uint8_t event) case ITEM_LIMITS_MIN: if (GV_IS_GV_VALUE(ld->min, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) { - ld->min = GVAR_MENU_ITEM(LIMITS_MIN_POS, y, ld->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, MIN_MAX_ATTR, 0, event); + ld->min = GVAR_MENU_ITEM(LIMITS_MIN_POS, y, ld->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1|RIGHT, 0, event); break; } - lcdDrawNumber(LIMITS_MIN_POS, y, MIN_MAX_DISPLAY(ld->min-LIMITS_MIN_MAX_OFFSET), MIN_MAX_ATTR); + lcdDrawNumber(LIMITS_MIN_POS, y, MIN_MAX_DISPLAY(ld->min-LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT); if (active) ld->min = LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->min-LIMITS_MIN_MAX_OFFSET, -limit, 0, EE_MODEL, NULL, stops1000); break; case ITEM_LIMITS_MAX: if (GV_IS_GV_VALUE(ld->max, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) { - ld->max = GVAR_MENU_ITEM(LIMITS_MAX_POS, y, ld->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, MIN_MAX_ATTR, 0, event); + ld->max = GVAR_MENU_ITEM(LIMITS_MAX_POS, y, ld->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, attr|PREC1|RIGHT, 0, event); break; } - lcdDrawNumber(LIMITS_MAX_POS, y, MIN_MAX_DISPLAY(ld->max+LIMITS_MIN_MAX_OFFSET), MIN_MAX_ATTR); + lcdDrawNumber(LIMITS_MAX_POS, y, MIN_MAX_DISPLAY(ld->max+LIMITS_MIN_MAX_OFFSET), attr|PREC1|RIGHT); if (active) ld->max = -LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->max+LIMITS_MIN_MAX_OFFSET, 0, +limit, EE_MODEL, NULL, stops1000); break; @@ -245,7 +244,7 @@ void menuModelLimits(uint8_t event) #if defined(PPM_CENTER_ADJUSTABLE) case ITEM_LIMITS_PPM_CENTER: - lcdDrawNumber(LIMITS_PPM_CENTER_POS, y, PPM_CENTER+ld->ppmCenter, attr); + lcdDrawNumber(LIMITS_PPM_CENTER_POS, y, PPM_CENTER+ld->ppmCenter, attr|RIGHT); if (active) { CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -PPM_CENTER_MAX, +PPM_CENTER_MAX); } diff --git a/radio/src/gui/taranis/menu_model_mixes.cpp b/radio/src/gui/taranis/menu_model_mixes.cpp index 9fdbc997a..db2e15466 100644 --- a/radio/src/gui/taranis/menu_model_mixes.cpp +++ b/radio/src/gui/taranis/menu_model_mixes.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" uint8_t getMixesCount() { @@ -161,7 +161,7 @@ void drawOffsetBar(uint8_t x, uint8_t y, MixData * md) int barMax = offset + weight; if (y > 15) { lcdDrawNumber(x-((barMin >= 0) ? 2 : 3), y-6, barMin, TINSIZE|LEFT); - lcdDrawNumber(x+gaugeWidth+1, y-6, barMax, TINSIZE); + lcdDrawNumber(x+gaugeWidth+1, y-6, barMax, TINSIZE|RIGHT); } if (weight < 0) { barMin = -barMin; @@ -505,14 +505,14 @@ void menuModelMixAll(uint8_t event) break; } - lcdDrawNumber(FW*sizeof(TR_MIXER)+FW+FW/2, 0, getMixesCount()); + lcdDrawNumber(FW*sizeof(TR_MIXER)+FW+FW/2, 0, getMixesCount(), RIGHT); lcdDrawText(FW*sizeof(TR_MIXER)+FW+FW/2, 0, STR_MAX(MAX_MIXERS)); // Value uint8_t index = mixAddress(s_currIdx)->destCh; if (!s_currCh) { displayHeaderChannelName(index); - lcdDrawNumber(127, 2, calcRESXto1000(ex_chans[index]), PREC1|TINSIZE); + lcdDrawNumber(127, 2, calcRESXto1000(ex_chans[index]), PREC1|TINSIZE|RIGHT); } SIMPLE_MENU(STR_MIXER, menuTabModel, e_MixAll, s_maxLines); @@ -556,7 +556,7 @@ void menuModelMixAll(uint8_t event) putsMixerSource(MIX_LINE_SRC_POS, y, md->srcRaw, 0); - gvarWeightItem(MIX_LINE_WEIGHT_POS, y, md, attr | (isMixActive(i) ? BOLD : 0), 0); + gvarWeightItem(MIX_LINE_WEIGHT_POS, y, md, RIGHT | attr | (isMixActive(i) ? BOLD : 0), 0); displayMixLine(y, md); diff --git a/radio/src/gui/taranis/menu_model_select.cpp b/radio/src/gui/taranis/menu_model_select.cpp index a783f7412..833743f77 100644 --- a/radio/src/gui/taranis/menu_model_select.cpp +++ b/radio/src/gui/taranis/menu_model_select.cpp @@ -220,9 +220,9 @@ void menuModelSelect(uint8_t event) break; } - lcdDrawText(27*FW-(LEN_FREE-4)*FW, 0, STR_FREE); - lcdDrawNumber(20*FW, 0, EeFsGetFree(), 0); - lcdDrawText(21*FW, 0, STR_BYTES); + lcdDrawNumber(19*FW, 0, EeFsGetFree(), RIGHT); + lcdDrawText(19*FW + 3, 0, STR_BYTES); + lcdDrawText(lcdLastPos + 3, 0, STR_FREE); drawScreenIndex(e_ModelSelect, DIM(menuTabModel), 0); lcdDrawFilledRect(0, 0, LCD_W, FH, SOLID, FILL_WHITE|GREY_DEFAULT); @@ -233,7 +233,7 @@ void menuModelSelect(uint8_t event) coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH; uint8_t k = i+menuVerticalOffset; - lcdDrawNumber(3*FW+2, y, k+1, LEADING0+((!s_copyMode && sub==k) ? INVERS : 0), 2); + lcdDrawNumber(3*FW+2, y, k+1, RIGHT|LEADING0|((!s_copyMode && sub==k) ? INVERS : 0), 2); if (s_copyMode == MOVE_MODE || (s_copyMode == COPY_MODE && s_copySrcRow >= 0)) { if (k == sub) { @@ -255,7 +255,7 @@ void menuModelSelect(uint8_t event) if (eeModelExists(k)) { putsModelName(4*FW, y, modelHeaders[k].name, k, 0); - lcdDrawNumber(20*FW, y, eeModelSize(k), 0); + lcdDrawNumber(20*FW, y, eeModelSize(k), RIGHT); if (k==g_eeGeneral.currModel && (s_copyMode!=COPY_MODE || s_copySrcRow<0 || i+menuVerticalOffset!=(vertpos_t)sub)) lcdDrawChar(1, y, '*'); } diff --git a/radio/src/gui/taranis/menu_model_setup.cpp b/radio/src/gui/taranis/menu_model_setup.cpp index 7eb688e21..08182e92d 100644 --- a/radio/src/gui/taranis/menu_model_setup.cpp +++ b/radio/src/gui/taranis/menu_model_setup.cpp @@ -127,8 +127,10 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) TimerData & timer = g_model.timers[timerIdx]; drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer.mode, menuHorizontalPosition==0 ? attr : 0); - putsTimer(MODEL_SETUP_3RD_COLUMN+5*FWNUM+2, y, timer.start, menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR, menuHorizontalPosition==2 ? attr|TIMEHOUR : TIMEHOUR); - if (attr && menuHorizontalPosition < 0) lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 13*FW-3, FH+1); + putsTimer(MODEL_SETUP_3RD_COLUMN, y, timer.start, menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR, menuHorizontalPosition==2 ? attr|TIMEHOUR : TIMEHOUR); + if (attr && menuHorizontalPosition < 0) { + lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 13*FW-3, FH+1); + } if (attr && s_editMode>0) { div_t qr = div(timer.start, 60); switch (menuHorizontalPosition) { @@ -843,7 +845,6 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); - #if defined(TARANIS_INTERNAL_PPM) if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); @@ -868,11 +869,11 @@ void menuModelSetup(uint8_t event) ModuleData & moduleData = g_model.moduleData[moduleIdx]; if (IS_MODULE_PPM(moduleIdx)) { lcd_putsLeft(y, STR_PPMFRAME); - lcdDrawText(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_MS); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, (int16_t)moduleData.ppm.frameLength*5 + 225, (menuHorizontalPosition<=0 ? attr : 0) | PREC1|LEFT); - lcdDrawChar(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u'); - lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (moduleData.ppm.delay*50)+300, (CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0); - lcdDrawChar(MODEL_SETUP_2ND_COLUMN+10*FW, y, moduleData.ppm.pulsePol ? '+' : '-', (CURSOR_ON_LINE() || menuHorizontalPosition==2) ? attr : 0); + lcdDrawText(lcdLastPos, y, STR_MS); + lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+6*FW, y, (moduleData.ppm.delay*50)+300, (CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0); + lcdDrawChar(lcdLastPos, y, 'u'); + lcdDrawChar(MODEL_SETUP_2ND_COLUMN+12*FW, y, moduleData.ppm.pulsePol ? '+' : '-', (CURSOR_ON_LINE() || menuHorizontalPosition==2) ? attr : 0); if (attr && s_editMode>0) { switch (menuHorizontalPosition) { diff --git a/radio/src/gui/taranis/menu_model_telemetry.cpp b/radio/src/gui/taranis/menu_model_telemetry.cpp index fb1e00932..e1813c730 100644 --- a/radio/src/gui/taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/taranis/menu_model_telemetry.cpp @@ -68,29 +68,6 @@ enum menuModelTelemetryItems { ITEM_TELEMETRY_VARIO_RANGE, ITEM_TELEMETRY_VARIO_CENTER, #endif - ITEM_TELEMETRY_TOP_BAR_LABEL, - ITEM_TELEMETRY_TOP_BAR_VOLTAGE, - ITEM_TELEMETRY_TOP_BAR_ALTITUDE, - ITEM_TELEMETRY_SCREEN_LABEL1, - ITEM_TELEMETRY_SCREEN_LINE1, - ITEM_TELEMETRY_SCREEN_LINE2, - ITEM_TELEMETRY_SCREEN_LINE3, - ITEM_TELEMETRY_SCREEN_LINE4, - ITEM_TELEMETRY_SCREEN_LABEL2, - ITEM_TELEMETRY_SCREEN_LINE5, - ITEM_TELEMETRY_SCREEN_LINE6, - ITEM_TELEMETRY_SCREEN_LINE7, - ITEM_TELEMETRY_SCREEN_LINE8, - ITEM_TELEMETRY_SCREEN_LABEL3, - ITEM_TELEMETRY_SCREEN_LINE9, - ITEM_TELEMETRY_SCREEN_LINE10, - ITEM_TELEMETRY_SCREEN_LINE11, - ITEM_TELEMETRY_SCREEN_LINE12, - ITEM_TELEMETRY_SCREEN_LABEL4, - ITEM_TELEMETRY_SCREEN_LINE13, - ITEM_TELEMETRY_SCREEN_LINE14, - ITEM_TELEMETRY_SCREEN_LINE15, - ITEM_TELEMETRY_SCREEN_LINE16, ITEM_TELEMETRY_MAX }; @@ -109,22 +86,9 @@ enum menuModelTelemetryItems { #define VARIO_ROWS #endif #define RSSI_ROWS LABEL(RSSI), 0, 0, -#if defined(LUA) - #define SCREEN_TYPE_ROWS 1 -#else - #define SCREEN_TYPE_ROWS 0 -#endif #define VARIO_RANGE_ROWS 3 #define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW, -#if defined(LUA) - #define TELEMETRY_SCREEN_LINE(x) ((TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE || TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_SCRIPT) ? HIDDEN_ROW : (uint8_t)2) -#else - #define TELEMETRY_SCREEN_LINE(x) (TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE ? HIDDEN_ROW : (uint8_t)2) -#endif -#define TELEMETRY_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x) -#define TELEMETRY_CURRENT_SCREEN(k) (k < ITEM_TELEMETRY_SCREEN_LABEL2 ? 0 : (k < ITEM_TELEMETRY_SCREEN_LABEL3 ? 1 : (k < ITEM_TELEMETRY_SCREEN_LABEL4 ? 2 : 3))) - enum SensorFields { SENSOR_FIELD_NAME, SENSOR_FIELD_TYPE, @@ -427,25 +391,6 @@ void onSensorMenu(const char *result) } } -#if defined(LUA) -void onTelemetryScriptFileSelectionMenu(const char *result) -{ - int screenIndex = TELEMETRY_CURRENT_SCREEN(menuVerticalPosition); - - if (result == STR_UPDATE_LIST) { - if (!sdListFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), NULL)) { - POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); - } - } - else { - // The user choosed a file in the list - memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file)); - storageDirty(EE_MODEL); - LUA_LOAD_MODEL_SCRIPTS(); - } -} -#endif - void menuModelTelemetry(uint8_t event) { if (warningResult) { @@ -455,7 +400,7 @@ void menuModelTelemetry(uint8_t event) } } - MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS VARIO_ROWS LABEL(TopBar), 0, 0, TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), TELEMETRY_SCREEN_ROWS(2), TELEMETRY_SCREEN_ROWS(3) }); + MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX, { TELEMETRY_TYPE_ROWS RSSI_ROWS SENSORS_ROWS VARIO_ROWS }); for (int i=0; i= ITEM_TELEMETRY_SCREEN_LABEL4) { - screenIndex = 3; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE13; - } - else if (k >= ITEM_TELEMETRY_SCREEN_LABEL3) { - screenIndex = 2; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE9; - } - else { - screenIndex = 1; - lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE5; - } - -#if defined(GAUGES) - if (IS_BARS_SCREEN(screenIndex)) { - FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex]; - source_t barSource = bar.source; - putsMixerSource(TELEM_COL1, y, barSource, menuHorizontalPosition==0 ? attr : 0); - int barMax = getMaximumValue(barSource); - int barMin = -barMax; - if (barSource) { - if (barSource <= MIXSRC_LAST_CH) { - putsChannelValue(TELEM_COL2, y, barSource, calc100toRESX(bar.barMin), (menuHorizontalPosition==1 ? attr : 0) | LEFT); - putsChannelValue(TELEM_COL3, y, barSource, calc100toRESX(bar.barMax), (menuHorizontalPosition==2 ? attr : 0) | LEFT); - } - else { - putsChannelValue(TELEM_COL2, y, barSource, bar.barMin, (menuHorizontalPosition==1 ? attr : 0) | LEFT); - putsChannelValue(TELEM_COL3, y, barSource, bar.barMax, (menuHorizontalPosition==2 ? attr : 0) | LEFT); - } - } - else if (attr) { - MOVE_CURSOR_FROM_HERE(); - } - if (attr && s_editMode>0) { - switch (menuHorizontalPosition) { - case 0: - bar.source = checkIncDec(event, barSource, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); - if (checkIncDec_Ret) { - if (barSource <= MIXSRC_LAST_CH) { - bar.barMin = -100; - bar.barMax = 100; - } - else { - bar.barMin = 0; - bar.barMax = 0; - } - } - break; - case 1: - bar.barMin = checkIncDec(event, bar.barMin, barMin, bar.barMax, EE_MODEL|NO_INCDEC_MARKS); - break; - case 2: - bar.barMax = checkIncDec(event, bar.barMax, bar.barMin, barMax, EE_MODEL|NO_INCDEC_MARKS); - break; - } - } - } - else -#endif - { - for (int c=0; c0) { - value = checkIncDec(event, value, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); - } - } - if (attr && menuHorizontalPosition == NUM_LINE_ITEMS) { - REPEAT_LAST_CURSOR_MOVE(); - } - } - break; - } } } } diff --git a/radio/src/gui/taranis/menus.h b/radio/src/gui/taranis/menus.h index be303f1db..65cff3ef7 100644 --- a/radio/src/gui/taranis/menus.h +++ b/radio/src/gui/taranis/menus.h @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -82,6 +82,7 @@ void menuModelLogicalSwitches(uint8_t event); void menuModelCustomFunctions(uint8_t event); void menuModelCustomScripts(uint8_t event); void menuModelTelemetry(uint8_t event); +void menuModelDisplay(uint8_t event); void menuModelExpoOne(uint8_t event); void menuGeneralSetup(uint8_t event); @@ -148,9 +149,9 @@ enum EnumTabModel { #if defined(LUA_MODEL_SCRIPTS) e_CustomScripts, #endif - CASE_FRSKY(e_Telemetry) + e_Telemetry, CASE_MAVLINK(e_MavSetup) - CASE_TEMPLATES(e_Templates) + e_Display, }; const MenuHandlerFunc menuTabModel[] = { @@ -170,9 +171,9 @@ const MenuHandlerFunc menuTabModel[] = { #if defined(LUA_MODEL_SCRIPTS) menuModelCustomScripts, #endif - CASE_FRSKY(menuModelTelemetry) + menuModelTelemetry, CASE_MAVLINK(menuTelemetryMavlinkSetup) - CASE_TEMPLATES(menuModelTemplates) + menuModelDisplay }; void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr); diff --git a/radio/src/gui/taranis/view_channels.cpp b/radio/src/gui/taranis/view_channels.cpp index 8f28ec738..777de1448 100644 --- a/radio/src/gui/taranis/view_channels.cpp +++ b/radio/src/gui/taranis/view_channels.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" void menuChannelsView(uint8_t event) { @@ -91,13 +91,13 @@ void menuChannelsView(uint8_t event) // Value #if defined(PPM_UNIT_US) uint8_t wbar = (longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, PPM_CH_CENTER(ch)+val/2, TINSIZE); + 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 = (longNames ? 48 : 58); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val), PREC1|TINSIZE); + lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val), PREC1|TINSIZE|RIGHT); #else uint8_t wbar = (longNames ? 54 : 64); - lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val)/10, TINSIZE); // G: Don't like the decimal part* + lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val)/10, TINSIZE|RIGHT); #endif // Gauge diff --git a/radio/src/gui/taranis/view_main.cpp b/radio/src/gui/taranis/view_main.cpp index 796365417..6927cd3bc 100644 --- a/radio/src/gui/taranis/view_main.cpp +++ b/radio/src/gui/taranis/view_main.cpp @@ -129,7 +129,7 @@ void displayTrims(uint8_t phase) } if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && trim != 0) { if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? 22 : 54, xm-2, -abs(trim), TINSIZE|VERTICAL); + lcdDrawNumber(trim>0 ? 22 : 54, xm-2, -abs(trim), RIGHT|TINSIZE|VERTICAL); } } } @@ -151,7 +151,7 @@ void displayTrims(uint8_t phase) } if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && trim != 0) { if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? -11 : 20), ym-2, -abs(trim), TINSIZE); + lcdDrawNumber((stickIndex==0 ? TRIM_LH_X : TRIM_RH_X)+(trim>0 ? -11 : 20), ym-2, -abs(trim), RIGHT|TINSIZE); } } } @@ -480,14 +480,12 @@ void menuMainView(uint8_t event) g_eeGeneral.view = 0; chainMenu(menuMainViewChannelsMonitor); } - AUDIO_KEY_PRESS(); break; case EVT_KEY_LONG(KEY_PAGE): if (!IS_FAI_ENABLED()) chainMenu(menuTelemetryFrsky); killEvents(event); - AUDIO_KEY_PRESS(); break; case EVT_KEY_FIRST(KEY_EXIT): diff --git a/radio/src/gui/taranis/view_statistics.cpp b/radio/src/gui/taranis/view_statistics.cpp index f9d42a892..ee48641ec 100644 --- a/radio/src/gui/taranis/view_statistics.cpp +++ b/radio/src/gui/taranis/view_statistics.cpp @@ -23,7 +23,7 @@ #define STATS_1ST_COLUMN FW/2 #define STATS_2ND_COLUMN 12*FW+FW/2 #define STATS_3RD_COLUMN 24*FW+FW/2 -#define STATS_LABEL_WIDTH 8*FW +#define STATS_LABEL_WIDTH 4*FW void menuStatisticsView(uint8_t event) { @@ -176,13 +176,13 @@ void menuStatisticsDebug(uint8_t event) lcd_putsLeft(MENU_DEBUG_Y_RTOS, STR_FREESTACKMINB); lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_RTOS+1, "[M]", SMLSIZE); - lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, menusStack.available(), UNSIGN|LEFT); + lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, menusStack.available(), LEFT); lcdDrawText(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[X]", SMLSIZE); - lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, mixerStack.available(), UNSIGN|LEFT); + lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, mixerStack.available(), LEFT); lcdDrawText(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[A]", SMLSIZE); - lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, audioStack.available(), UNSIGN|LEFT); + lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, audioStack.available(), LEFT); lcdDrawText(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[I]", SMLSIZE); - lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, stackAvailable(), UNSIGN|LEFT); + lcdDrawNumber(lcdLastPos, MENU_DEBUG_Y_RTOS, stackAvailable(), LEFT); lcdDrawText(3*FW, 7*FH+1, STR_MENUTORESET); lcdInvertLastLine(); diff --git a/radio/src/gui/taranis/view_telemetry.cpp b/radio/src/gui/taranis/view_telemetry.cpp index bf36080e6..df6e9af5d 100644 --- a/radio/src/gui/taranis/view_telemetry.cpp +++ b/radio/src/gui/taranis/view_telemetry.cpp @@ -23,10 +23,6 @@ #define STATUS_BAR_Y (7*FH+1) #define TELEM_2ND_COLUMN (11*FW) -#if defined(FRSKY_HUB) && defined(GAUGES) -bar_threshold_t barsThresholds[THLD_MAX]; -#endif - uint8_t s_frsky_view = 0; #define BAR_LEFT 30 @@ -37,7 +33,8 @@ void displayRssiLine() if (TELEMETRY_STREAMING()) { lcdDrawSolidHorizontalLine(0, 55, 212, 0); // separator uint8_t rssi = min((uint8_t)99, TELEMETRY_RSSI()); - lcdDrawSizedText(0, STATUS_BAR_Y, STR_RX, 2); lcdDrawNumber(4*FW, STATUS_BAR_Y, rssi, LEADING0, 2); + lcdDrawSizedText(0, STATUS_BAR_Y, STR_RX, 2); + lcdDrawNumber(4*FW, STATUS_BAR_Y, rssi, LEADING0|RIGHT, 2); lcdDrawRect(BAR_LEFT, 57, 78, 7); lcdDrawFilledRect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID); } @@ -119,7 +116,7 @@ bool displayNumbersTelemetryScreen(FrSkyScreenData & screen) if (field) { coord_t x = pos[j+1]-2; coord_t y = (i==3 ? 1+FH+2*FH*i:FH+2*FH*i); - LcdFlags att = (i==3 ? NO_UNIT : DBLSIZE|NO_UNIT); + LcdFlags att = RIGHT | (i==3 ? NO_UNIT : DBLSIZE|NO_UNIT); if (field >= MIXSRC_FIRST_TIMER && field <= MIXSRC_LAST_TIMER && i!=3) { // there is not enough space on LCD for displaying "Tmr1" or "Tmr2" and still see the - sign, we write "T1" or "T2" instead drawStringWithIndex(pos[j], 1+FH+2*FH*i, "T", field-MIXSRC_FIRST_TIMER+1, 0); @@ -158,11 +155,9 @@ void displayCustomTelemetryScreen(uint8_t index) { FrSkyScreenData & screen = g_model.frsky.screens[index]; -#if defined(GAUGES) if (IS_BARS_SCREEN(s_frsky_view)) { return displayGaugesTelemetryScreen(screen); } -#endif displayNumbersTelemetryScreen(screen); } diff --git a/radio/src/gui/taranis/widgets.cpp b/radio/src/gui/taranis/widgets.cpp index 23f73930f..348b321a7 100644 --- a/radio/src/gui/taranis/widgets.cpp +++ b/radio/src/gui/taranis/widgets.cpp @@ -18,7 +18,7 @@ * GNU General Public License for more details. */ -#include "../../opentx.h" +#include "opentx.h" const pm_uchar bmp_sleep[] PROGMEM = { #include "../../bitmaps/taranis/sleep.lbm" @@ -79,10 +79,10 @@ void drawCheckBox(coord_t x, coord_t y, uint8_t value, LcdFlags attr) void drawScreenIndex(uint8_t index, uint8_t count, uint8_t attr) { - lcdDrawNumber(LCD_W, 0, count, attr); + lcdDrawNumber(LCD_W, 0, count, RIGHT | attr); coord_t x = 1+LCD_W-FW*(count>9 ? 3 : 2); lcdDrawChar(x, 0, '/', attr); - lcdDrawNumber(x, 0, index+1, attr); + lcdDrawNumber(x, 0, index+1, RIGHT | attr); } void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible) @@ -198,9 +198,7 @@ int16_t editGVarFieldValue(coord_t x, coord_t y, int16_t value, int16_t min, int } if (GV_IS_GV_VALUE(value, min, max)) { - if (attr & LEFT) - attr -= LEFT; /* because of ZCHAR */ - else + if (attr & RIGHT) x -= 2*FW+FWNUM; attr &= ~PREC1; diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index b2bdaf3ee..7e9c46467 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -2,7 +2,7 @@ * Copyright (C) OpenTX * * Based on code named - * th9x - http://code.google.com/p/th9x + * th9x - http://code.google.com/p/th9x * er9x - http://code.google.com/p/er9x * gruvin9x - http://code.google.com/p/gruvin9x * @@ -417,11 +417,11 @@ case the returned value is 0): * key (number) cell number (1 to number of cells) * value (number) current cell voltage -@status current Introduced in 2.0.0, changed in 2.1.0, `Cels+` and +@status current Introduced in 2.0.0, changed in 2.1.0, `Cels+` and `Cels-` added in 2.1.9 @notice Getting a value by its numerical identifier is faster then by its name. -While `Cels` sensor returns current values of all cells in a table, a `Cels+` or +While `Cels` sensor returns current values of all cells in a table, a `Cels+` or `Cels-` will return a single value - the maximum or minimum Cels value. */ static int luaGetValue(lua_State *L) @@ -690,7 +690,7 @@ Returns (some of) the general radio settings * `language` (string) radio language (used for menus) * `voice` (string) voice language (used for speech) -@status current Introduced in 2.0.6, `imperial` added in TODO, +@status current Introduced in 2.0.6, `imperial` added in TODO, `language` and `voice` added int 2.2.0. */ @@ -754,24 +754,6 @@ static int luaPopupInput(lua_State *L) return 1; } -/*luadoc -@function toInt16(value) - -Convert an unsigned value to signed - -@param value (unsigned number) - -@retval number (signed number) - -@status current Introduced in 2.0.0 -*/ -static int luaToInt16(lua_State * L) -{ - int16_t val = (int16_t)luaL_checkunsigned(L, 1); - lua_pushinteger(L, val); - return 1; -} - /*luadoc @function defaultStick(channel) @@ -833,7 +815,6 @@ const luaL_Reg opentxLib[] = { { "defaultStick", luaDefaultStick }, { "defaultChannel", luaDefaultChannel }, { "killEvents", luaKillEvents }, - { "toInt16", luaToInt16 }, #if !defined(COLORLCD) { "GREY", luaGrey }, #endif @@ -851,11 +832,7 @@ const luaR_value_entry opentxConstants[] = { { "INVERS", INVERS }, { "BOLD", BOLD }, { "BLINK", BLINK }, -#if defined(COLORLCD) { "RIGHT", RIGHT }, -#else - { "FIXEDWIDTH", FIXEDWIDTH }, -#endif { "LEFT", LEFT }, { "PREC1", PREC1 }, { "PREC2", PREC2 }, @@ -877,9 +854,6 @@ const luaR_value_entry opentxConstants[] = { { "MIXSRC_SH", MIXSRC_SH }, { "MIXSRC_CH1", MIXSRC_CH1 }, { "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH }, -#if !defined(PCBHORUS) - { "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU) }, -#endif #if defined(COLORLCD) { "COLOR", ZoneOption::Color }, { "CUSTOM_COLOR", CUSTOM_COLOR }, @@ -918,8 +892,11 @@ const luaR_value_entry opentxConstants[] = { { "LIGHTGREY", (double)LIGHTGREY }, { "RED", (double)RED }, { "DARKRED", (double)DARKRED }, +#else + { "FIXEDWIDTH", FIXEDWIDTH }, #endif #if defined(PCBTARANIS) + { "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU) }, { "EVT_PAGE_BREAK", EVT_KEY_BREAK(KEY_PAGE) }, { "EVT_PAGE_LONG", EVT_KEY_LONG(KEY_PAGE) }, { "EVT_PLUS_BREAK", EVT_KEY_BREAK(KEY_PLUS) }, diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 60e31a5d4..3cb567436 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -95,7 +95,7 @@ bool checkScreenshot(const QString & test) TEST(outdezNAtt, test_unsigned) { lcdClear(); - lcdDrawNumber(0, 0, 65530, LEFT|UNSIGN); + lcdDrawNumber(0, 0, 65530, LEFT); EXPECT_TRUE(checkScreenshot("unsigned")) << "Unsigned numbers will be bad displayed"; } @@ -133,7 +133,7 @@ TEST(Lcd, Prec2_Left) TEST(Lcd, Prec2_Right) { lcdClear(); - lcdDrawNumber(LCD_W, LCD_H-FH, 2, PREC2); + lcdDrawNumber(LCD_W, LCD_H-FH, 2, PREC2|RIGHT); EXPECT_TRUE(checkScreenshot("prec2_right")); } @@ -141,7 +141,7 @@ TEST(Lcd, Prec2_Right) TEST(Lcd, Prec1_Dblsize_Invers) { lcdClear(); - lcdDrawNumber(LCD_W, 10, 51, PREC1|DBLSIZE|INVERS); + lcdDrawNumber(LCD_W, 10, 51, PREC1|DBLSIZE|INVERS|RIGHT); EXPECT_TRUE(checkScreenshot("prec1_dblsize_invers")); } #endif diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index bff5acc44..eb4d46e48 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -660,6 +660,7 @@ const pm_char STR_MODEL_SELECT[] PROGMEM = TR_MODEL_SELECT; const pm_char STR_MENU_CHANNELS[] PROGMEM = TR_MENU_CHANNELS; const pm_char STR_MENU_GVARS[] PROGMEM = TR_MENU_GVARS; const pm_char STR_MENU_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY; + const pm_char STR_MENU_DISPLAY[] PROGMEM = TR_MENU_DISPLAY; const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER; const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER; diff --git a/radio/src/translations.h b/radio/src/translations.h index 73d41e6bf..d8b26aa48 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -922,6 +922,7 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_MENU_CHANNELS[]; extern const pm_char STR_MENU_GVARS[]; extern const pm_char STR_MENU_TELEMETRY[]; + extern const pm_char STR_MENU_DISPLAY[]; extern const pm_char STR_MENU_OTHER[]; extern const pm_char STR_MENU_INVERT[]; extern const pm_char STR_JITTER_FILTER[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 028035967..ee11355df 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -1190,6 +1190,7 @@ #define TR_MENU_CHANNELS "\320Kanály" #define TR_MENU_GVARS "\311Glob.proměnné" #define TR_MENU_TELEMETRY "\321Telemetrie" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Ostatní" #define TR_MENU_INVERT "Invertovat" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index bd191a3e6..cfb21b526 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -1193,6 +1193,7 @@ #define TR_MENU_CHANNELS "\320Kanäle" #define TR_MENU_GVARS "\311Glob. Vars" #define TR_MENU_TELEMETRY "\321Telemetrie" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER " Weitere" #define TR_MENU_INVERT "Invertieren" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index bb6cf6f5e..8d75da291 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -1207,6 +1207,7 @@ #define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Other" #define TR_MENU_INVERT "Invert" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index dc989413b..29965036c 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1153,6 +1153,7 @@ #define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Other" #define TR_MENU_INVERT "Invert" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 04472f74b..53e453cde 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -1153,6 +1153,7 @@ #define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Other" #define TR_MENU_INVERT "Invert" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 8b43aee19..76bb92eee 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1180,6 +1180,7 @@ #define TR_MENU_CHANNELS "\320Canaux" #define TR_MENU_GVARS "\311Vars. glob." #define TR_MENU_TELEMETRY "\321Télémesure" +#define TR_MENU_DISPLAY "AFFICHAGE" #define TR_MENU_OTHER "Autres" #define TR_MENU_INVERT "Inverser" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 0651fd18e..d062a85c3 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1189,6 +1189,7 @@ #define TR_MENU_CHANNELS "\320Canali" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Altro" #define TR_MENU_INVERT "Inverti" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index e05fa28d6..b8492f15e 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -1204,6 +1204,7 @@ #define TR_MENU_CHANNELS "\320Kanalen" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetrie" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Verdere" #define TR_MENU_INVERT "Inverteer" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index a23dd4ffb..e3a3d4013 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1191,6 +1191,7 @@ #define TR_MENU_CHANNELS "\320Kanały " #define TR_MENU_GVARS "\311ZmGlo" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Inny " #define TR_MENU_INVERT "Odwróć" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 53b9cc56d..0561b63ef 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -1149,6 +1149,7 @@ #define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetry" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Other" #define TR_MENU_INVERT "Invert" #define TR_JITTER_FILTER "ADC Filter" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index e090460ab..0f44ceafb 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1205,6 +1205,7 @@ #define TR_MENU_CHANNELS "\320Servon" #define TR_MENU_GVARS "\311GVars" #define TR_MENU_TELEMETRY "\321Telemetri" +#define TR_MENU_DISPLAY "DISPLAY" #define TR_MENU_OTHER "Annat" #define TR_MENU_INVERT "Invertera" #define TR_JITTER_FILTER "ADC Filter"