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:
parent
5d42c437a8
commit
9056e76460
40 changed files with 513 additions and 441 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
257
radio/src/gui/taranis/menu_model_display.cpp
Normal file
257
radio/src/gui/taranis/menu_model_display.cpp
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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, '*');
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) },
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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[];
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue