1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-24 16:55:15 +03:00

[Taranis] RIGHT attribute added + TELEMETRY page splitted

This commit is contained in:
Bertrand Songis 2016-05-18 21:52:00 +02:00
parent 5d42c437a8
commit 9056e76460
40 changed files with 513 additions and 441 deletions

View file

@ -184,7 +184,7 @@ elseif(PCB STREQUAL TARANIS)
add_definitions(-DPCBTARANIS) add_definitions(-DPCBTARANIS)
add_definitions(-DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DAUDIO -DVOICE -DRTCLOCK)
add_definitions(-DDBLKEYS -DVIRTUALINPUTS -DLUAINPUTS -DXCURVES -DVARIO) 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(TARGET_SRC ${TARGET_SRC} board_taranis.cpp rtc_driver.cpp)
set(FIRMWARE_SRC ${FIRMWARE_SRC} loadboot.cpp) set(FIRMWARE_SRC ${FIRMWARE_SRC} loadboot.cpp)
set(FIRMWARE_TARGET_SRC set(FIRMWARE_TARGET_SRC

View file

@ -42,6 +42,30 @@ void lcdClear()
coord_t lcdLastPos; coord_t lcdLastPos;
coord_t lcdNextPos; 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; i<pattern->width; i++) {
for (uint8_t j=0; j<lines; j++) {
if (data[j] != 0xff) {
result += 1;
break;
}
}
data += lines;
}
return result;
}
void lcdPutPattern(coord_t x, coord_t y, const uint8_t * pattern, uint8_t width, uint8_t height, LcdFlags flags) void lcdPutPattern(coord_t x, coord_t y, const uint8_t * pattern, uint8_t width, uint8_t height, LcdFlags flags)
{ {
bool blink = false; bool blink = false;
@ -93,10 +117,6 @@ void lcdPutPattern(coord_t x, coord_t y, const uint8_t * pattern, uint8_t width,
continue; continue;
} }
} }
if ((flags & CONDENSED) && i==2) {
/*condense the letter by skipping column 3 */
continue;
}
} }
for (int8_t j=-1; j<=height; j++) { for (int8_t j=-1; j<=height; j++) {
@ -127,13 +147,9 @@ void lcdPutPattern(coord_t x, coord_t y, const uint8_t * pattern, uint8_t width,
} }
} }
void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags flags)
{
const pm_uchar * q;
lcdNextPos = x-1;
#if !defined(BOOT) #if !defined(BOOT)
void getCharPattern(PatternData * pattern, unsigned char c, LcdFlags flags)
{
uint32_t fontsize = FONTSIZE(flags); uint32_t fontsize = FONTSIZE(flags);
unsigned char c_remapped = 0; unsigned char c_remapped = 0;
@ -153,48 +169,68 @@ void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags flags)
} }
if (fontsize == DBLSIZE) { if (fontsize == DBLSIZE) {
pattern->width = 10;
pattern->height = 16;
if (c >= 0xC0) { if (c >= 0xC0) {
q = &font_10x14_extra[((uint16_t)(c-0xC0))*20]; pattern->data = &font_10x14_extra[((uint16_t)(c-0xC0))*20];
} }
else { else {
if (c >= 128) if (c >= 128)
c_remapped = c - 60; 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) { else if (fontsize == XXLSIZE) {
q = &font_22x38_num[((uint16_t)c-'0'+5)*110]; pattern->width = 22;
lcdPutPattern(x, y, q, 22, 38, flags); pattern->height = 38;
pattern->data = &font_22x38_num[((uint16_t)c-'0'+5)*110];
} }
else if (fontsize == MIDSIZE) { else if (fontsize == MIDSIZE) {
q = &font_8x10[((uint16_t)c-0x20)*16]; pattern->width = 8;
lcdPutPattern(x, y, q, 8, 12, flags); pattern->height = 12;
pattern->data = &font_8x10[((uint16_t)c-0x20)*16];
} }
else if (fontsize == SMLSIZE) { else if (fontsize == SMLSIZE) {
q = (c < 0xc0 ? &font_4x6[(c-0x20)*5] : &font_4x6_extra[(c-0xc0)*5]); pattern->width = 5;
lcdPutPattern(x, y, q, 5, 6, flags); pattern->height = 6;
pattern->data = (c < 0xc0 ? &font_4x6[(c-0x20)*5] : &font_4x6_extra[(c-0xc0)*5]);
} }
else if (fontsize == TINSIZE) { else if (fontsize == TINSIZE) {
q = &font_3x5[((uint16_t)c-0x20)*3]; pattern->width = 3;
lcdPutPattern(x, y, q, 3, 5, flags); pattern->height = 5;
pattern->data = &font_3x5[((uint16_t)c-0x20)*3];
} }
#if defined(BOLD_FONT)
else if (flags & BOLD) { else if (flags & BOLD) {
q = &font_5x7_B[c_remapped*5]; pattern->width = 5;
lcdPutPattern(x, y, q, 5, 7, flags); 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 #endif
else
#endif void lcdDrawChar(coord_t x, coord_t y, const unsigned char c, LcdFlags flags)
{ {
#if !defined(BOOT) lcdNextPos = x-1;
q = (c < 0xC0) ? &font_5x7[(c-0x20)*5] : &font_5x7_extra[(c-0xC0)*5]; #if defined(BOOT)
const uint8_t * data = &font_5x7[(c-0x20)*5];
lcdPutPattern(x, y, data, 5, 7, flags);
#else #else
q = &font_5x7[(c-0x20)*5]; PatternData pattern;
getCharPattern(&pattern, c, flags);
lcdPutPattern(x, y, pattern.data, pattern.width, pattern.height, flags);
#endif #endif
lcdPutPattern(x, y, q, 5, 7, flags);
}
} }
void lcdDrawChar(coord_t x, coord_t y, const unsigned char c) 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); 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 coord_t orig_x = x;
const uint8_t orig_len = len; const uint8_t orig_len = len;
uint32_t fontsize = FONTSIZE(flags); uint32_t fontsize = FONTSIZE(flags);
bool setx = false; bool setx = false;
uint8_t width = 0;
#if !defined(BOOT)
if (flags & RIGHT) {
width = getTextWidth(s, len, flags);
x -= width;
}
#endif
while (len--) { while (len--) {
#if defined(BOOT) #if defined(BOOT)
unsigned char c = *s; 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++; s++;
} }
lcdLastPos = x; lcdLastPos = x;
lcdNextPos = x; lcdNextPos = x;
if (fontsize == MIDSIZE) if (fontsize == MIDSIZE)
lcdLastPos += 1; lcdLastPos += 1;
if (flags & RIGHT) {
lcdLastPos -= width;
lcdNextPos -= width;
}
} }
void lcdDrawSizedText(coord_t x, coord_t y, const pm_char * s, uint8_t len) 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) void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags flags)
{ {
x += FWNUM*4+1; for (int i=12; i>=0; i-=4) {
for (int i=0; i<4; i++) { char c = (val >> i) & 0xf;
x -= FWNUM;
char c = val & 0xf;
c = c>9 ? c+'A'-10 : c+'0'; c = c>9 ? c+'A'-10 : c+'0';
lcdDrawChar(x, y, c, flags|(c>='A' ? CONDENSED : 0)); lcdDrawChar(x, y, c, flags);
val >>= 4; 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 tinsize = (fontsize == TINSIZE);
bool neg = false; bool neg = false;
if (flags & UNSIGN) { if (val < 0) {
flags -= UNSIGN;
}
else if (val < 0) {
neg = true; neg = true;
val = -val; val = -val;
} }
@ -349,16 +411,14 @@ void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t le
fw -= 1; fw -= 1;
} }
else { else {
if (flags & LEFT) { if (!(flags & RIGHT)) {
if (mode > 0) if (mode > 0)
x += 2; x += 2;
} }
#if defined(BOLD_FONT)
if (flags & BOLD) fw += 1; if (flags & BOLD) fw += 1;
#endif
} }
if (flags & LEFT) { if (!(flags & RIGHT)) {
x += len * fw; x += len * fw;
if (neg) { if (neg) {
x += ((xxlsize|dblsize|midsize) ? 7 : FWNUM); 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; LcdFlags f = flags;
lcdDrawChar(x, y, c, f); lcdDrawChar(x, y, c, f);
if (mode == i) { if (mode == i) {
flags &= ~PREC2; // TODO not needed but removes 20bytes, could be improved for sure, check asm
if (dblsize) { if (dblsize) {
xn = x - 2; xn = x - 2;
if (c>='2' && c<='3') ln++; 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; val = qr.quot;
x -= fw; x -= fw;
#if defined(BOLD_FONT) && !defined(CPUM64) || defined(EXTSTD)
if (i==len && (flags & BOLD)) x += 1; if (i==len && (flags & BOLD)) x += 1;
#endif
} }
if (xn) { if (xn) {
@ -525,15 +582,15 @@ void lcdDrawTelemetryTopBar()
{ {
putsModelName(0, 0, g_model.header.name, g_eeGeneral.currModel, 0); putsModelName(0, 0, g_model.header.name, g_eeGeneral.currModel, 0);
uint8_t att = (IS_TXBATT_WARNING() ? BLINK : 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) { if (g_model.timers[0].mode) {
att = (timersStates[0].val<0 ? BLINK : 0); 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); putsMixerSource(18*FW+2, 1, MIXSRC_TIMER1, SMLSIZE);
} }
if (g_model.timers[1].mode) { if (g_model.timers[1].mode) {
att = (timersStates[1].val<0 ? BLINK : 0); 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); putsMixerSource(27*FW+2, 1, MIXSRC_TIMER2, SMLSIZE);
} }
lcdInvertLine(0); lcdInvertLine(0);
@ -548,7 +605,8 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2
{ {
div_t qr; div_t qr;
if (!(att & LEFT)) { if (att & RIGHT) {
att -= RIGHT;
if (att & DBLSIZE) if (att & DBLSIZE)
x -= 5*(2*FWNUM)-4; x -= 5*(2*FWNUM)-4;
else if (att & MIDSIZE) else if (att & MIDSIZE)
@ -577,12 +635,13 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2
else else
x += 13; x += 13;
} }
lcdDrawNumber(x, y, qr.quot, att|LEADING0|LEFT, 2); lcdDrawNumber(x, y, qr.quot, att|LEADING0|LEFT, 2);
if (att & TIMEBLINK) if (att & TIMEBLINK)
lcdDrawChar(lcdLastPos, y, separator, BLINK); lcdDrawChar(lcdLastPos, y, separator, BLINK);
else else
lcdDrawChar(lcdLastPos, y, separator, att&att2); 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 // 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) #if defined(FLIGHT_MODES)
void putsFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att) 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)
if (idx < 0) { lcdDrawChar(x-2, y, '!', att); idx = -idx; } lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, att);
if (att & CONDENSED)
lcdDrawNumber(x+FW*1, y, idx-1, (att & ~CONDENSED), 1);
else else
drawStringWithIndex(x, y, STR_FP, idx-1, att); 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.id >= RBOX_STATE_FIRST_ID && telemetrySensor.id <= RBOX_STATE_LAST_ID) {
if (telemetrySensor.subId == 0) { if (telemetrySensor.subId == 0) {
if (value == 0) { if (value == 0) {
lcdDrawText(att & LEFT ? x : x-15, att & DBLSIZE ? y+1 : y, "OK"); lcdDrawText(x, y, "OK", att);
} }
else { else {
for (uint8_t i=0; i<16; i++) { for (uint8_t i=0; i<16; i++) {
if (value & (1 << i)) { if (value & (1 << i)) {
drawStringWithIndex(att & LEFT ? x : x-40, att & DBLSIZE ? y+1 : y, "CH", i+1); char s[] = "CH__ KO";
lcdDrawText(lcdLastPos+3, att & DBLSIZE ? y+1 : y, "KO"); strAppendUnsigned(&s[2], i+1, 2);
lcdDrawText(x, att & DBLSIZE ? y+1 : y, s, att & ~DBLSIZE);
break; break;
} }
} }
@ -970,7 +1028,7 @@ void putsTelemetryChannelValue(coord_t x, coord_t y, uint8_t channel, int32_t va
} }
else { else {
if (value == 0) { if (value == 0) {
lcdDrawText(x, att & DBLSIZE ? y+1 : y, "Rx OK"); lcdDrawText(x, att & DBLSIZE ? y+1 : y, "Rx OK", att & ~DBLSIZE);
} }
else { else {
static const char * const RXS_STATUS[] = { 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<DIM(RXS_STATUS); i++) { for (uint8_t i=0; i<DIM(RXS_STATUS); i++) {
if (value & (1<<i)) { if (value & (1<<i)) {
lcdDrawText(att & LEFT ? x : x-40, att & DBLSIZE ? y+1 : y, RXS_STATUS[i]); lcdDrawText(x, att & DBLSIZE ? y+1 : y, RXS_STATUS[i], att & ~DBLSIZE);
break; break;
} }
} }

View file

@ -40,32 +40,22 @@
#define LCD_LINES (LCD_H/FH) #define LCD_LINES (LCD_H/FH)
#define LCD_COLS (LCD_W/FW) #define LCD_COLS (LCD_W/FW)
/* lcd common flags */ /* lcdDrawText flags */
#define BLINK 0x01 #define BLINK 0x01
/* lcd text flags */
#define INVERS 0x02 #define INVERS 0x02
#if defined(BOLD_FONT) #define BOLD 0x04
#define BOLD 0x04 #define LEFT 0x00
#else #define RIGHT 0x08
#define BOLD 0x00
#endif
/* lcd putc flags */
#define CONDENSED 0x08 // TODO remove on TARANIS
#define FIXEDWIDTH 0x10 #define FIXEDWIDTH 0x10
/* lcd puts flags */
/* no 0x80 here because of "GV"1 which is aligned LEFT */ /* no 0x80 here because of "GV"1 which is aligned LEFT */
/* no 0x10 here because of "MODEL"01 which uses LEADING0 */ /* no 0x10 here because of "MODEL"01 which uses LEADING0 */
#define ZCHAR 0x80 #define ZCHAR 0x80
/* lcd outdez flags */ /* lcdDrawNumber additional flags */
#define UNSIGN 0x08
#define LEADING0 0x10 #define LEADING0 0x10
#define PREC1 0x20 #define PREC1 0x20
#define PREC2 0x30 #define PREC2 0x30
#define MODE(flags) ((((int8_t)(flags) & 0x30) - 0x10) >> 4) #define MODE(flags) ((((int8_t)(flags) & 0x30) - 0x10) >> 4)
#define LEFT 0x80 /* align left */
/* line, rect, square flags */ /* line, rect, square flags */
#define FORCE 0x02 #define FORCE 0x02

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
#define XPOT_DELTA 10 #define XPOT_DELTA 10
#define XPOT_DELAY 10 /* cycles */ #define XPOT_DELAY 10 /* cycles */
@ -191,7 +191,7 @@ void menuCommonCalib(uint8_t event)
steps = calib->count + 1; steps = calib->count + 1;
} }
if (steps > 0 && steps <= XPOTS_MULTIPOS_COUNT) { 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 #endif

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
void menuGeneralDiagAna(uint8_t event) void menuGeneralDiagAna(uint8_t event)
{ {
@ -33,11 +33,11 @@ void menuGeneralDiagAna(uint8_t event)
lcdDrawChar(x+2*FW-2, y, ':'); lcdDrawChar(x+2*FW-2, y, ':');
lcdDrawHexNumber(x+3*FW-1, y, anaIn(i)); lcdDrawHexNumber(x+3*FW-1, y, anaIn(i));
#if defined(JITTER_MEASURE) #if defined(JITTER_MEASURE)
lcdDrawNumber(x+10*FW-1, y, rawJitter[i].get()); lcdDrawNumber(x+10*FW-1, y, rawJitter[i].get(), RIGHT);
lcdDrawNumber(x+13*FW-1, y, avgJitter[i].get()); lcdDrawNumber(x+13*FW-1, y, avgJitter[i].get(), RIGHT);
lcdDrawNumber(x+17*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256); lcdDrawNumber(x+17*FW-1, y, (int16_t)calibratedStick[CONVERT_MODE(i)]*25/256, RIGHT);
#else #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 #endif
} }

View file

@ -136,11 +136,11 @@ void menuGeneralSetup(uint8_t event)
uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0);
switch (j) { switch (j) {
case 0: 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); if (rowattr && s_editMode>0) t.tm_year = checkIncDec(event, t.tm_year, 112, 200, 0);
break; break;
case 1: 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); if (rowattr && s_editMode>0) t.tm_mon = checkIncDec(event, t.tm_mon, 0, 11, 0);
break; break;
case 2: 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); 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 }; 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]); 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); if (rowattr && s_editMode>0) t.tm_mday = checkIncDec(event, t.tm_mday, 1, dlim, 0);
break; break;
} }
@ -168,15 +168,15 @@ void menuGeneralSetup(uint8_t event)
uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0); uint8_t rowattr = (menuHorizontalPosition==j ? attr : 0);
switch (j) { switch (j) {
case 0: 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); if (rowattr && s_editMode>0) t.tm_hour = checkIncDec(event, t.tm_hour, 0, 23, 0);
break; break;
case 1: 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); if (rowattr && s_editMode>0) t.tm_min = checkIncDec(event, t.tm_min, 0, 59, 0);
break; break;
case 2: 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); if (rowattr && s_editMode>0) t.tm_sec = checkIncDec(event, t.tm_sec, 0, 59, 0);
break; break;
} }

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
#define TRAINER_CALIB_POS 12 #define TRAINER_CALIB_POS 12
@ -59,7 +59,7 @@ void menuGeneralTrainer(uint8_t event)
break; break;
case 1: 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); if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->studWeight, -125, 125);
break; break;
@ -74,7 +74,7 @@ void menuGeneralTrainer(uint8_t event)
attr = (sub==5) ? blink : 0; attr = (sub==5) ? blink : 0;
lcd_putsLeft(MENU_HEADER_HEIGHT+1+5*FH, STR_MULTIPLIER); 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); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40);
attr = (sub==6) ? INVERS : 0; attr = (sub==6) ? INVERS : 0;
@ -83,9 +83,9 @@ void menuGeneralTrainer(uint8_t event)
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
uint8_t x = (i*TRAINER_CALIB_POS+16)*FW/2; uint8_t x = (i*TRAINER_CALIB_POS+16)*FW/2;
#if defined (PPM_UNIT_PERCENT_PREC1) #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 #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 #endif
} }

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * 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_1ST_COLUMN (4*FW+2)
#define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*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); lcdDrawText(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, "1x", attr);
} }
else { 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); 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); 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);

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
void onModelCustomScriptMenu(const char *result) void onModelCustomScriptMenu(const char *result)
{ {
@ -111,14 +111,14 @@ void menuModelCustomScriptOne(uint8_t event)
for (int i=0; i<scriptInputsOutputs[s_currIdx].outputsCount; i++) { for (int i=0; i<scriptInputsOutputs[s_currIdx].outputsCount; i++) {
putsMixerSource(SCRIPT_ONE_3RD_COLUMN_POS+INDENT_WIDTH, FH+1+FH+i*FH, MIXSRC_FIRST_LUA+(s_currIdx*MAX_SCRIPT_OUTPUTS)+i, 0); putsMixerSource(SCRIPT_ONE_3RD_COLUMN_POS+INDENT_WIDTH, FH+1+FH+i*FH, MIXSRC_FIRST_LUA+(s_currIdx*MAX_SCRIPT_OUTPUTS)+i, 0);
lcdDrawNumber(SCRIPT_ONE_3RD_COLUMN_POS+11*FW+3, FH+1+FH+i*FH, calcRESXto1000(scriptInputsOutputs[s_currIdx].outputs[i].value), PREC1); lcdDrawNumber(SCRIPT_ONE_3RD_COLUMN_POS+11*FW+3, FH+1+FH+i*FH, calcRESXto1000(scriptInputsOutputs[s_currIdx].outputs[i].value), PREC1|RIGHT);
} }
} }
} }
void menuModelCustomScripts(uint8_t event) void menuModelCustomScripts(uint8_t event)
{ {
lcdDrawNumber(19*FW, 0, luaGetMemUsed(), 0); lcdDrawNumber(19*FW, 0, luaGetMemUsed(), RIGHT);
lcdDrawText(19*FW+1, 0, STR_BYTES); lcdDrawText(19*FW+1, 0, STR_BYTES);
MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS, { NAVIGATION_LINE_BY_LINE|3/*repeated*/ }); MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS, { NAVIGATION_LINE_BY_LINE|3/*repeated*/ });
@ -150,7 +150,7 @@ void menuModelCustomScripts(uint8_t event)
lcdDrawText(29*FW+2, y, "(killed)"); lcdDrawText(29*FW+2, y, "(killed)");
break; break;
default: default:
lcdDrawNumber(34*FW, y, luaGetCpuUsed(scriptIndex)); lcdDrawNumber(34*FW, y, luaGetCpuUsed(scriptIndex), RIGHT);
lcdDrawChar(34*FW, y, '%'); lcdDrawChar(34*FW, y, '%');
break; break;
} }

View file

@ -0,0 +1,257 @@
/*
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "opentx.h"
enum menuModelDisplayItems {
ITEM_DISPLAY_TOP_BAR_LABEL,
ITEM_DISPLAY_TOP_BAR_VOLTAGE,
ITEM_DISPLAY_TOP_BAR_ALTITUDE,
ITEM_DISPLAY_SCREEN_LABEL1,
ITEM_DISPLAY_SCREEN_LINE1,
ITEM_DISPLAY_SCREEN_LINE2,
ITEM_DISPLAY_SCREEN_LINE3,
ITEM_DISPLAY_SCREEN_LINE4,
ITEM_DISPLAY_SCREEN_LABEL2,
ITEM_DISPLAY_SCREEN_LINE5,
ITEM_DISPLAY_SCREEN_LINE6,
ITEM_DISPLAY_SCREEN_LINE7,
ITEM_DISPLAY_SCREEN_LINE8,
ITEM_DISPLAY_SCREEN_LABEL3,
ITEM_DISPLAY_SCREEN_LINE9,
ITEM_DISPLAY_SCREEN_LINE10,
ITEM_DISPLAY_SCREEN_LINE11,
ITEM_DISPLAY_SCREEN_LINE12,
ITEM_DISPLAY_SCREEN_LABEL4,
ITEM_DISPLAY_SCREEN_LINE13,
ITEM_DISPLAY_SCREEN_LINE14,
ITEM_DISPLAY_SCREEN_LINE15,
ITEM_DISPLAY_SCREEN_LINE16,
ITEM_DISPLAY_MAX
};
#define DISPLAY_COL1 (1*FW)
#define DISPLAY_COL2 (16*FW)
#define DISPLAY_COL3 (28*FW+2)
#if defined(LUA)
#define SCREEN_TYPE_ROWS 1
#define DISPLAY_LINE_ROWS(x) ((TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE || TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_SCRIPT) ? HIDDEN_ROW : (uint8_t)2)
#else
#define SCREEN_TYPE_ROWS 0
#define DISPLAY_LINE_ROWS(x) (TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE ? HIDDEN_ROW : (uint8_t)2)
#endif
#define TELEMETRY_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, DISPLAY_LINE_ROWS(x), DISPLAY_LINE_ROWS(x), DISPLAY_LINE_ROWS(x), DISPLAY_LINE_ROWS(x)
#define TELEMETRY_CURRENT_SCREEN(k) (k < ITEM_DISPLAY_SCREEN_LABEL2 ? 0 : (k < ITEM_DISPLAY_SCREEN_LABEL3 ? 1 : (k < ITEM_DISPLAY_SCREEN_LABEL4 ? 2 : 3)))
#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 menuModelDisplay(uint8_t event)
{
MENU(STR_MENU_DISPLAY, menuTabModel, e_Display, ITEM_DISPLAY_MAX, { LABEL(TopBar), 0, 0, TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), TELEMETRY_SCREEN_ROWS(2), TELEMETRY_SCREEN_ROWS(3) });
for (int i=0; i<NUM_BODY_LINES; i++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH;
int k = i + menuVerticalOffset;
for (int j=0; j<=k; j++) {
if (mstate_tab[j] == HIDDEN_ROW)
k++;
}
LcdFlags blink = ((s_editMode>0) ? 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; c<NUM_LINE_ITEMS; c++) {
LcdFlags cellAttr = (menuHorizontalPosition==c ? attr : 0);
source_t & value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c];
const coord_t pos[] = {DISPLAY_COL1, DISPLAY_COL2, DISPLAY_COL3};
putsMixerSource(pos[c], y, value, cellAttr);
if (cellAttr && s_editMode>0) {
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;
}
}
}
}

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
void displayFlightModes(coord_t x, coord_t y, FlightModesType value) 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: 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); if (active) p->fadeIn = checkIncDec(event, p->fadeIn, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS);
break; break;
case ITEM_FLIGHT_MODES_FADE_OUT: 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); if (active) p->fadeOut = checkIncDec(event, p->fadeOut, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS);
break; break;

View file

@ -131,7 +131,7 @@ void onGVARSMenu(const char *result)
} }
#define GVARS_COLUMNS (NAVIGATION_LINE_BY_LINE|(MAX_FLIGHT_MODES-1)) #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) void menuModelGVars(uint8_t event)
{ {
@ -142,7 +142,7 @@ void menuModelGVars(uint8_t event)
if (after2seconds) { if (after2seconds) {
menuTitle = STR_GVARS; menuTitle = STR_GVARS;
for (int i=0; i<MAX_GVARS; i++) { for (int i=0; i<MAX_GVARS; i++) {
drawStringWithIndex(GVARS_FM_COLUMN(i)-16, 1, STR_FP, i, SMLSIZE|(getFlightMode()==i ? INVERS : 0)); drawStringWithIndex(GVARS_FM_COLUMN(i), 1, STR_FP, i, SMLSIZE|(getFlightMode()==i ? INVERS : 0));
} }
} }
else { else {
@ -166,7 +166,6 @@ void menuModelGVars(uint8_t event)
LcdFlags attr = ((sub == i && menuHorizontalPosition == j) ? (s_editMode > 0 ? BLINK | INVERS : INVERS) : 0); LcdFlags attr = ((sub == i && menuHorizontalPosition == j) ? (s_editMode > 0 ? BLINK | INVERS : INVERS) : 0);
coord_t x = GVARS_FM_COLUMN(j); coord_t x = GVARS_FM_COLUMN(j);
if (v > GVAR_MAX) { if (v > GVAR_MAX) {
x -= 16;
attr |= SMLSIZE; attr |= SMLSIZE;
} }
else if (g_model.gvars[i].prec > 0 || abs(v) >= 100) { else if (g_model.gvars[i].prec > 0 || abs(v) >= 100) {

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
enum menuModelHeliItems { enum menuModelHeliItems {
ITEM_HELI_SWASHTYPE, ITEM_HELI_SWASHTYPE,
@ -65,7 +65,7 @@ void menuModelHeli(uint8_t event)
case ITEM_HELI_ELE_WEIGHT: case ITEM_HELI_ELE_WEIGHT:
lcdDrawText(INDENT_WIDTH, y, STR_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); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.elevatorWeight, -100, 100);
break; break;
@ -77,7 +77,7 @@ void menuModelHeli(uint8_t event)
case ITEM_HELI_AIL_WEIGHT: case ITEM_HELI_AIL_WEIGHT:
lcdDrawText(INDENT_WIDTH, y, STR_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); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.aileronWeight, -100, 100);
break; break;
@ -89,7 +89,7 @@ void menuModelHeli(uint8_t event)
case ITEM_HELI_COL_WEIGHT: case ITEM_HELI_COL_WEIGHT:
lcdDrawText(INDENT_WIDTH, y, STR_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); if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.collectiveWeight, -100, 100);
break; break;
} }

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * 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_2ND_COLUMN (LCD_W-8*FW-90)
#define EXPO_ONE_FM_WIDTH (9*FW) #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); if (ed->scale > 0) x512 = (x512 * 1024) / convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale);
} }
else { 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); x512 = limit(-1024, x512, 1024);
int y512 = expoFn(x512); int y512 = expoFn(x512);
y512 = limit(-1024, y512, 1024); 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); x512 = X0+x512/(RESX/WCHART);
y512 = (LCD_H-1) - ((y512+RESX)/2) * (LCD_H-1) / RESX; y512 = (LCD_H-1) - ((y512+RESX)/2) * (LCD_H-1) / RESX;
@ -481,13 +481,13 @@ void menuModelExposAll(uint8_t event)
break; 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)); lcdDrawText(FW*sizeof(TR_MENUINPUTS)+FW+FW/2, 0, STR_MAX(MAX_EXPOS));
// Value // Value
uint8_t index = expoAddress(s_currIdx)->chn; uint8_t index = expoAddress(s_currIdx)->chn;
if (!s_currCh) { 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); 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) { if (cur-menuVerticalOffset >= 0 && cur-menuVerticalOffset < NUM_BODY_LINES) {
uint8_t attr = ((s_copyMode || sub != cur) ? 0 : INVERS); 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); displayExpoLine(y, ed);
if (ed->mode!=3) { if (ed->mode!=3) {
lcdDrawChar(EXPO_LINE_SIDE_POS, y, ed->mode == 2 ? 126 : 127); lcdDrawChar(EXPO_LINE_SIDE_POS, y, ed->mode == 2 ? 126 : 127);

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
bool isThrottleOutput(uint8_t ch) bool isThrottleOutput(uint8_t ch)
{ {
@ -49,25 +49,24 @@ enum LimitsItems {
ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1 ITEM_LIMITS_MAXROW = ITEM_LIMITS_COUNT-1
}; };
#define LIMITS_NAME_POS 4*FW #define LIMITS_NAME_POS 4*FW
#define LIMITS_OFFSET_POS 14*FW+4 #define LIMITS_OFFSET_POS 14*FW+4
#define LIMITS_MIN_POS 20*FW-3 #define LIMITS_MIN_POS 20*FW-3
#if defined(PPM_CENTER_ADJUSTABLE) #if defined(PPM_CENTER_ADJUSTABLE)
#define LIMITS_DIRECTION_POS 20*FW-3 #define LIMITS_DIRECTION_POS 20*FW-3
#define LIMITS_MAX_POS 24*FW+2 #define LIMITS_MAX_POS 24*FW+2
#define LIMITS_REVERT_POS 25*FW-1 #define LIMITS_REVERT_POS 25*FW-1
#define LIMITS_CURVE_POS 27*FW-1 #define LIMITS_CURVE_POS 27*FW-1
#define LIMITS_PPM_CENTER_POS 34*FW #define LIMITS_PPM_CENTER_POS 34*FW
#else #else
#define LIMITS_DIRECTION_POS 21*FW #define LIMITS_DIRECTION_POS 21*FW
#define LIMITS_MAX_POS 26*FW #define LIMITS_MAX_POS 26*FW
#define LIMITS_REVERT_POS 27*FW #define LIMITS_REVERT_POS 27*FW
#define LIMITS_CURVE_POS 32*FW-3 #define LIMITS_CURVE_POS 32*FW-3
#endif #endif
#define LIMITS_MIN_MAX_OFFSET 1000 #define LIMITS_MIN_MAX_OFFSET 1000
#define CONVERT_US_MIN_MAX(x) (((x)*1280)/250) #define CONVERT_US_MIN_MAX(x) (((x)*1280)/250)
#define MIN_MAX_ATTR attr|PREC1
#if defined(PPM_UNIT_US) #if defined(PPM_UNIT_US)
#define SET_MIN_MAX(x, val) x = ((val)*250)/128 #define SET_MIN_MAX(x, val) x = ((val)*250)/128
@ -104,10 +103,10 @@ void menuModelLimits(uint8_t event)
if (sub < NUM_CHNOUT) { if (sub < NUM_CHNOUT) {
#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_UNIT_US) #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); lcdDrawText(13*FW, 0, STR_US);
#else #else
lcdDrawNumber(13*FW, 0, calcRESXto1000(channelOutputs[sub]), PREC1); lcdDrawNumber(13*FW, 0, calcRESXto1000(channelOutputs[sub]), PREC1|RIGHT);
#endif #endif
} }
@ -179,9 +178,9 @@ void menuModelLimits(uint8_t event)
} }
#if defined(PPM_UNIT_US) #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 #else
lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1); lcdDrawNumber(LIMITS_OFFSET_POS, y, ld->offset, attr|PREC1|RIGHT);
#endif #endif
if (active) { if (active) {
ld->offset = checkIncDec(event, ld->offset, -1000, 1000, EE_MODEL, NULL, stops1000); 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: case ITEM_LIMITS_MIN:
if (GV_IS_GV_VALUE(ld->min, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) { 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; 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); if (active) ld->min = LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->min-LIMITS_MIN_MAX_OFFSET, -limit, 0, EE_MODEL, NULL, stops1000);
break; break;
case ITEM_LIMITS_MAX: case ITEM_LIMITS_MAX:
if (GV_IS_GV_VALUE(ld->max, -GV_RANGELARGE, GV_RANGELARGE) || (attr && event == EVT_KEY_LONG(KEY_ENTER))) { 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; 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); if (active) ld->max = -LIMITS_MIN_MAX_OFFSET + checkIncDec(event, ld->max+LIMITS_MIN_MAX_OFFSET, 0, +limit, EE_MODEL, NULL, stops1000);
break; break;
@ -245,7 +244,7 @@ void menuModelLimits(uint8_t event)
#if defined(PPM_CENTER_ADJUSTABLE) #if defined(PPM_CENTER_ADJUSTABLE)
case ITEM_LIMITS_PPM_CENTER: 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) { if (active) {
CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -PPM_CENTER_MAX, +PPM_CENTER_MAX); CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -PPM_CENTER_MAX, +PPM_CENTER_MAX);
} }

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
uint8_t getMixesCount() uint8_t getMixesCount()
{ {
@ -161,7 +161,7 @@ void drawOffsetBar(uint8_t x, uint8_t y, MixData * md)
int barMax = offset + weight; int barMax = offset + weight;
if (y > 15) { if (y > 15) {
lcdDrawNumber(x-((barMin >= 0) ? 2 : 3), y-6, barMin, TINSIZE|LEFT); 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) { if (weight < 0) {
barMin = -barMin; barMin = -barMin;
@ -505,14 +505,14 @@ void menuModelMixAll(uint8_t event)
break; 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)); lcdDrawText(FW*sizeof(TR_MIXER)+FW+FW/2, 0, STR_MAX(MAX_MIXERS));
// Value // Value
uint8_t index = mixAddress(s_currIdx)->destCh; uint8_t index = mixAddress(s_currIdx)->destCh;
if (!s_currCh) { if (!s_currCh) {
displayHeaderChannelName(index); 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); 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); 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); displayMixLine(y, md);

View file

@ -220,9 +220,9 @@ void menuModelSelect(uint8_t event)
break; break;
} }
lcdDrawText(27*FW-(LEN_FREE-4)*FW, 0, STR_FREE); lcdDrawNumber(19*FW, 0, EeFsGetFree(), RIGHT);
lcdDrawNumber(20*FW, 0, EeFsGetFree(), 0); lcdDrawText(19*FW + 3, 0, STR_BYTES);
lcdDrawText(21*FW, 0, STR_BYTES); lcdDrawText(lcdLastPos + 3, 0, STR_FREE);
drawScreenIndex(e_ModelSelect, DIM(menuTabModel), 0); drawScreenIndex(e_ModelSelect, DIM(menuTabModel), 0);
lcdDrawFilledRect(0, 0, LCD_W, FH, SOLID, FILL_WHITE|GREY_DEFAULT); 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; coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH;
uint8_t k = i+menuVerticalOffset; 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 (s_copyMode == MOVE_MODE || (s_copyMode == COPY_MODE && s_copySrcRow >= 0)) {
if (k == sub) { if (k == sub) {
@ -255,7 +255,7 @@ void menuModelSelect(uint8_t event)
if (eeModelExists(k)) { if (eeModelExists(k)) {
putsModelName(4*FW, y, modelHeaders[k].name, k, 0); 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)) if (k==g_eeGeneral.currModel && (s_copyMode!=COPY_MODE || s_copySrcRow<0 || i+menuVerticalOffset!=(vertpos_t)sub))
lcdDrawChar(1, y, '*'); lcdDrawChar(1, y, '*');
} }

View file

@ -127,8 +127,10 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event)
TimerData & timer = g_model.timers[timerIdx]; TimerData & timer = g_model.timers[timerIdx];
drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1); drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1);
putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer.mode, menuHorizontalPosition==0 ? attr : 0); 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); 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 && menuHorizontalPosition < 0) {
lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 13*FW-3, FH+1);
}
if (attr && s_editMode>0) { if (attr && s_editMode>0) {
div_t qr = div(timer.start, 60); div_t qr = div(timer.start, 60);
switch (menuHorizontalPosition) { switch (menuHorizontalPosition) {
@ -843,7 +845,6 @@ void menuModelSetup(uint8_t event)
break; break;
case 1: case 1:
CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min<int8_t>(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min<int8_t>(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart));
#if defined(TARANIS_INTERNAL_PPM) #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)) { 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); SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
@ -868,11 +869,11 @@ void menuModelSetup(uint8_t event)
ModuleData & moduleData = g_model.moduleData[moduleIdx]; ModuleData & moduleData = g_model.moduleData[moduleIdx];
if (IS_MODULE_PPM(moduleIdx)) { if (IS_MODULE_PPM(moduleIdx)) {
lcd_putsLeft(y, STR_PPMFRAME); 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); 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'); lcdDrawText(lcdLastPos, y, STR_MS);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (moduleData.ppm.delay*50)+300, (CURSOR_ON_LINE() || menuHorizontalPosition==1) ? attr : 0); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+6*FW, 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); 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) { if (attr && s_editMode>0) {
switch (menuHorizontalPosition) { switch (menuHorizontalPosition) {

View file

@ -68,29 +68,6 @@ enum menuModelTelemetryItems {
ITEM_TELEMETRY_VARIO_RANGE, ITEM_TELEMETRY_VARIO_RANGE,
ITEM_TELEMETRY_VARIO_CENTER, ITEM_TELEMETRY_VARIO_CENTER,
#endif #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 ITEM_TELEMETRY_MAX
}; };
@ -109,22 +86,9 @@ enum menuModelTelemetryItems {
#define VARIO_ROWS #define VARIO_ROWS
#endif #endif
#define RSSI_ROWS LABEL(RSSI), 0, 0, #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 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, #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 { enum SensorFields {
SENSOR_FIELD_NAME, SENSOR_FIELD_NAME,
SENSOR_FIELD_TYPE, 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) void menuModelTelemetry(uint8_t event)
{ {
if (warningResult) { 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<NUM_BODY_LINES; i++) { for (int i=0; i<NUM_BODY_LINES; i++) {
coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH; coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH;
@ -622,165 +567,6 @@ void menuModelTelemetry(uint8_t event)
} }
break; break;
#endif #endif
case ITEM_TELEMETRY_TOP_BAR_LABEL:
lcd_putsLeft(y, STR_TOP_BAR);
break;
case ITEM_TELEMETRY_TOP_BAR_VOLTAGE:
lcd_putsLeft(y, STR_VOLTAGE);
putsMixerSource(TELEM_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_TELEMETRY_TOP_BAR_ALTITUDE:
lcd_putsLeft(y, STR_ALTITUDE);
putsMixerSource(TELEM_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_TELEMETRY_SCREEN_LABEL1:
case ITEM_TELEMETRY_SCREEN_LABEL2:
case ITEM_TELEMETRY_SCREEN_LABEL3:
case ITEM_TELEMETRY_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(TELEM_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(TELEM_COL2+7*FW, y, scriptData.file, sizeof(scriptData.file), (menuHorizontalPosition==1 ? attr : 0));
else
lcdDrawTextAtIndex(TELEM_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_TELEMETRY_SCREEN_LINE1:
case ITEM_TELEMETRY_SCREEN_LINE2:
case ITEM_TELEMETRY_SCREEN_LINE3:
case ITEM_TELEMETRY_SCREEN_LINE4:
case ITEM_TELEMETRY_SCREEN_LINE5:
case ITEM_TELEMETRY_SCREEN_LINE6:
case ITEM_TELEMETRY_SCREEN_LINE7:
case ITEM_TELEMETRY_SCREEN_LINE8:
case ITEM_TELEMETRY_SCREEN_LINE9:
case ITEM_TELEMETRY_SCREEN_LINE10:
case ITEM_TELEMETRY_SCREEN_LINE11:
case ITEM_TELEMETRY_SCREEN_LINE12:
case ITEM_TELEMETRY_SCREEN_LINE13:
case ITEM_TELEMETRY_SCREEN_LINE14:
case ITEM_TELEMETRY_SCREEN_LINE15:
case ITEM_TELEMETRY_SCREEN_LINE16:
{
uint8_t screenIndex, lineIndex;
if (k < ITEM_TELEMETRY_SCREEN_LABEL2) {
screenIndex = 0;
lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE1;
}
else if (k >= 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; c<NUM_LINE_ITEMS; c++) {
LcdFlags cellAttr = (menuHorizontalPosition==c ? attr : 0);
source_t & value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c];
const coord_t pos[] = {TELEM_COL1, TELEM_COL2, TELEM_COL3};
putsMixerSource(pos[c], y, value, cellAttr);
if (cellAttr && s_editMode>0) {
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;
}
} }
} }
} }

View file

@ -2,7 +2,7 @@
* Copyright (C) OpenTX * Copyright (C) OpenTX
* *
* Based on code named * 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 * er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x * gruvin9x - http://code.google.com/p/gruvin9x
* *
@ -82,6 +82,7 @@ void menuModelLogicalSwitches(uint8_t event);
void menuModelCustomFunctions(uint8_t event); void menuModelCustomFunctions(uint8_t event);
void menuModelCustomScripts(uint8_t event); void menuModelCustomScripts(uint8_t event);
void menuModelTelemetry(uint8_t event); void menuModelTelemetry(uint8_t event);
void menuModelDisplay(uint8_t event);
void menuModelExpoOne(uint8_t event); void menuModelExpoOne(uint8_t event);
void menuGeneralSetup(uint8_t event); void menuGeneralSetup(uint8_t event);
@ -148,9 +149,9 @@ enum EnumTabModel {
#if defined(LUA_MODEL_SCRIPTS) #if defined(LUA_MODEL_SCRIPTS)
e_CustomScripts, e_CustomScripts,
#endif #endif
CASE_FRSKY(e_Telemetry) e_Telemetry,
CASE_MAVLINK(e_MavSetup) CASE_MAVLINK(e_MavSetup)
CASE_TEMPLATES(e_Templates) e_Display,
}; };
const MenuHandlerFunc menuTabModel[] = { const MenuHandlerFunc menuTabModel[] = {
@ -170,9 +171,9 @@ const MenuHandlerFunc menuTabModel[] = {
#if defined(LUA_MODEL_SCRIPTS) #if defined(LUA_MODEL_SCRIPTS)
menuModelCustomScripts, menuModelCustomScripts,
#endif #endif
CASE_FRSKY(menuModelTelemetry) menuModelTelemetry,
CASE_MAVLINK(menuTelemetryMavlinkSetup) CASE_MAVLINK(menuTelemetryMavlinkSetup)
CASE_TEMPLATES(menuModelTemplates) menuModelDisplay
}; };
void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr); void drawSlider(coord_t x, coord_t y, uint8_t value, uint8_t max, uint8_t attr);

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
void menuChannelsView(uint8_t event) void menuChannelsView(uint8_t event)
{ {
@ -91,13 +91,13 @@ void menuChannelsView(uint8_t event)
// Value // Value
#if defined(PPM_UNIT_US) #if defined(PPM_UNIT_US)
uint8_t wbar = (longNames ? 54 : 64); 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) #elif defined(PPM_UNIT_PERCENT_PREC1)
uint8_t wbar = (longNames ? 48 : 58); 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 #else
uint8_t wbar = (longNames ? 54 : 64); 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 #endif
// Gauge // Gauge

View file

@ -129,7 +129,7 @@ void displayTrims(uint8_t phase)
} }
if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && trim != 0) { if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && trim != 0) {
if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<i)))) { if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<i)))) {
lcdDrawNumber(trim>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_NEVER && trim != 0) {
if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<i)))) { if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<i)))) {
lcdDrawNumber((stickIndex==0 ? TRIM_LH_X : TRIM_RH_X)+(trim>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; g_eeGeneral.view = 0;
chainMenu(menuMainViewChannelsMonitor); chainMenu(menuMainViewChannelsMonitor);
} }
AUDIO_KEY_PRESS();
break; break;
case EVT_KEY_LONG(KEY_PAGE): case EVT_KEY_LONG(KEY_PAGE):
if (!IS_FAI_ENABLED()) if (!IS_FAI_ENABLED())
chainMenu(menuTelemetryFrsky); chainMenu(menuTelemetryFrsky);
killEvents(event); killEvents(event);
AUDIO_KEY_PRESS();
break; break;
case EVT_KEY_FIRST(KEY_EXIT): case EVT_KEY_FIRST(KEY_EXIT):

View file

@ -23,7 +23,7 @@
#define STATS_1ST_COLUMN FW/2 #define STATS_1ST_COLUMN FW/2
#define STATS_2ND_COLUMN 12*FW+FW/2 #define STATS_2ND_COLUMN 12*FW+FW/2
#define STATS_3RD_COLUMN 24*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) void menuStatisticsView(uint8_t event)
{ {
@ -176,13 +176,13 @@ void menuStatisticsDebug(uint8_t event)
lcd_putsLeft(MENU_DEBUG_Y_RTOS, STR_FREESTACKMINB); lcd_putsLeft(MENU_DEBUG_Y_RTOS, STR_FREESTACKMINB);
lcdDrawText(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_RTOS+1, "[M]", SMLSIZE); 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); 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); 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); 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); lcdDrawText(3*FW, 7*FH+1, STR_MENUTORESET);
lcdInvertLastLine(); lcdInvertLastLine();

View file

@ -23,10 +23,6 @@
#define STATUS_BAR_Y (7*FH+1) #define STATUS_BAR_Y (7*FH+1)
#define TELEM_2ND_COLUMN (11*FW) #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; uint8_t s_frsky_view = 0;
#define BAR_LEFT 30 #define BAR_LEFT 30
@ -37,7 +33,8 @@ void displayRssiLine()
if (TELEMETRY_STREAMING()) { if (TELEMETRY_STREAMING()) {
lcdDrawSolidHorizontalLine(0, 55, 212, 0); // separator lcdDrawSolidHorizontalLine(0, 55, 212, 0); // separator
uint8_t rssi = min((uint8_t)99, TELEMETRY_RSSI()); 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); lcdDrawRect(BAR_LEFT, 57, 78, 7);
lcdDrawFilledRect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID); lcdDrawFilledRect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID);
} }
@ -119,7 +116,7 @@ bool displayNumbersTelemetryScreen(FrSkyScreenData & screen)
if (field) { if (field) {
coord_t x = pos[j+1]-2; coord_t x = pos[j+1]-2;
coord_t y = (i==3 ? 1+FH+2*FH*i:FH+2*FH*i); 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) { 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 // 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); 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]; FrSkyScreenData & screen = g_model.frsky.screens[index];
#if defined(GAUGES)
if (IS_BARS_SCREEN(s_frsky_view)) { if (IS_BARS_SCREEN(s_frsky_view)) {
return displayGaugesTelemetryScreen(screen); return displayGaugesTelemetryScreen(screen);
} }
#endif
displayNumbersTelemetryScreen(screen); displayNumbersTelemetryScreen(screen);
} }

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include "../../opentx.h" #include "opentx.h"
const pm_uchar bmp_sleep[] PROGMEM = { const pm_uchar bmp_sleep[] PROGMEM = {
#include "../../bitmaps/taranis/sleep.lbm" #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) 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); coord_t x = 1+LCD_W-FW*(count>9 ? 3 : 2);
lcdDrawChar(x, 0, '/', attr); 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) 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 (GV_IS_GV_VALUE(value, min, max)) {
if (attr & LEFT) if (attr & RIGHT)
attr -= LEFT; /* because of ZCHAR */
else
x -= 2*FW+FWNUM; x -= 2*FW+FWNUM;
attr &= ~PREC1; attr &= ~PREC1;

View file

@ -2,7 +2,7 @@
* Copyright (C) OpenTX * Copyright (C) OpenTX
* *
* Based on code named * 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 * er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x * 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) * key (number) cell number (1 to number of cells)
* value (number) current cell voltage * 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 `Cels-` added in 2.1.9
@notice Getting a value by its numerical identifier is faster then by its name. @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. `Cels-` will return a single value - the maximum or minimum Cels value.
*/ */
static int luaGetValue(lua_State *L) static int luaGetValue(lua_State *L)
@ -690,7 +690,7 @@ Returns (some of) the general radio settings
* `language` (string) radio language (used for menus) * `language` (string) radio language (used for menus)
* `voice` (string) voice language (used for speech) * `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. `language` and `voice` added int 2.2.0.
*/ */
@ -754,24 +754,6 @@ static int luaPopupInput(lua_State *L)
return 1; 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 /*luadoc
@function defaultStick(channel) @function defaultStick(channel)
@ -833,7 +815,6 @@ const luaL_Reg opentxLib[] = {
{ "defaultStick", luaDefaultStick }, { "defaultStick", luaDefaultStick },
{ "defaultChannel", luaDefaultChannel }, { "defaultChannel", luaDefaultChannel },
{ "killEvents", luaKillEvents }, { "killEvents", luaKillEvents },
{ "toInt16", luaToInt16 },
#if !defined(COLORLCD) #if !defined(COLORLCD)
{ "GREY", luaGrey }, { "GREY", luaGrey },
#endif #endif
@ -851,11 +832,7 @@ const luaR_value_entry opentxConstants[] = {
{ "INVERS", INVERS }, { "INVERS", INVERS },
{ "BOLD", BOLD }, { "BOLD", BOLD },
{ "BLINK", BLINK }, { "BLINK", BLINK },
#if defined(COLORLCD)
{ "RIGHT", RIGHT }, { "RIGHT", RIGHT },
#else
{ "FIXEDWIDTH", FIXEDWIDTH },
#endif
{ "LEFT", LEFT }, { "LEFT", LEFT },
{ "PREC1", PREC1 }, { "PREC1", PREC1 },
{ "PREC2", PREC2 }, { "PREC2", PREC2 },
@ -877,9 +854,6 @@ const luaR_value_entry opentxConstants[] = {
{ "MIXSRC_SH", MIXSRC_SH }, { "MIXSRC_SH", MIXSRC_SH },
{ "MIXSRC_CH1", MIXSRC_CH1 }, { "MIXSRC_CH1", MIXSRC_CH1 },
{ "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH }, { "SWSRC_LAST", SWSRC_LAST_LOGICAL_SWITCH },
#if !defined(PCBHORUS)
{ "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU) },
#endif
#if defined(COLORLCD) #if defined(COLORLCD)
{ "COLOR", ZoneOption::Color }, { "COLOR", ZoneOption::Color },
{ "CUSTOM_COLOR", CUSTOM_COLOR }, { "CUSTOM_COLOR", CUSTOM_COLOR },
@ -918,8 +892,11 @@ const luaR_value_entry opentxConstants[] = {
{ "LIGHTGREY", (double)LIGHTGREY }, { "LIGHTGREY", (double)LIGHTGREY },
{ "RED", (double)RED }, { "RED", (double)RED },
{ "DARKRED", (double)DARKRED }, { "DARKRED", (double)DARKRED },
#else
{ "FIXEDWIDTH", FIXEDWIDTH },
#endif #endif
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
{ "EVT_MENU_BREAK", EVT_KEY_BREAK(KEY_MENU) },
{ "EVT_PAGE_BREAK", EVT_KEY_BREAK(KEY_PAGE) }, { "EVT_PAGE_BREAK", EVT_KEY_BREAK(KEY_PAGE) },
{ "EVT_PAGE_LONG", EVT_KEY_LONG(KEY_PAGE) }, { "EVT_PAGE_LONG", EVT_KEY_LONG(KEY_PAGE) },
{ "EVT_PLUS_BREAK", EVT_KEY_BREAK(KEY_PLUS) }, { "EVT_PLUS_BREAK", EVT_KEY_BREAK(KEY_PLUS) },

View file

@ -95,7 +95,7 @@ bool checkScreenshot(const QString & test)
TEST(outdezNAtt, test_unsigned) TEST(outdezNAtt, test_unsigned)
{ {
lcdClear(); lcdClear();
lcdDrawNumber(0, 0, 65530, LEFT|UNSIGN); lcdDrawNumber(0, 0, 65530, LEFT);
EXPECT_TRUE(checkScreenshot("unsigned")) << "Unsigned numbers will be bad displayed"; EXPECT_TRUE(checkScreenshot("unsigned")) << "Unsigned numbers will be bad displayed";
} }
@ -133,7 +133,7 @@ TEST(Lcd, Prec2_Left)
TEST(Lcd, Prec2_Right) TEST(Lcd, Prec2_Right)
{ {
lcdClear(); lcdClear();
lcdDrawNumber(LCD_W, LCD_H-FH, 2, PREC2); lcdDrawNumber(LCD_W, LCD_H-FH, 2, PREC2|RIGHT);
EXPECT_TRUE(checkScreenshot("prec2_right")); EXPECT_TRUE(checkScreenshot("prec2_right"));
} }
@ -141,7 +141,7 @@ TEST(Lcd, Prec2_Right)
TEST(Lcd, Prec1_Dblsize_Invers) TEST(Lcd, Prec1_Dblsize_Invers)
{ {
lcdClear(); lcdClear();
lcdDrawNumber(LCD_W, 10, 51, PREC1|DBLSIZE|INVERS); lcdDrawNumber(LCD_W, 10, 51, PREC1|DBLSIZE|INVERS|RIGHT);
EXPECT_TRUE(checkScreenshot("prec1_dblsize_invers")); EXPECT_TRUE(checkScreenshot("prec1_dblsize_invers"));
} }
#endif #endif

View file

@ -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_CHANNELS[] PROGMEM = TR_MENU_CHANNELS;
const pm_char STR_MENU_GVARS[] PROGMEM = TR_MENU_GVARS; 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_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_OTHER[] PROGMEM = TR_MENU_OTHER;
const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT;
const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER; const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER;

View file

@ -922,6 +922,7 @@ extern const pm_char STR_BLCOLOR[];
extern const pm_char STR_MENU_CHANNELS[]; extern const pm_char STR_MENU_CHANNELS[];
extern const pm_char STR_MENU_GVARS[]; extern const pm_char STR_MENU_GVARS[];
extern const pm_char STR_MENU_TELEMETRY[]; 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_OTHER[];
extern const pm_char STR_MENU_INVERT[]; extern const pm_char STR_MENU_INVERT[];
extern const pm_char STR_JITTER_FILTER[]; extern const pm_char STR_JITTER_FILTER[];

View file

@ -1190,6 +1190,7 @@
#define TR_MENU_CHANNELS "\320Kanály" #define TR_MENU_CHANNELS "\320Kanály"
#define TR_MENU_GVARS "\311Glob.proměnné" #define TR_MENU_GVARS "\311Glob.proměnné"
#define TR_MENU_TELEMETRY "\321Telemetrie" #define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Ostatní" #define TR_MENU_OTHER "Ostatní"
#define TR_MENU_INVERT "Invertovat" #define TR_MENU_INVERT "Invertovat"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1193,6 +1193,7 @@
#define TR_MENU_CHANNELS "\320Kanäle" #define TR_MENU_CHANNELS "\320Kanäle"
#define TR_MENU_GVARS "\311Glob. Vars" #define TR_MENU_GVARS "\311Glob. Vars"
#define TR_MENU_TELEMETRY "\321Telemetrie" #define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER " Weitere" #define TR_MENU_OTHER " Weitere"
#define TR_MENU_INVERT "Invertieren<!>" #define TR_MENU_INVERT "Invertieren<!>"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1207,6 +1207,7 @@
#define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_CHANNELS "\320Channels"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Other" #define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert" #define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1153,6 +1153,7 @@
#define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_CHANNELS "\320Channels"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Other" #define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert" #define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1153,6 +1153,7 @@
#define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_CHANNELS "\320Channels"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Other" #define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert" #define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1180,6 +1180,7 @@
#define TR_MENU_CHANNELS "\320Canaux" #define TR_MENU_CHANNELS "\320Canaux"
#define TR_MENU_GVARS "\311Vars. glob." #define TR_MENU_GVARS "\311Vars. glob."
#define TR_MENU_TELEMETRY "\321Télémesure" #define TR_MENU_TELEMETRY "\321Télémesure"
#define TR_MENU_DISPLAY "AFFICHAGE"
#define TR_MENU_OTHER "Autres" #define TR_MENU_OTHER "Autres"
#define TR_MENU_INVERT "Inverser" #define TR_MENU_INVERT "Inverser"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1189,6 +1189,7 @@
#define TR_MENU_CHANNELS "\320Canali" #define TR_MENU_CHANNELS "\320Canali"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Altro" #define TR_MENU_OTHER "Altro"
#define TR_MENU_INVERT "Inverti" #define TR_MENU_INVERT "Inverti"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1204,6 +1204,7 @@
#define TR_MENU_CHANNELS "\320Kanalen" #define TR_MENU_CHANNELS "\320Kanalen"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetrie" #define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Verdere" #define TR_MENU_OTHER "Verdere"
#define TR_MENU_INVERT "Inverteer" #define TR_MENU_INVERT "Inverteer"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1191,6 +1191,7 @@
#define TR_MENU_CHANNELS "\320Kanały " #define TR_MENU_CHANNELS "\320Kanały "
#define TR_MENU_GVARS "\311ZmGlo" #define TR_MENU_GVARS "\311ZmGlo"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Inny " #define TR_MENU_OTHER "Inny "
#define TR_MENU_INVERT "Odwróć" #define TR_MENU_INVERT "Odwróć"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1149,6 +1149,7 @@
#define TR_MENU_CHANNELS "\320Channels" #define TR_MENU_CHANNELS "\320Channels"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetry" #define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Other" #define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert" #define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"

View file

@ -1205,6 +1205,7 @@
#define TR_MENU_CHANNELS "\320Servon" #define TR_MENU_CHANNELS "\320Servon"
#define TR_MENU_GVARS "\311GVars" #define TR_MENU_GVARS "\311GVars"
#define TR_MENU_TELEMETRY "\321Telemetri" #define TR_MENU_TELEMETRY "\321Telemetri"
#define TR_MENU_DISPLAY "DISPLAY"
#define TR_MENU_OTHER "Annat" #define TR_MENU_OTHER "Annat"
#define TR_MENU_INVERT "Invertera" #define TR_MENU_INVERT "Invertera"
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"