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