diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp
index 6b4a25ba9..0a0a6a7b2 100644
--- a/companion/src/modeledit/telemetry.cpp
+++ b/companion/src/modeledit/telemetry.cpp
@@ -28,7 +28,7 @@ TelemetryAnalog::TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, Mod
update();
ui->UnitCB->setCurrentIndex(analog.type);
- if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
+ if (!IS_TARANIS(firmware->getBoard())) {
ui->alarm1LevelCB->setCurrentIndex(analog.alarms[0].level);
ui->alarm1GreaterCB->setCurrentIndex(analog.alarms[0].greater);
ui->alarm2LevelCB->setCurrentIndex(analog.alarms[1].level);
@@ -487,6 +487,11 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
}
if (IS_ARM(firmware->getBoard())) {
+ ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
+ ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
+ if (IS_9XRPRO(firmware->getBoard())) {
+ ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
+ }
ui->telemetryProtocol->setCurrentIndex(model.telemetryProtocol);
}
else {
@@ -502,7 +507,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
ui->A2Layout->addWidget(analogs[1]);
connect(analogs[1], SIGNAL(modified()), this, SLOT(onAnalogModified()));
- if (IS_ARM(GetEepromInterface()->getBoard())) {
+ if (IS_ARM(firmware->getBoard())) {
analogs[2] = new TelemetryAnalog(this, model.frsky.channels[2], model, generalSettings, firmware);
ui->A3Layout->addWidget(analogs[2]);
connect(analogs[2], SIGNAL(modified()), this, SLOT(onAnalogModified()));
@@ -522,7 +527,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
telemetryCustomScreens[i] = tab;
}
- if (IS_ARM(GetEepromInterface()->getBoard())) {
+ if (IS_ARM(firmware->getBoard())) {
ui->bladesCount->setMinimum(1);
ui->bladesCount->setMaximum(128);
}
@@ -537,6 +542,19 @@ TelemetryPanel::~TelemetryPanel()
delete ui;
}
+void TelemetryPanel::update()
+{
+ if (IS_TARANIS(firmware->getBoard())) {
+ if (model.moduleData[0].protocol == OFF && model.moduleData[1].protocol == PPM) {
+ ui->telemetryProtocol->setEnabled(true);
+ }
+ else {
+ ui->telemetryProtocol->setEnabled(false);
+ ui->telemetryProtocol->setCurrentIndex(0);
+ }
+ }
+}
+
void TelemetryPanel::setup()
{
QString firmware_id = g.profile[g.id()].fwType();
@@ -545,7 +563,7 @@ void TelemetryPanel::setup()
ui->rssiAlarm1SB->setValue(model.frsky.rssiAlarms[0].value);
ui->rssiAlarm2SB->setValue(model.frsky.rssiAlarms[1].value);
- if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
+ if (!IS_TARANIS(firmware->getBoard())) {
ui->rssiAlarm1CB->setCurrentIndex(model.frsky.rssiAlarms[0].level);
ui->rssiAlarm2CB->setCurrentIndex(model.frsky.rssiAlarms[1].level);
}
diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h
index e28ff6387..62a66f4ff 100644
--- a/companion/src/modeledit/telemetry.h
+++ b/companion/src/modeledit/telemetry.h
@@ -81,6 +81,7 @@ class TelemetryPanel : public ModelPanel
public:
TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
virtual ~TelemetryPanel();
+ virtual void update();
private slots:
void on_telemetryProtocol_currentIndexChanged(int index);
diff --git a/companion/src/modeledit/telemetry.ui b/companion/src/modeledit/telemetry.ui
index 9a5facdf5..0a71acd35 100644
--- a/companion/src/modeledit/telemetry.ui
+++ b/companion/src/modeledit/telemetry.ui
@@ -46,16 +46,6 @@
0
- -
-
- FrSky S.PORT
-
-
- -
-
- FrSky D
-
-
diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp
index 22686bd76..91d29a620 100644
--- a/radio/src/gui/menu_general.cpp
+++ b/radio/src/gui/menu_general.cpp
@@ -1397,7 +1397,7 @@ void menuGeneralHardware(uint8_t event)
case ITEM_SETUP_HW_UART3_MODE:
g_eeGeneral.uart3Mode = selectMenuItem(HW_SETTINGS_COLUMN, y, STR_UART3MODE, STR_UART3MODES, g_eeGeneral.uart3Mode, 0, UART_MODE_MAX, attr, event);
if (checkIncDec_Ret) {
- uart3Init(g_eeGeneral.uart3Mode, g_model.telemetryProtocol);
+ uart3Init(g_eeGeneral.uart3Mode, MODEL_TELEMETRY_PROTOCOL);
}
break;
}
diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp
index a54a91d06..55e0ca95e 100644
--- a/radio/src/gui/menu_model.cpp
+++ b/radio/src/gui/menu_model.cpp
@@ -5600,9 +5600,17 @@ enum menuModelTelemetryItems {
#define IF_FAS_OFFSET(x)
#endif
+#if defined(PCBTARANIS)
+ #define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.externalModule == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW,
+#elif defined(CPUARM)
+ #define TELEMETRY_TYPE_ROWS 0,
+#else
+ #define TELEMETRY_TYPE_ROWS
+#endif
+
void menuModelTelemetry(uint8_t event)
{
- MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, CASE_CPUARM(0) CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2)});
+ MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, TELEMETRY_TYPE_ROWS CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2)});
uint8_t sub = m_posVert - 1;
@@ -5621,6 +5629,13 @@ void menuModelTelemetry(uint8_t event)
for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS);
uint8_t attr = (sub == k ? blink : 0);
#if defined(CPUARM)
diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp
index 7d15d55c0..b88ae4215 100644
--- a/radio/src/gui/menus.cpp
+++ b/radio/src/gui/menus.cpp
@@ -594,24 +594,24 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
break;
}
-#if defined(CPUARM)
- if (l_posVert<1) {
- s_pgOfs=0;
+ if (l_posVert == 0 || (l_posVert==2 && MAXCOL(vertpos_t(1)) >= HIDDEN_ROW) || (l_posVert==3 && MAXCOL(vertpos_t(1)) >= HIDDEN_ROW && MAXCOL(vertpos_t(2)) >= HIDDEN_ROW)) {
+ s_pgOfs = 0;
}
else if (menuTab && horTab) {
if (maxrow > LCD_LINES-1) {
while (1) {
- vertpos_t line = s_pgOfs+1;
+ vertpos_t firstLine = s_pgOfs + (MAXCOL(vertpos_t(1)) == HIDDEN_ROW ? 2 : 1);
+ vertpos_t line = firstLine;
for (int numLines=0; line<=maxrow && numLines max+s_pgOfs) {
+ int max = line - firstLine;
+ if (l_posVert > max+firstLine-1) {
s_pgOfs++;
}
- else if (l_posVert < 1+s_pgOfs) {
+ else if (l_posVert < firstLine) {
s_pgOfs--;
}
else {
@@ -630,25 +630,13 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
}
}
-#if LCD_W >= 212
- if (maxrow > LCD_LINES-1 && scrollbar_X)
+ if (maxrow > LCD_LINES-1 && scrollbar_X) {
displayScrollbar(scrollbar_X, FH, LCD_H-FH, s_pgOfs, menuTab ? maxrow : maxrow+1, LCD_LINES-1);
-#endif
+ }
-#else
- uint8_t max = menuTab ? LCD_LINES-1 : LCD_LINES-2;
- if (l_posVert<1) s_pgOfs=0;
- else if (l_posVert>max+s_pgOfs) s_pgOfs = l_posVert-max;
- else if (l_posVert<1+s_pgOfs) s_pgOfs = l_posVert-1;
-#endif
m_posVert = l_posVert;
m_posHorz = l_posHorz;
- if (s_pgOfs > 0) {
- l_posVert--;
- if (l_posVert == s_pgOfs && CURSOR_NOT_ALLOWED_IN_ROW(l_posVert)) {
- s_pgOfs = l_posVert-1;
- }
- }
+
return true;
}
@@ -982,8 +970,9 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
// cosmetics on 9x
if (s_pgOfs > 0) {
l_posVert--;
- if (l_posVert == s_pgOfs && CURSOR_NOT_ALLOWED_IN_ROW(l_posVert))
+ if (l_posVert == s_pgOfs && CURSOR_NOT_ALLOWED_IN_ROW(l_posVert)) {
s_pgOfs = l_posVert-1;
+ }
}
#endif
return true;
diff --git a/radio/src/gui/menus.h b/radio/src/gui/menus.h
index 3fec578b3..12db06fae 100644
--- a/radio/src/gui/menus.h
+++ b/radio/src/gui/menus.h
@@ -468,13 +468,13 @@ void displayWarning(uint8_t event);
#endif
#if defined(PCBTARANIS)
- #define POS_VERT_INIT (menuTab ? (MAXCOL((uint16_t)1) == 255 ? 2 : 1) : 0)
+ #define POS_VERT_INIT (menuTab ? (MAXCOL((uint16_t)1) >= HIDDEN_ROW ? (MAXCOL((uint16_t)2) >= HIDDEN_ROW ? 3 : 2) : 1) : 0)
#define POS_HORZ_INIT(posVert) ((COLATTR(posVert) & NAVIGATION_LINE_BY_LINE) ? -1 : 0)
- #define EDIT_MODE_INIT 0 // TODO enum
+ #define EDIT_MODE_INIT 0 // TODO enum
#else
- #define POS_VERT_INIT 0
+ #define POS_VERT_INIT 0
#define POS_HORZ_INIT(posVert) 0
- #define EDIT_MODE_INIT -1
+ #define EDIT_MODE_INIT -1
#endif
#endif
diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp
index b26c93449..35ced3138 100644
--- a/radio/src/opentx.cpp
+++ b/radio/src/opentx.cpp
@@ -3406,7 +3406,7 @@ inline void opentxInit(OPENTX_INIT_ARGS)
backlightOn();
#if defined(PCBTARANIS)
- uart3Init(g_eeGeneral.uart3Mode, g_model.telemetryProtocol);
+ uart3Init(g_eeGeneral.uart3Mode, MODEL_TELEMETRY_PROTOCOL);
#endif
#if defined(CPUARM)
diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp
index f1c158cbd..846f54a64 100644
--- a/radio/src/telemetry/frsky.cpp
+++ b/radio/src/telemetry/frsky.cpp
@@ -277,8 +277,9 @@ enum AlarmsCheckSteps {
void telemetryWakeup()
{
#if defined(CPUARM)
- if (telemetryProtocol != g_model.telemetryProtocol) {
- telemetryProtocol = g_model.telemetryProtocol;
+ uint8_t requiredTelemetryProtocol = MODEL_TELEMETRY_PROTOCOL;
+ if (telemetryProtocol != requiredTelemetryProtocol) {
+ telemetryProtocol = requiredTelemetryProtocol;
telemetryInit();
}
#endif
diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h
index 11175a4db..4f25f39b4 100644
--- a/radio/src/telemetry/frsky.h
+++ b/radio/src/telemetry/frsky.h
@@ -470,4 +470,10 @@ void telemetryInterrupt10ms(void);
void frskySetCellVoltage(uint8_t battnumber, frskyCellVoltage_t cellVolts);
void frskyUpdateCells(void);
+#if defined(PCBTARANIS)
+ #define MODEL_TELEMETRY_PROTOCOL ((g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.externalModule == MODULE_TYPE_PPM) ? g_model.telemetryProtocol : PROTOCOL_FRSKY_SPORT)
+#elif defined(CPUARM)
+ #define MODEL_TELEMETRY_PROTOCOL g_model.telemetryProtocol
+#endif
+
#endif