3djc/add logicial switches monitor (#3611)

* Prep work for Logic Switches

* Feature complete

* Fixe for sometime needing two RTN to get out of logical switchs monitor
All monitors title bar in upper case for consistency with the rest of OpenTX

* Cosmetics

* Add translations support to the MONITORS screens

* Add the right icon to the logical switch monitor

* Cosmetics

* uncrustify

* Cosmetics
This commit is contained in:
3djc
2016-06-19 12:46:51 +02:00
committed by Bertrand Songis
parent d01b427127
commit 4ad8c79bc1
20 changed files with 287 additions and 117 deletions
+1 -1
View File
@@ -95,7 +95,7 @@ if(PCB STREQUAL HORUS)
menu_model_inputs.cpp
menu_model_mixes.cpp
view_channels.cpp
view_logic_switches.cpp
view_logical_switches.cpp
view_about.cpp
view_text.cpp
screens_setup.cpp
+9 -12
View File
@@ -100,8 +100,7 @@ enum MenuIcons {
ICON_MONITOR_OUTPUTS2,
ICON_MONITOR_MIXERS1,
ICON_MONITOR_MIXERS2,
/* ICON_MONITOR_LOGIC_SWITCHES1,
ICON_MONITOR_LOGIC_SWITCHES2,*/
ICON_MONITOR_LOGICAL_SWITCHES,
MENUS_ICONS_COUNT
};
@@ -167,8 +166,7 @@ const uint8_t MONITOR_ICONS[] = {
ICON_MONITOR_OUTPUTS2,
ICON_MONITOR_MIXERS1,
ICON_MONITOR_MIXERS2,
/* ICON_MONITOR_LOGIC_SWITCHES1,
ICON_MONITOR_LOGIC_SWITCHES2*/
ICON_MONITOR_LOGICAL_SWITCHES
};
bool menuModelSetup(evt_t event);
@@ -234,16 +232,15 @@ static const MenuHandlerFunc menuTabStats[] PROGMEM = {
enum EnumTabMonitors
{
e_Outputs1,
e_Outputs2,
e_Mixers1,
e_Mixers2,
/* e_LogicSwitches1,
e_LogicSwitches2,*/
e_TabChannelsPagesCount
e_MonOutputs1,
e_MonOutputs2,
e_MonMixers1,
e_MonMixers2,
e_MonLogicalSwitches,
e_MonTabChannelsPagesCount
};
extern const MenuHandlerFunc menuTabMonitors[e_TabChannelsPagesCount];
extern const MenuHandlerFunc menuTabMonitors[e_MonTabChannelsPagesCount];
extern uint8_t lastMonitorPage;
extern const MenuHandlerFunc menuTabScreensSetup[1+MAX_CUSTOM_SCREENS] PROGMEM;
+1 -2
View File
@@ -111,8 +111,7 @@ class DarkblueTheme: public Theme
loadMenuIcon(ICON_MONITOR_OUTPUTS2, "mask_monitor_outputs2.png");
loadMenuIcon(ICON_MONITOR_MIXERS1, "mask_monitor_mixes1.png");
loadMenuIcon(ICON_MONITOR_MIXERS2, "mask_monitor_mixes2.png");
/* loadMenuIcon(ICON_MONITOR_LOGIC_SWITCHES1, "mask_monitor_outputs1.png");
loadMenuIcon(ICON_MONITOR_LOGIC_SWITCHES2, "mask_monitor_outputs1.png");*/
loadMenuIcon(ICON_MONITOR_LOGICAL_SWITCHES, "/mask_monitor_logsw.png");
}
virtual void load() const
+1 -2
View File
@@ -127,8 +127,7 @@ class DefaultTheme: public Theme
loadMenuIcon(ICON_MONITOR_OUTPUTS2, "mask_monitor_outputs2.png");
loadMenuIcon(ICON_MONITOR_MIXERS1, "mask_monitor_mixes1.png");
loadMenuIcon(ICON_MONITOR_MIXERS2, "mask_monitor_mixes2.png");
/* loadMenuIcon(ICON_MONITOR_LOGIC_SWITCHES1, "mask_monitor_outputs1.png");
loadMenuIcon(ICON_MONITOR_LOGIC_SWITCHES2, "mask_monitor_outputs1.png");*/
loadMenuIcon(ICON_MONITOR_LOGICAL_SWITCHES, "/mask_monitor_logsw.png");
BitmapBuffer * background = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_bg.png"));
BitmapBuffer * shadow = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_shadow.png"));
+55 -57
View File
@@ -36,68 +36,66 @@ const BitmapBuffer * outR_bmp = NULL;
bool menuOutputs1(evt_t);
bool menuOutputs2(evt_t);
bool menuMixers1(evt_t);
bool menuMixers2(evt_t);
extern bool menuLogicSwitches1(evt_t);
extern bool menuLogicSwitches2(evt_t);
extern bool menuMixers1(evt_t);
extern bool menuMixers2(evt_t);
extern bool menuLogicalSwitches(evt_t);
const MenuHandlerFunc menuTabMonitors[] PROGMEM = {
menuOutputs1,
menuOutputs2,
menuMixers1,
menuMixers2,
/* menuLogicSwitches1,
menuLogicSwitches2*/
menuLogicalSwitches
};
uint8_t lastMonitorPage = 0;
uint16_t posOnBar(int16_t value_to100){
return divRoundClosest((value_to100 + (g_model.extendedLimits ? 150 : 100)) * COLUMN_SIZE, (g_model.extendedLimits ? 150 : 100)*2);
uint16_t posOnBar(int16_t value_to100)
{
return divRoundClosest((value_to100 + (g_model.extendedLimits ? 150 : 100)) * COLUMN_SIZE, (g_model.extendedLimits ? 150 : 100) * 2);
}
void drawSingleMixerBar(uint16_t x, uint16_t y, uint8_t Chan)
void drawSingleMixerBar(coord_t x, coord_t y, uint8_t chan)
{
char chanString[] = "CH 32";
char chanString[] = "Ch 32";
int16_t chanVal = calcRESXto100(ex_chans[chan]);
int16_t chanVal = calcRESXto100(ex_chans[Chan]);
strAppend(chanString, "Ch ");
strAppendSigned(&chanString[3], Chan + 1, 2);
strAppendSigned(&chanString[3], chan + 1, 2);
lcdDrawText(x + X_OFFSET, y + 1, chanString, TINSIZE | TEXT_COLOR | LEFT);
lcdDrawSizedText(x + X_OFFSET + 50, y + 1, g_model.limitData[Chan].name, sizeof(g_model.limitData[Chan].name), TINSIZE | TEXT_COLOR | LEFT | ZCHAR);
lcdColorTable[CUSTOM_COLOR_INDEX]= RGB(222, 222, 222);
lcdDrawSizedText(x + X_OFFSET + 50, y + 1, g_model.limitData[chan].name, sizeof(g_model.limitData[chan].name), TINSIZE | TEXT_COLOR | LEFT | ZCHAR);
lcdColorTable[CUSTOM_COLOR_INDEX] = RGB(222, 222, 222);
lcdDrawSolidFilledRect(x + X_OFFSET, y + 11, COLUMN_SIZE, BAR_HEIGHT, CUSTOM_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(chanVal), y + 11, BAR_HEIGHT , HEADER_BGCOLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(chanVal), y + 11, BAR_HEIGHT, HEADER_BGCOLOR);
strAppendSigned(chanString, chanVal);
lcdDrawText(x + X_OFFSET + COLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT);
lcdColorTable[CUSTOM_COLOR_INDEX]= RGB(25, 150, 50);
if(chanVal > 0){
lcdDrawSolidFilledRect(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, divRoundClosest(chanVal * COLUMN_SIZE, 200) , BAR_HEIGHT, CUSTOM_COLOR);
lcdColorTable[CUSTOM_COLOR_INDEX] = RGB(25, 150, 50);
if (chanVal > 0) {
lcdDrawSolidFilledRect(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, divRoundClosest(chanVal * COLUMN_SIZE, 200), BAR_HEIGHT, CUSTOM_COLOR);
}
else if (chanVal < 0) {
uint16_t endpoint = x + X_OFFSET + COLUMN_SIZE / 2;
uint16_t size = divRoundClosest(-chanVal * COLUMN_SIZE, 200);
lcdDrawSolidFilledRect(endpoint - size, y + 11, size, BAR_HEIGHT, CUSTOM_COLOR);
lcdDrawSolidFilledRect(endpoint - size, y + 11, size, BAR_HEIGHT, CUSTOM_COLOR);
}
lcd->drawSolidVerticalLine(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, BAR_HEIGHT , TEXT_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, BAR_HEIGHT, TEXT_COLOR);
}
void drawSingleOutputBar(uint16_t x, uint16_t y, uint8_t channel)
void drawSingleOutputBar(coord_t x, coord_t y, uint8_t channel)
{
char chanString[] = "Ch 32";
uint16_t limits = (g_model.extendedLimits ? 300 : 200);
int16_t chanVal = calcRESXto100(channelOutputs[channel]);
LimitData * ld = limitAddress(channel);
if (!locked_bmp) locked_bmp = BitmapBuffer::load(getThemePath("mask_monitor_lockch.png"));
if (!inver_bmp) inver_bmp = BitmapBuffer::load(getThemePath("mask_monitor_inver.png"));
if (!outL_bmp) outL_bmp = BitmapBuffer::load(getThemePath("mask_monitor_outL.png"));
@@ -105,22 +103,22 @@ void drawSingleOutputBar(uint16_t x, uint16_t y, uint8_t channel)
strAppendSigned(&chanString[3], channel + 1, 2);
lcdDrawText(x + X_OFFSET, y + 1, chanString, TINSIZE | TEXT_COLOR | LEFT);
lcdDrawSizedText(x + X_OFFSET + 50, y + 1, g_model.limitData[channel].name, sizeof(g_model.limitData[channel].name), TINSIZE | TEXT_COLOR | LEFT | ZCHAR);
lcdColorTable[CUSTOM_COLOR_INDEX]= RGB(222, 222, 222);
lcdColorTable[CUSTOM_COLOR_INDEX] = RGB(222, 222, 222);
lcdDrawSolidFilledRect(x + X_OFFSET, y + 11, COLUMN_SIZE, BAR_HEIGHT, CUSTOM_COLOR);
lcdDrawText(x + X_OFFSET + posOnBar(-100 + ld->min/10)+2, y + 10, "]",TINSIZE| TEXT_COLOR | RIGHT);
lcdDrawText(x + X_OFFSET + posOnBar(100 + ld->max/10), y + 10, "[",TINSIZE| TEXT_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, BAR_HEIGHT , MAINVIEW_GRAPHICS_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(chanVal), y + 11, BAR_HEIGHT , HEADER_BGCOLOR);
lcdDrawText(x + X_OFFSET + posOnBar(-100 + ld->min / 10) + 2, y + 10, "]", TINSIZE | TEXT_COLOR | RIGHT);
lcdDrawText(x + X_OFFSET + posOnBar(100 + ld->max / 10), y + 10, "[", TINSIZE | TEXT_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + posOnBar(chanVal), y + 11, BAR_HEIGHT, HEADER_BGCOLOR);
strAppendSigned(chanString, chanVal);
if (chanVal < -limits / 2) {
lcd->drawBitmap(x + X_OFFSET + COLUMN_SIZE / 2 - 55, y + 8, outL_bmp);
chanVal = - limits / 2;
chanVal = -limits / 2;
lcdDrawText(x + X_OFFSET + COLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT | INVERS);
}
else if (chanVal > limits / 2) {
@@ -131,31 +129,31 @@ void drawSingleOutputBar(uint16_t x, uint16_t y, uint8_t channel)
else {
lcdDrawText(x + X_OFFSET + COLUMN_SIZE - 2, y + 1, chanString, TINSIZE | TEXT_COLOR | RIGHT);
}
if(posOnBar(chanVal) > posOnBar(calcRESXto100(ld->offset))){
lcdDrawSolidFilledRect(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, posOnBar(chanVal) - posOnBar(calcRESXto100(ld->offset)), BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR);
if (posOnBar(chanVal) > posOnBar(calcRESXto100(ld->offset))) {
lcdDrawSolidFilledRect(x + X_OFFSET + posOnBar(calcRESXto100(ld->offset)), y + 11, posOnBar(chanVal) - posOnBar(calcRESXto100(ld->offset)), BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR);
}
else if (posOnBar(chanVal) < posOnBar(calcRESXto100(ld->offset))) {
uint16_t endpoint = x + X_OFFSET + posOnBar(calcRESXto100(ld->offset));
uint16_t size = posOnBar(calcRESXto100(ld->offset)) - posOnBar(chanVal);
lcdDrawSolidFilledRect(endpoint - size, y + 11, size, BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR);
lcdDrawSolidFilledRect(endpoint - size, y + 11, size, BAR_HEIGHT, MAINVIEW_GRAPHICS_COLOR);
}
if (safetyCh[channel] != OVERRIDE_CHANNEL_UNDEFINED) lcd->drawBitmap(x + 3, y + 5, locked_bmp);
if (ld->revert) lcd->drawBitmap(x + 16, y + 5, inver_bmp);
lcd->drawSolidVerticalLine(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, BAR_HEIGHT , TEXT_COLOR);
lcd->drawSolidVerticalLine(x + X_OFFSET + COLUMN_SIZE / 2, y + 11, BAR_HEIGHT, TEXT_COLOR);
}
bool menuOutputsMonitor(evt_t event, uint8_t page)
{
uint8_t channel = 16*page;
uint16_t x=1, y=Y_OFFSET;
for (uint8_t i=0; i<8; i++, channel++, y+=ROW_HEIGHT) {
uint8_t channel = 16 * page;
uint16_t x = 1, y = Y_OFFSET;
for (uint8_t i = 0; i < 8; i++, channel++, y += ROW_HEIGHT) {
drawSingleOutputBar(x, y, channel);
}
x = 1 + LCD_W/2;
x = 1 + LCD_W / 2;
y = Y_OFFSET;
for(uint8_t i=0; i<8; i++, channel++, y+=ROW_HEIGHT) {
for (uint8_t i = 0; i < 8; i++, channel++, y += ROW_HEIGHT) {
drawSingleOutputBar(x, y, channel);
}
return true;
@@ -163,28 +161,28 @@ bool menuOutputsMonitor(evt_t event, uint8_t page)
bool menuOutputs1(evt_t event)
{
MENU("Output monitor 1-16", MONITOR_ICONS, menuTabMonitors, e_Outputs1, 0, { 0 });
lastMonitorPage = e_Outputs1;
MENU(STR_MONITOR_OUTPUTS1, MONITOR_ICONS, menuTabMonitors, e_MonOutputs1, 0, { 0 });
lastMonitorPage = e_MonOutputs1;
return menuOutputsMonitor(event, 0);
}
bool menuOutputs2(evt_t event)
{
MENU("Output monitor 17-32", MONITOR_ICONS, menuTabMonitors, e_Outputs2, 0, { 0 });
lastMonitorPage = e_Outputs2;
MENU(STR_MONITOR_OUTPUTS2, MONITOR_ICONS, menuTabMonitors, e_MonOutputs2, 0, { 0 });
lastMonitorPage = e_MonOutputs2;
return menuOutputsMonitor(event, 1);
}
bool menuMixersMonitor(evt_t event, uint8_t page)
{
uint8_t channel = 16*page;
uint16_t x=1, y=Y_OFFSET;
for (uint8_t i=0; i<8; i++, channel++, y+=ROW_HEIGHT) {
uint8_t channel = 16 * page;
uint16_t x = 1, y = Y_OFFSET;
for (uint8_t i = 0; i < 8; i++, channel++, y += ROW_HEIGHT) {
drawSingleMixerBar(x, y, channel);
}
x = 1 + LCD_W/2;
x = 1 + LCD_W / 2;
y = Y_OFFSET;
for(uint8_t i=0; i<8; i++, channel++, y+=ROW_HEIGHT) {
for (uint8_t i = 0; i < 8; i++, channel++, y += ROW_HEIGHT) {
drawSingleMixerBar(x, y, channel);
}
return true;
@@ -192,14 +190,14 @@ bool menuMixersMonitor(evt_t event, uint8_t page)
bool menuMixers1(evt_t event)
{
MENU("Mixer monitor 1-16", MONITOR_ICONS, menuTabMonitors, e_Mixers1, 0, { 0 });
lastMonitorPage = e_Mixers1;
MENU(STR_MONITOR_MIXERS1, MONITOR_ICONS, menuTabMonitors, e_MonMixers1, 0, { 0 });
lastMonitorPage = e_MonMixers1;
return menuMixersMonitor(event, 0);
}
bool menuMixers2(evt_t event)
{
MENU("Mixer monitor 1-16", MONITOR_ICONS, menuTabMonitors, e_Mixers2, 0, { 0 });
lastMonitorPage = e_Mixers2;
MENU(STR_MONITOR_MIXERS2, MONITOR_ICONS, menuTabMonitors, e_MonMixers2, 0, { 0 });
lastMonitorPage = e_MonMixers2;
return menuMixersMonitor(event, 1);
}
@@ -1,42 +0,0 @@
/*
* 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"
/*
extern bool menuChannelsMonitor(evt_t, uint8_t);
uint8_t drawLS_Table(uint16_t x, uint16_t y){
}
bool menuLogicSwitches1(evt_t event)
{
MENU("Logic Switches monitor 1-32", MONITOR_ICONS, menuTabMonitors, e_LogicSwitches1, 0, { 0 });
lastMonitorPage = e_LogicSwitches1;
return menuChannelsMonitor(event, 4);
}
bool menuLogicSwitches2(evt_t event)
{
MENU("Logic Switches 33-64",MONITOR_ICONS, menuTabMonitors, e_LogicSwitches2, 0, { 0 });
lastMonitorPage = e_LogicSwitches2;
return menuChannelsMonitor(event, 5);
}*/
@@ -0,0 +1,154 @@
/*
* 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"
#define X_OFF 15
#define Y_OFF 55
#define HLINE_Y_OFF 215
#define LS_COL_WIDTH 50
#define LS_LINE_HEIGHT 17
#define X_FUNC 50
#define Y_FUNC 225
#define CSW_1ST_COLUMN 50
#define CSW_2ND_COLUMN 120
#define CSW_3RD_COLUMN 200
#define CSW_4TH_COLUMN 280
#define CSW_5TH_COLUMN 340
#define CSW_6TH_COLUMN 390
#define NUM_LOGICAL_SWITCH 64
int lsScrollIdx = 0;
bool menuLogicalSwitchesMonitor(evt_t, uint8_t);
extern void putsEdgeDelayParam(coord_t, coord_t, LogicalSwitchData *, uint8_t, uint8_t);
bool scrollLogicalSwitchesMonitor(evt_t event)
{
switch (event) {
case EVT_ROTARY_LEFT:
if (lsScrollIdx > 0) {
lsScrollIdx--;
}
else {
lsScrollIdx = NUM_LOGICAL_SWITCH - 1;
}
killEvents(event);
break;
case EVT_ROTARY_RIGHT:
if (lsScrollIdx < NUM_LOGICAL_SWITCH - 1) {
lsScrollIdx++;
}
else {
lsScrollIdx = 0;
}
killEvents(event);
break;
case EVT_KEY_FIRST(KEY_EXIT):
popMenu();
}
return true;
}
void displayLogicalSwitchedDetails(coord_t x, coord_t y, uint8_t idx)
{
LogicalSwitchData * cs = lswAddress(idx);
lcdDrawTextAtIndex(x, y, STR_VCSWFUNC, cs->func, 0);
// CSW params
unsigned int cstate = lswFamily(cs->func);
if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) {
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, 0);
putsSwitches(CSW_3RD_COLUMN, y, cs->v2, 0);
}
else if (cstate == LS_FAMILY_EDGE) {
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, 0);
putsEdgeDelayParam(CSW_3RD_COLUMN, y, cs, 0, 0);
}
else if (cstate == LS_FAMILY_COMP) {
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, 0);
putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, 0);
}
else if (cstate == LS_FAMILY_TIMER) {
lcdDrawNumber(CSW_2ND_COLUMN, y, lswTimerValue(cs->v1), LEFT | PREC1);
lcdDrawNumber(CSW_3RD_COLUMN, y, lswTimerValue(cs->v2), LEFT | PREC1);
}
else {
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, 0);
putsChannelValue(CSW_3RD_COLUMN, y, cs->v1, cs->v1 <= MIXSRC_LAST_CH ? calc100toRESX(cs->v2) : cs->v2, LEFT);
}
// CSW AND switch
putsSwitches(CSW_4TH_COLUMN, y, cs->andsw, 0);
// CSW duration
if (cs->duration > 0)
lcdDrawNumber(CSW_5TH_COLUMN, y, cs->duration, PREC1 | LEFT);
else
lcdDrawTextAtIndex(CSW_5TH_COLUMN, y, STR_MMMINV, 0, 0);
// CSW delay
if (cstate == LS_FAMILY_EDGE) {
lcdDrawText(CSW_6TH_COLUMN, y, STR_NA);
}
else if (cs->delay > 0) {
lcdDrawNumber(CSW_6TH_COLUMN, y, cs->delay, PREC1 | LEFT);
}
else {
lcdDrawTextAtIndex(CSW_6TH_COLUMN, y, STR_MMMINV, 0, 0);
}
}
bool menuLogicalSwitchesMonitor(evt_t event, uint8_t page)
{
char lsString[] = "L64";
uint8_t col, lsIdx, line;
LcdFlags attr;
lcdColorTable[CUSTOM_COLOR_INDEX] = RGB(160, 160, 160);
scrollLogicalSwitchesMonitor(event);
for (line = 1, lsIdx = 1; line < 9; line++) {
for (col = 1; col < 9; col++, lsIdx++) {
strAppendSigned(&lsString[1], lsIdx, 2);
LogicalSwitchData * cs = lswAddress(lsIdx - 1);
attr = (CENTERED);
if (cs->func == LS_FUNC_NONE) attr += (CUSTOM_COLOR);
else if (getSwitch(SWSRC_SW1 + lsIdx - 1)) attr += (BOLD);
if (lsIdx == (lsScrollIdx + 1)) attr += (INVERS);
lcdDrawText(X_OFF + col * LS_COL_WIDTH, Y_OFF + line * LS_LINE_HEIGHT, lsString, attr);
}
}
lcdDrawHorizontalLine(0, HLINE_Y_OFF, LCD_W, SOLID);
displayLogicalSwitchedDetails(X_FUNC, Y_FUNC, lsScrollIdx);
return true;
}
bool menuLogicalSwitches(evt_t event)
{
MENU(STR_MONITOR_SWITCHES, MONITOR_ICONS, menuTabMonitors, e_MonLogicalSwitches, 0, { 0 });
lastMonitorPage = e_MonLogicalSwitches;
return menuLogicalSwitchesMonitor(event, 4);
}
+5
View File
@@ -365,6 +365,11 @@ const pm_char STR_MENUTEMPLATES[] PROGMEM = TR_MENUTEMPLATES;
const pm_char STR_MENUSTAT[] PROGMEM = TR_MENUSTAT;
const pm_char STR_MENUDEBUG[] PROGMEM = TR_MENUDEBUG;
const pm_char STR_MONITOR_OUTPUTS1[] PROGMEM = TR_MONITOR_OUTPUTS1;
const pm_char STR_MONITOR_OUTPUTS2[] PROGMEM = TR_MONITOR_OUTPUTS2;
const pm_char STR_MONITOR_SWITCHES[] PROGMEM = TR_MONITOR_SWITCHES;
const pm_char STR_MONITOR_MIXERS1[] PROGMEM = TR_MONITOR_MIXERS1;
const pm_char STR_MONITOR_MIXERS2[] PROGMEM = TR_MONITOR_MIXERS2;
const pm_char STR_MENUGLOBALVARS[] PROGMEM = TR_MENUGLOBALVARS;
#if defined(DSM2) || defined(PXX)
+5
View File
@@ -564,6 +564,11 @@ extern const pm_char STR_MENUTELEMETRY[];
extern const pm_char STR_MENUTEMPLATES[];
extern const pm_char STR_MENUSTAT[];
extern const pm_char STR_MENUDEBUG[];
extern const pm_char STR_MONITOR_OUTPUTS1[];
extern const pm_char STR_MONITOR_OUTPUTS2[];
extern const pm_char STR_MONITOR_SWITCHES[];
extern const pm_char STR_MONITOR_MIXERS1[];
extern const pm_char STR_MONITOR_MIXERS2[];
extern const pm_char STR_MENUGLOBALVARS[];
extern const pm_char STR_INVERT_THR[];
extern const pm_char STR_AND_SWITCH[];
+5
View File
@@ -847,6 +847,11 @@
#define TR_MENUTEMPLATES "ŠABLONY"
#define TR_MENUSTAT "STATISTIKA"
#define TR_MENUDEBUG "DIAG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "RX číslo", INDENT "Číslo přijímače")
#define TR_RECEIVER INDENT "Receiver"
+5
View File
@@ -851,6 +851,11 @@
#define TR_MENUTEMPLATES "VORLAGEN"
#define TR_MENUSTAT "STAT"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "Empf Nr.", INDENT "Modell-Match-Nr.")
#define TR_RECEIVER INDENT "Receiver"
+5
View File
@@ -865,6 +865,11 @@
#define TR_MENUTEMPLATES "TEMPLATES"
#define TR_MENUSTAT "STATS"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "RxNum", INDENT "Receiver No.")
#define TR_RECEIVER INDENT "Receiver"
+5
View File
@@ -815,6 +815,11 @@
#define TR_MENUTEMPLATES "PLANTILLAS"
#define TR_MENUSTAT "STATS"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#define TR_RECEIVER_NUM TR("RxNum", INDENT"Receptor No.")
#define TR_RECEIVER INDENT "Receiver"
#define TR_MULTI_RFTUNE INDENT "RF Freq. fine tune"
+5
View File
@@ -815,6 +815,11 @@
#define TR_MENUTEMPLATES "TEMPLATES"
#define TR_MENUSTAT "STATS"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#define TR_RECEIVER_NUM TR("RxNum", INDENT"Receiver No.")
#define TR_RECEIVER INDENT "Receiver"
#define TR_MULTI_RFTUNE INDENT "RF Freq. fine tune"
+5
View File
@@ -842,6 +842,11 @@
#define TR_MENUTEMPLATES "GABARITS"
#define TR_MENUSTAT TR("STATS", "STATISTIQUES")
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "NumRx", INDENT "No. récepteur")
#define TR_RECEIVER INDENT "Récepteur"
+5
View File
@@ -846,6 +846,11 @@
#define TR_MENUTEMPLATES "ESEMPI GUIDA"
#define TR_MENUSTAT "STATO"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "RxNum", INDENT "Ricevente No.")
#define TR_RECEIVER INDENT "Receiver"
+6 -1
View File
@@ -860,6 +860,11 @@
#define TR_MENUTEMPLATES "SJABLONEN"
#define TR_MENUSTAT "STAT"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "RxNum", INDENT "Receiver No.")
#define TR_RECEIVER INDENT "Receiver"
@@ -971,7 +976,7 @@
#define TR_MONTHS { "Jan", "Fev", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }
#define TR_ROTARY_ENCODER "Draaischakelaar"
#define TR_CHANNELS_MONITOR "Kanaal-Monitor==>"
#define TR_MIXERS_MONITOR "==>Mixer Monitor"
#define TR_MIXERS_MONITOR "==>MIXERS MONitor"
#define TR_PATH_TOO_LONG "Pad te Lang"
#define TR_VIEW_TEXT "Lees Tekst"
#define TR_FLASH_BOOTLOADER "Flash BootLoader"
+5
View File
@@ -848,6 +848,11 @@
#define TR_MENUTEMPLATES "SZABLONY"
#define TR_MENUSTAT "STAT"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR( INDENT "Nr RX",INDENT "Nr odbiornika")
#define TR_RECEIVER INDENT "Receiver"
+5
View File
@@ -811,6 +811,11 @@
#define TR_MENUTEMPLATES "MODELOS"
#define TR_MENUSTAT "REGISTROS"
#define TR_MENUDEBUG "DEPURAR"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#define TR_RECEIVER_NUM "RxNum"
#define TR_RECEIVER INDENT "Receiver"
#define TR_SYNCMENU "Sync [MENU]"
+5
View File
@@ -859,6 +859,11 @@
#define TR_MENUTEMPLATES "MALLAR"
#define TR_MENUSTAT "STATISTIK"
#define TR_MENUDEBUG "DEBUG"
#define TR_MONITOR_OUTPUTS1 "OUTPUTS MONITOR 1/16"
#define TR_MONITOR_OUTPUTS2 "OUTPUTS MONITOR 17/32"
#define TR_MONITOR_SWITCHES "LOGICAL SWITCHES MONITOR"
#define TR_MONITOR_MIXERS1 "MIXERS MONITOR 1/16"
#define TR_MONITOR_MIXERS2 "MIXERS MONITOR 17/32"
#if defined(CPUARM)
#define TR_RECEIVER_NUM TR(INDENT "RxNum", INDENT "Mottagare Nr.")
#define TR_RECEIVER INDENT "Receiver"