mirror of
https://github.com/opentx/opentx.git
synced 2025-07-17 21:35:27 +03:00
parent
ad188aa916
commit
cf5e2b3fd5
17 changed files with 344 additions and 282 deletions
|
@ -168,6 +168,7 @@ enum MainViews {
|
|||
VIEW_OUTPUTS_BARS,
|
||||
VIEW_INPUTS,
|
||||
VIEW_TIMER2,
|
||||
VIEW_CHAN_MONITOR,
|
||||
VIEW_COUNT
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -235,6 +235,9 @@ void pushMenuTextView(const char *filename);
|
|||
void pushModelNotes();
|
||||
void readModelNotes();
|
||||
|
||||
void menuChannelsView(event_t event);
|
||||
void menuChannelsViewCommon(event_t event);
|
||||
|
||||
#define CURSOR_MOVED_LEFT(event) (IS_ROTARY_LEFT(event) || EVT_KEY_MASK(event) == KEY_LEFT)
|
||||
#define CURSOR_MOVED_RIGHT(event) (IS_ROTARY_RIGHT(event) || EVT_KEY_MASK(event) == KEY_RIGHT)
|
||||
|
||||
|
@ -294,6 +297,7 @@ void drawProgressScreen(const char * title, const char * message, int num, int d
|
|||
void drawSleepBitmap();
|
||||
|
||||
void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t count, uint8_t visible);
|
||||
void drawGauge(coord_t x, coord_t y, coord_t w, coord_t h, int32_t val, int32_t max);
|
||||
|
||||
void drawAlertBox(const char * title, const char * text, const char * action);
|
||||
void showAlertBox(const char * title, const char * text, const char * action , uint8_t sound);
|
||||
|
@ -303,7 +307,7 @@ void showAlertBox(const char * title, const char * text, const char * action , u
|
|||
|
||||
#define IS_MAIN_VIEW_DISPLAYED() menuHandlers[0] == menuMainView
|
||||
#define IS_TELEMETRY_VIEW_DISPLAYED() menuHandlers[0] == menuViewTelemetry
|
||||
#define IS_OTHER_VIEW_DISPLAYED() false
|
||||
#define IS_OTHER_VIEW_DISPLAYED() menuHandlers[0] == menuChannelsView
|
||||
|
||||
void editCurveRef(coord_t x, coord_t y, CurveRef & curve, event_t event, LcdFlags flags);
|
||||
|
||||
|
|
|
@ -114,8 +114,6 @@ void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len);
|
|||
void lcdDrawTextAlignedLeft(coord_t y, const char * s);
|
||||
void drawTimerWithMode(coord_t x, coord_t y, uint8_t index, LcdFlags att);
|
||||
|
||||
#define lcdDrawTextAlignedCenter(y, s) lcdDrawText((LCD_W-sizeof(s)*FW+FW+1)/2, y, s)
|
||||
|
||||
void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags mode=0);
|
||||
void lcdDrawHexChar(coord_t x, coord_t y, uint8_t val, LcdFlags flags=0);
|
||||
|
||||
|
|
|
@ -161,6 +161,18 @@ void menuModelCurveOne(event_t event)
|
|||
POPUP_MENU_START(onCurveOneMenu);
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(NAVIGATION_X7)
|
||||
case EVT_KEY_LONG(KEY_MENU):
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
break;
|
||||
#elif defined(NAVIGATION_XLITE)
|
||||
case EVT_KEY_LONG(KEY_SHIFT):
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
drawCurve(0);
|
||||
|
|
|
@ -51,7 +51,7 @@ void menuModelFailsafe(event_t event)
|
|||
|
||||
SIMPLE_SUBMENU_NOTITLE(sentModuleChannels(g_moduleIdx));
|
||||
|
||||
lcdDrawTextAlignedCenter(0, TR_FAILSAFESET);
|
||||
lcdDrawText(LCD_W / 2, 0, STR_FAILSAFESET, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
|
||||
for (uint8_t i=0; i<NUM_BODY_LINES; i++) {
|
||||
|
|
|
@ -72,6 +72,17 @@ enum ExposFields {
|
|||
|
||||
void menuModelExpoOne(event_t event)
|
||||
{
|
||||
#if defined(NAVIGATION_X7)
|
||||
if (event == EVT_KEY_LONG(KEY_MENU)) {
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
}
|
||||
#elif defined(NAVIGATION_XLITE)
|
||||
if (event == EVT_KEY_LONG(KEY_SHIFT)) {
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
}
|
||||
#endif
|
||||
ExpoData * ed = expoAddress(s_currIdx);
|
||||
drawSource(PSIZE(TR_MENUINPUTS)*FW+FW, 0, MIXSRC_FIRST_INPUT+ed->chn, 0);
|
||||
|
||||
|
|
|
@ -85,6 +85,17 @@ void drawOffsetBar(uint8_t x, uint8_t y, MixData * md)
|
|||
|
||||
void menuModelMixOne(event_t event)
|
||||
{
|
||||
#if defined(NAVIGATION_X7)
|
||||
if (event == EVT_KEY_LONG(KEY_MENU)) {
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
}
|
||||
#elif defined(NAVIGATION_XLITE)
|
||||
if (event == EVT_KEY_LONG(KEY_SHIFT)) {
|
||||
pushMenu(menuChannelsView);
|
||||
killEvents(event);
|
||||
}
|
||||
#endif
|
||||
MixData * md2 = mixAddress(s_currIdx) ;
|
||||
putsChn(PSIZE(TR_MIXES)*FW+FW, 0, md2->destCh+1,0);
|
||||
|
||||
|
|
|
@ -179,7 +179,7 @@ void menuFirstCalib(event_t event)
|
|||
chainMenu(menuMainView);
|
||||
}
|
||||
else {
|
||||
lcdDrawTextAlignedCenter(0*FH, TR_MENUCALIBRATION);
|
||||
lcdDrawText(LCD_W / 2, 0, STR_MENUCALIBRATION, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
menuCommonCalib(event);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,30 @@
|
|||
|
||||
#include "opentx.h"
|
||||
|
||||
void menuChannelsView(event_t event)
|
||||
constexpr coord_t CHANNEL_NAME_OFFSET = 1;
|
||||
constexpr coord_t CHANNEL_VALUE_OFFSET = CHANNEL_NAME_OFFSET + 42;
|
||||
constexpr coord_t CHANNEL_GAUGE_OFFSET = CHANNEL_VALUE_OFFSET;
|
||||
constexpr coord_t CHANNEL_BAR_WIDTH = 70;
|
||||
constexpr coord_t CHANNEL_PROPERTIES_OFFSET = CHANNEL_GAUGE_OFFSET + CHANNEL_BAR_WIDTH + 2;
|
||||
|
||||
#if defined(NAVIGATION_X7)
|
||||
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_LONG(KEY_PAGE)
|
||||
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGE)
|
||||
#define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT
|
||||
#define EVT_KEY_PREVIOUS_PAGE EVT_ROTARY_LEFT
|
||||
#elif defined(NAVIGATION_XLITE)
|
||||
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_UP)
|
||||
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_DOWN)
|
||||
#define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_RIGHT)
|
||||
#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_LEFT)
|
||||
#else
|
||||
#define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_UP)
|
||||
#define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_DOWN)
|
||||
#define EVT_KEY_NEXT_PAGE EVT_KEY_BREAK(KEY_RIGHT)
|
||||
#define EVT_KEY_PREVIOUS_PAGE EVT_KEY_BREAK(KEY_LEFT)
|
||||
#endif
|
||||
|
||||
void menuChannelsViewCommon(event_t event)
|
||||
{
|
||||
bool newLongNames = false;
|
||||
|
||||
|
@ -31,13 +54,79 @@ void menuChannelsView(event_t event)
|
|||
memclear(&reusableBuffer.viewChannels, sizeof(reusableBuffer.viewChannels));
|
||||
break;
|
||||
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
reusableBuffer.viewChannels.mixersView = !reusableBuffer.viewChannels.mixersView;
|
||||
break;
|
||||
}
|
||||
|
||||
ch = 8 * (g_eeGeneral.view / ALTERNATE_VIEW);
|
||||
|
||||
// Screen title
|
||||
lcdDrawText(LCD_W / 2, 0, reusableBuffer.viewChannels.mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
|
||||
int16_t limits = 512 * 2;
|
||||
|
||||
// Channels
|
||||
for (uint8_t line = 0; line < 8; line++) {
|
||||
LimitData * ld = limitAddress(ch);
|
||||
const uint8_t y = 9 + line * 7;
|
||||
const int32_t val = reusableBuffer.viewChannels.mixersView ? ex_chans[ch] : channelOutputs[ch];
|
||||
const uint8_t lenLabel = ZLEN(g_model.limitData[ch].name);
|
||||
|
||||
// Channel name if present, number if not
|
||||
if (lenLabel > 0) {
|
||||
if (lenLabel > 4)
|
||||
reusableBuffer.viewChannels.longNames = true;
|
||||
lcdDrawSizedText(CHANNEL_NAME_OFFSET, y, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), ZCHAR | SMLSIZE);
|
||||
}
|
||||
else {
|
||||
putsChn(CHANNEL_NAME_OFFSET, y, ch + 1, SMLSIZE);
|
||||
}
|
||||
|
||||
// Value
|
||||
#if defined(PPM_UNIT_US)
|
||||
lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, PPM_CH_CENTER(ch) + val / 2, TINSIZE | RIGHT);
|
||||
#elif defined(PPM_UNIT_PERCENT_PREC1)
|
||||
lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val), PREC1 | TINSIZE | RIGHT);
|
||||
#else
|
||||
lcdDrawNumber(CHANNEL_VALUE_OFFSET, y + 1, calcRESXto1000(val) / 10, TINSIZE | RIGHT);
|
||||
#endif
|
||||
|
||||
// Gauge
|
||||
drawGauge(CHANNEL_GAUGE_OFFSET, y, CHANNEL_BAR_WIDTH, 6, val, limits);
|
||||
|
||||
if (!reusableBuffer.viewChannels.mixersView) {
|
||||
// Properties
|
||||
#if defined(OVERRIDE_CHANNEL_FUNCTION)
|
||||
if (safetyCh[ch] != OVERRIDE_CHANNEL_UNDEFINED)
|
||||
lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "OVR", TINSIZE);
|
||||
else
|
||||
#endif
|
||||
if (ld && ld->revert) {
|
||||
lcdDrawText(CHANNEL_PROPERTIES_OFFSET, y, "INV", TINSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
++ch;
|
||||
}
|
||||
|
||||
reusableBuffer.viewChannels.longNames = newLongNames;
|
||||
}
|
||||
|
||||
void menuChannelsView(event_t event)
|
||||
{
|
||||
switch (event) {
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
popMenu();
|
||||
break;
|
||||
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
reusableBuffer.viewChannels.secondPage = !reusableBuffer.viewChannels.secondPage;
|
||||
case EVT_KEY_NEXT_PAGE:
|
||||
g_eeGeneral.view = (g_eeGeneral.view + (4 * ALTERNATE_VIEW) + ALTERNATE_VIEW) % (4 * ALTERNATE_VIEW);
|
||||
break;
|
||||
|
||||
case EVT_KEY_PREVIOUS_PAGE:
|
||||
g_eeGeneral.view = (g_eeGeneral.view + (4 * ALTERNATE_VIEW) - ALTERNATE_VIEW) % (4 * ALTERNATE_VIEW);
|
||||
break;
|
||||
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
|
@ -45,67 +134,5 @@ void menuChannelsView(event_t event)
|
|||
break;
|
||||
}
|
||||
|
||||
if (reusableBuffer.viewChannels.secondPage)
|
||||
ch = 16;
|
||||
else
|
||||
ch = 0;
|
||||
|
||||
if (reusableBuffer.viewChannels.mixersView) {
|
||||
lcdDrawTextAlignedCenter(0, TR_MIXERS_MONITOR);
|
||||
}
|
||||
else {
|
||||
lcdDrawTextAlignedCenter(0, TR_CHANNELS_MONITOR);
|
||||
}
|
||||
|
||||
lcdInvertLine(0);
|
||||
|
||||
// Column separator
|
||||
lcdDrawSolidVerticalLine(LCD_W/2, FH, LCD_H-FH);
|
||||
|
||||
for (uint8_t col=0; col<2; col++) {
|
||||
|
||||
uint8_t x = col*LCD_W/2+1;
|
||||
|
||||
// Channels
|
||||
for (uint8_t line=0; line<8; line++) {
|
||||
uint8_t y = 9+line*7;
|
||||
int32_t val = (reusableBuffer.viewChannels.mixersView) ? ex_chans[ch] : channelOutputs[ch];
|
||||
uint8_t ofs = (col ? 0 : 1);
|
||||
|
||||
// Channel name if present, number if not
|
||||
uint8_t lenLabel = ZLEN(g_model.limitData[ch].name);
|
||||
if (lenLabel > 4) {
|
||||
newLongNames = reusableBuffer.viewChannels.longNames = true;
|
||||
}
|
||||
|
||||
if (lenLabel > 0)
|
||||
lcdDrawSizedText(x+1-ofs, y, g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name), ZCHAR | SMLSIZE);
|
||||
else
|
||||
putsChn(x+1-ofs, y, ch+1, SMLSIZE);
|
||||
|
||||
// Value
|
||||
#if defined(PPM_UNIT_US)
|
||||
uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 54 : 64);
|
||||
lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, PPM_CH_CENTER(ch)+val/2, TINSIZE|RIGHT);
|
||||
#elif defined(PPM_UNIT_PERCENT_PREC1)
|
||||
uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 48 : 58);
|
||||
lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val), PREC1|TINSIZE|RIGHT);
|
||||
#else
|
||||
uint8_t wbar = (reusableBuffer.viewChannels.longNames ? 54 : 64);
|
||||
lcdDrawNumber(x+LCD_W/2-3-wbar-ofs, y+1, calcRESXto1000(val)/10, TINSIZE|RIGHT);
|
||||
#endif
|
||||
|
||||
// Gauge
|
||||
// uint16_t lim = (g_model.extendedLimits ? (512 * (long)LIMIT_EXT_PERCENT / 100) : 512) * 2;
|
||||
//#ifdef MIXERS_MONITOR
|
||||
// if (mixersView)
|
||||
// lim = 512 * 2 * 2;
|
||||
//#endif
|
||||
// TODO ? drawGauge(x+LCD_W/2-3-wbar-ofs, y, wbar, 6, val, lim);
|
||||
|
||||
ch++;
|
||||
}
|
||||
}
|
||||
|
||||
reusableBuffer.viewChannels.longNames = newLongNames;
|
||||
menuChannelsViewCommon(event);
|
||||
}
|
||||
|
|
|
@ -328,17 +328,12 @@ void menuMainView(event_t event)
|
|||
}
|
||||
break;
|
||||
*/
|
||||
|
||||
case EVT_KEY_NEXT_PAGE:
|
||||
case EVT_KEY_PREVIOUS_PAGE:
|
||||
if (view_base <= VIEW_INPUTS) {
|
||||
if (view_base == VIEW_INPUTS)
|
||||
g_eeGeneral.view ^= ALTERNATE_VIEW;
|
||||
else
|
||||
g_eeGeneral.view = (g_eeGeneral.view + (4*ALTERNATE_VIEW) + ((event==EVT_KEY_PREVIOUS_PAGE) ? -ALTERNATE_VIEW : ALTERNATE_VIEW)) % (4*ALTERNATE_VIEW);
|
||||
storageDirty(EE_GENERAL);
|
||||
AUDIO_KEY_PRESS();
|
||||
}
|
||||
break;
|
||||
|
||||
case EVT_KEY_CONTEXT_MENU:
|
||||
|
@ -379,7 +374,8 @@ void menuMainView(event_t event)
|
|||
case EVT_KEY_PREVIOUS_VIEW:
|
||||
case EVT_KEY_NEXT_VIEW:
|
||||
// TODO try to split those 2 cases on 9X
|
||||
g_eeGeneral.view = (event == EVT_KEY_PREVIOUS_VIEW ? (view_base == VIEW_COUNT-1 ? 0 : view_base+1) : (view_base == 0 ? VIEW_COUNT-1 : view_base-1));
|
||||
g_eeGeneral.view = (event == EVT_KEY_PREVIOUS_VIEW ? (view_base == VIEW_COUNT - 1 ? 0 : view_base + 1) : (view_base == 0 ? VIEW_COUNT - 1 : view_base -
|
||||
1));
|
||||
storageDirty(EE_GENERAL);
|
||||
break;
|
||||
#else
|
||||
|
@ -410,40 +406,22 @@ void menuMainView(event_t event)
|
|||
break;
|
||||
}
|
||||
|
||||
{
|
||||
// Flight Mode Name
|
||||
uint8_t mode = mixerCurrentFlightMode;
|
||||
lcdDrawSizedText(PHASE_X, PHASE_Y, g_model.flightModeData[mode].name, sizeof(g_model.flightModeData[mode].name), ZCHAR|PHASE_FLAGS);
|
||||
switch (view_base) {
|
||||
case VIEW_CHAN_MONITOR:
|
||||
menuChannelsViewCommon(event);
|
||||
break;
|
||||
|
||||
// Model Name
|
||||
putsModelName(MODELNAME_X, MODELNAME_Y, g_model.header.name, g_eeGeneral.currModel, BIGSIZE);
|
||||
|
||||
// Main Voltage (or alarm if any)
|
||||
displayVoltageOrAlarm();
|
||||
|
||||
// Timer 1
|
||||
drawTimerWithMode(125, 2*FH, 0, RIGHT | DBLSIZE);
|
||||
|
||||
// Trims sliders
|
||||
displayTrims(mode);
|
||||
|
||||
// RSSI gauge / external antenna
|
||||
drawExternalAntennaAndRSSI();
|
||||
}
|
||||
|
||||
if (view_base < VIEW_INPUTS) {
|
||||
case VIEW_OUTPUTS_VALUES:
|
||||
case VIEW_OUTPUTS_BARS:
|
||||
// scroll bar
|
||||
lcdDrawHorizontalLine(38, 34, 54, DOTTED);
|
||||
lcdDrawSolidHorizontalLine(38 + (g_eeGeneral.view / ALTERNATE_VIEW) * 13, 34, 13, SOLID);
|
||||
|
||||
for (uint8_t i=0; i<8; i++) {
|
||||
uint8_t x0, y0;
|
||||
uint8_t chan = 8 * (g_eeGeneral.view / ALTERNATE_VIEW) + i;
|
||||
|
||||
int16_t val = channelOutputs[chan];
|
||||
|
||||
switch (view_base) {
|
||||
case VIEW_OUTPUTS_VALUES:
|
||||
if (view_base == VIEW_OUTPUTS_VALUES) {
|
||||
x0 = (i % 4 * 9 + 3) * FW / 2;
|
||||
y0 = i / 4 * FH + 40;
|
||||
#if defined(PPM_UNIT_US)
|
||||
|
@ -453,10 +431,9 @@ void menuMainView(event_t event)
|
|||
#else
|
||||
lcdDrawNumber(x0+4*FW , y0, calcRESXto1000(val)/10, RIGHT); // G: Don't like the decimal part*
|
||||
#endif
|
||||
break;
|
||||
|
||||
case VIEW_OUTPUTS_BARS:
|
||||
#define WBAR2 (50/2)
|
||||
}
|
||||
else {
|
||||
constexpr coord_t WBAR2 = (50/2);
|
||||
x0 = i<4 ? LCD_W/4+2 : LCD_W*3/4-2;
|
||||
y0 = 38+(i%4)*5;
|
||||
|
||||
|
@ -473,11 +450,15 @@ void menuMainView(event_t event)
|
|||
x0 -= len;
|
||||
lcdDrawSolidHorizontalLine(x0, y0+1, len);
|
||||
lcdDrawSolidHorizontalLine(x0, y0-1, len);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (view_base == VIEW_INPUTS) {
|
||||
|
||||
case VIEW_TIMER2:
|
||||
drawTimerWithMode(87, 5 * FH, 1, RIGHT | DBLSIZE);
|
||||
break;
|
||||
|
||||
case VIEW_INPUTS:
|
||||
if (view == VIEW_INPUTS) {
|
||||
// Sticks + Pots
|
||||
doMainScreenGraphics();
|
||||
|
@ -557,16 +538,34 @@ void menuMainView(event_t event)
|
|||
y += 12;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
else {
|
||||
// Timer2
|
||||
drawTimerWithMode(87, 5*FH, 1, RIGHT | DBLSIZE);
|
||||
}
|
||||
|
||||
if (view_base != VIEW_CHAN_MONITOR) {
|
||||
// Flight Mode Name
|
||||
uint8_t mode = mixerCurrentFlightMode;
|
||||
lcdDrawSizedText(PHASE_X, PHASE_Y, g_model.flightModeData[mode].name, sizeof(g_model.flightModeData[mode].name), ZCHAR | PHASE_FLAGS);
|
||||
|
||||
// Model Name
|
||||
putsModelName(MODELNAME_X, MODELNAME_Y, g_model.header.name, g_eeGeneral.currModel, BIGSIZE);
|
||||
|
||||
// Main Voltage (or alarm if any)
|
||||
displayVoltageOrAlarm();
|
||||
|
||||
// Timer 1
|
||||
drawTimerWithMode(125, 2 * FH, 0, RIGHT | DBLSIZE);
|
||||
|
||||
// Trims sliders
|
||||
displayTrims(mode);
|
||||
|
||||
// RSSI gauge / external antenna
|
||||
drawExternalAntennaAndRSSI();
|
||||
|
||||
// And ! in case of unexpected shutdown
|
||||
if (isAsteriskDisplayed()) {
|
||||
lcdDrawChar(REBOOT_X, 0 * FH, '!', INVERS);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(GVARS)
|
||||
if (gvarDisplayTimer > 0) {
|
||||
|
@ -575,7 +574,8 @@ void menuMainView(event_t event)
|
|||
drawMessageBox(warningText);
|
||||
lcdDrawSizedText(16, 5 * FH, g_model.gvars[gvarLastChanged].name, LEN_GVAR_NAME, ZCHAR);
|
||||
lcdDrawText(16 + 6 * FW, 5 * FH, "[", BOLD);
|
||||
drawGVarValue(lcdLastRightPos, 5*FH, gvarLastChanged, GVAR_VALUE(gvarLastChanged, getGVarFlightMode(mixerCurrentFlightMode, gvarLastChanged)), LEFT|BOLD);
|
||||
drawGVarValue(lcdLastRightPos, 5 * FH, gvarLastChanged, GVAR_VALUE(gvarLastChanged, getGVarFlightMode(mixerCurrentFlightMode, gvarLastChanged)),
|
||||
LEFT | BOLD);
|
||||
if (g_model.gvars[gvarLastChanged].unit) {
|
||||
lcdDrawText(lcdLastRightPos, 5 * FH, "%", BOLD);
|
||||
}
|
||||
|
|
|
@ -65,6 +65,17 @@ void drawVerticalScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uin
|
|||
lcdDrawVerticalLine(x, y + yofs, yhgt, SOLID, FORCE);
|
||||
}
|
||||
|
||||
void drawGauge(coord_t x, coord_t y, coord_t w, coord_t h, int32_t val, int32_t max)
|
||||
{
|
||||
lcdDrawRect(x, y, w+1, h);
|
||||
lcdDrawFilledRect(x+1, y+1, w-1, 4, SOLID, ERASE);
|
||||
coord_t len = limit((uint8_t)1, uint8_t((abs(val) * w/2 + max/2) / max), uint8_t(w/2));
|
||||
coord_t x0 = (val>0) ? x+w/2 : x+1+w/2-len;
|
||||
for (coord_t i=h-2; i>0; i--) {
|
||||
lcdDrawSolidHorizontalLine(x0, y+i, len);
|
||||
}
|
||||
}
|
||||
|
||||
void title(const char * s)
|
||||
{
|
||||
lcdDrawText(0, 0, s, INVERS);
|
||||
|
|
|
@ -111,8 +111,6 @@ void lcdDrawText(coord_t x, coord_t y, const char * s);
|
|||
void lcdDrawSizedText(coord_t x, coord_t y, const char * s, unsigned char len);
|
||||
void lcdDrawTextAlignedLeft(coord_t y, const char * s);
|
||||
|
||||
#define lcdDrawTextAlignedCenter(y, s) lcdDrawText((LCD_W-sizeof(s)*FW+FW+1)/2, y, s)
|
||||
|
||||
void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags mode=0);
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode, uint8_t len);
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode=0);
|
||||
|
|
|
@ -80,7 +80,7 @@ void menuModelFailsafe(event_t event)
|
|||
}
|
||||
}
|
||||
|
||||
lcdDrawTextAlignedCenter(0, TR_FAILSAFESET);
|
||||
lcdDrawText(LCD_W / 2, 0, STR_FAILSAFESET, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
|
||||
coord_t x = colW;
|
||||
|
|
|
@ -202,7 +202,7 @@ void menuFirstCalib(event_t event)
|
|||
chainMenu(menuMainView);
|
||||
}
|
||||
else {
|
||||
lcdDrawTextAlignedCenter(0*FH, TR_MENUCALIBRATION);
|
||||
lcdDrawText(LCD_W / 2, 0, STR_MENUCALIBRATION, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
menuCommonCalib(event);
|
||||
}
|
||||
|
|
|
@ -61,11 +61,7 @@ void menuChannelsView(event_t event)
|
|||
else if (g_model.extendedLimits)
|
||||
limits *= LIMIT_EXT_PERCENT / 100;
|
||||
|
||||
if (reusableBuffer.viewChannels.mixersView)
|
||||
lcdDrawTextAlignedCenter(0, TR_MIXERS_MONITOR);
|
||||
else
|
||||
lcdDrawTextAlignedCenter(0, TR_CHANNELS_MONITOR);
|
||||
|
||||
lcdDrawText(LCD_W / 2, 0, reusableBuffer.viewChannels.mixersView ? STR_MIXERS_MONITOR : STR_CHANNELS_MONITOR, CENTERED);
|
||||
lcdInvertLine(0);
|
||||
|
||||
// Column separator
|
||||
|
|
|
@ -59,14 +59,6 @@ bool menuTextView(event_t event)
|
|||
lcd->drawTextMaxWidth(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + i * FH, reusableBuffer.viewText.lines[i], 0, LCD_W - 2 * MENUS_MARGIN_LEFT);
|
||||
}
|
||||
|
||||
#if 0
|
||||
char * title = s_text_file;
|
||||
#if defined(SIMU)
|
||||
if (!strncmp(title, "./", 2)) title += 2;
|
||||
#endif
|
||||
lcdDrawTextAlignedCenter(MENU_FOOTER_TOP, title, HEADER_COLOR);
|
||||
#endif
|
||||
|
||||
drawVerticalScrollbar(LCD_W-5, 50, 195, menuVerticalOffset, lines_count, NUM_BODY_LINES);
|
||||
|
||||
return true;
|
||||
|
|
|
@ -71,6 +71,7 @@ set(GUI_SRC
|
|||
radio_diaganas.cpp
|
||||
view_telemetry.cpp
|
||||
view_about.cpp
|
||||
view_channels.cpp
|
||||
)
|
||||
|
||||
if(GVARS)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue