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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user