Introduce serial status

This commit is contained in:
3djc
2022-03-21 11:48:50 +01:00
committed by Raphael Coeffic
parent 4039069bb7
commit ab09d0a25f
19 changed files with 102 additions and 14 deletions
+38 -1
View File
@@ -20,6 +20,7 @@
*/
#include "opentx.h"
#include "mixer_scheduler.h"
#if !defined(EEPROM)
#include "storage/sdcard_common.h"
@@ -105,7 +106,10 @@ enum MenuModelSetupItems {
#if defined(HARDWARE_INTERNAL_MODULE)
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
#if defined(CROSSFIRE) || defined(GHOST)
ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_SERIALSTATUS,
#endif
#if defined(MULTIMODULE)
ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL,
ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE,
@@ -138,6 +142,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(CROSSFIRE) || defined(GHOST)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SERIALSTATUS,
#endif
#if defined(MULTIMODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
@@ -194,11 +199,18 @@ enum MenuModelSetupItems {
#define IF_NOT_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#define IF_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#define IF_NOT_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#if defined(CROSSFIRE) || defined(GHOST)
#define IF_MODULE_SYNCED(module, xxx) ((isModuleCrossfire(module) || isModuleGhost(module)) ? (uint8_t)(xxx) : HIDDEN_ROW)
#if SPORT_MAX_BAUDRATE < 400000
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx) ((isModuleCrossfire(module) || isModuleGhost(module)) ? (uint8_t)(xxx) : HIDDEN_ROW)
#else
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx) (isModuleCrossfire(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#endif
#else
#define IF_MODULE_SYNCED(module, xxx)
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx)
#endif
#if defined(PXX2)
#define REGISTRATION_ID_ROWS uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW),
@@ -353,6 +365,7 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
#define INTERNAL_MODULE_ROWS \
LABEL(InternalModule), \
MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE */ \
IF_MODULE_SYNCED(INTERNAL_MODULE, 0), /* Sync rate + errors */ \
MULTIMODULE_TYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL */ \
MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE */ \
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
@@ -379,6 +392,7 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
LABEL(ExternalModule), \
MODULE_TYPE_ROWS(EXTERNAL_MODULE), \
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), /* Baudrate */ \
IF_MODULE_SYNCED(EXTERNAL_MODULE, 0), /* Sync rate + errors */ \
MULTIMODULE_TYPE_ROWS(EXTERNAL_MODULE) /* PROTOCOL */ \
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) /* SUBTYPE */ \
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE) \
@@ -1065,7 +1079,7 @@ void menuModelSetup(event_t event)
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawText(INDENT_WIDTH, y, STR_BAUDRATE);
if (isModuleCrossfire(EXTERNAL_MODULE)) {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,attr | LEFT);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_CRSF_BAUDRATE, moduleData.crsf.telemetryBaudrate,attr | LEFT);
if (attr) {
moduleData.crsf.telemetryBaudrate =CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event,CROSSFIRE_STORE_TO_INDEX(moduleData.crsf.telemetryBaudrate),0, DIM(CROSSFIRE_BAUDRATES) - 1));
if (checkIncDec_Ret) {
@@ -1087,6 +1101,29 @@ void menuModelSetup(event_t event)
break;
}
#endif
#if (defined(CROSSFIRE) || defined(GHOST))
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_SERIALSTATUS:
#endif
#if defined(HARDWARE_EXTERNAL_MODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SERIALSTATUS:
#endif
lcdDrawText(INDENT_WIDTH, y, STR_STATUS);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, 1000000 / getMixerSchedulerPeriod(), LEFT | attr);
lcdDrawText(lcdNextPos, y, "Hz ", attr);
lcdDrawNumber(lcdNextPos, y, telemetryErrors, attr);
lcdDrawText(lcdNextPos + 1, y, "Err", attr);
if (attr) {
s_editMode = 0;
if (event == EVT_KEY_LONG(KEY_ENTER)) {
START_NO_HIGHLIGHT();
telemetryErrors = 0;
AUDIO_WARNING1();
killEvents(event);
}
}
break;
#endif
#if defined(MULTIMODULE)
#if defined(HARDWARE_INTERNAL_MODULE)
+28 -2
View File
@@ -20,6 +20,7 @@
*/
#include "opentx.h"
#include "mixer_scheduler.h"
uint8_t g_moduleIdx;
@@ -108,6 +109,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(CROSSFIRE) || defined(GHOST)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SERIALSTATUS,
#endif
#if defined (MULTIMODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
@@ -316,11 +318,17 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW()
#define IF_NOT_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#define IF_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#define IF_NOT_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#if defined(CROSSFIRE) || defined(GHOST)
#define IF_MODULE_SYNCED(module, xxx) ((isModuleCrossfire(module) || isModuleGhost(module)) ? (uint8_t)(xxx) : HIDDEN_ROW)
#if SPORT_MAX_BAUDRATE < 400000
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx) ((isModuleCrossfire(module) || isModuleGhost(module)) ? (uint8_t)(xxx) : HIDDEN_ROW)
#else
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx) (isModuleCrossfire(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#endif
#else
#define IF_MODULE_SYNCED(module, xxx)
#define IF_MODULE_BAUDRATE_ADJUST(module, xxx)
#endif
#if defined(PXX2)
#define REGISTRATION_ID_ROWS uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW),
@@ -415,7 +423,8 @@ void menuModelSetup(event_t event)
LABEL(ExternalModule),
EXTERNAL_MODULE_TYPE_ROW(),
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), // Baudrate
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), // Baudrate
IF_MODULE_SYNCED(EXTERNAL_MODULE, 0), // Sync rate + errors
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE)
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
AFHDS3_MODE_ROWS(EXTERNAL_MODULE)
@@ -1030,7 +1039,7 @@ void menuModelSetup(event_t event)
ModuleData &moduleData = g_model.moduleData[EXTERNAL_MODULE];
lcdDrawText(INDENT_WIDTH, y, STR_BAUDRATE);
if (isModuleCrossfire(EXTERNAL_MODULE)) {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,attr | LEFT);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_CRSF_BAUDRATE, moduleData.crsf.telemetryBaudrate,attr | LEFT);
if (attr) {
moduleData.crsf.telemetryBaudrate =CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event,CROSSFIRE_STORE_TO_INDEX(moduleData.crsf.telemetryBaudrate),0, DIM(CROSSFIRE_BAUDRATES) - 1));
if (checkIncDec_Ret) {
@@ -1052,6 +1061,23 @@ void menuModelSetup(event_t event)
break;
#endif
}
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SERIALSTATUS:
lcdDrawText(INDENT_WIDTH, y, STR_STATUS);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, 1000000 / getMixerSchedulerPeriod(), LEFT | attr);
lcdDrawText(lcdNextPos, y, "Hz ", attr);
lcdDrawNumber(lcdNextPos, y, telemetryErrors, attr);
lcdDrawText(lcdNextPos + 1, y, "Err", attr);
if (attr) {
s_editMode = 0;
if (event == EVT_KEY_LONG(KEY_ENTER)) {
START_NO_HIGHLIGHT();
telemetryErrors = 0;
AUDIO_WARNING1();
killEvents(event);
}
}
break;
#endif
#if defined(MULTIMODULE)
+20 -10
View File
@@ -23,6 +23,7 @@
#include "multi_rfprotos.h"
#include "io/multi_protolist.h"
#include "pulses/flysky.h"
#include "mixer_scheduler.h"
#include "opentx.h"
#include "libopenui.h"
@@ -610,16 +611,25 @@ class ModuleWindow : public FormGroup {
// Module parameters
if (moduleIdx== EXTERNAL_MODULE && isModuleCrossfire(moduleIdx)) {
grid.nextLine();
new StaticText(this, grid.getLabelSlot(true), STR_BAUDRATE, 0,COLOR_THEME_PRIMARY1);
new Choice(this, grid.getFieldSlot(1, 0), STR_CRSF_BAUDRATE, 0,CROSSFIRE_MAX_INTERNAL_BAUDRATE,
[=]() -> int {
return CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[moduleIdx].crsf.telemetryBaudrate);
},
[=](int newValue) {
g_model.moduleData[moduleIdx].crsf.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(newValue);
SET_DIRTY();
restartExternalModule();
});
new StaticText(this, grid.getLabelSlot(true), STR_BAUDRATE, 0, COLOR_THEME_PRIMARY1);
new Choice(this, grid.getFieldSlot(1, 0), STR_CRSF_BAUDRATE, 0, CROSSFIRE_MAX_INTERNAL_BAUDRATE,
[=]() -> int {
return CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[moduleIdx].crsf.telemetryBaudrate);
},
[=](int newValue) {
g_model.moduleData[moduleIdx].crsf.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(newValue);
SET_DIRTY();
restartExternalModule();
});
}
if (isModuleCrossfire(moduleIdx)) {
grid.nextLine();
new StaticText(this, grid.getLabelSlot(true), STR_STATUS, 0,COLOR_THEME_PRIMARY1);
new DynamicText(this, grid.getFieldSlot(), [=] {
char msg[64] = "";
sprintf(msg,"%d Hz %d Err", 1000000 / getMixerSchedulerPeriod(), telemetryErrors);
return std::string(msg);
});
}
if (isModuleXJT(moduleIdx)) {
rfChoice = new Choice(
@@ -535,7 +535,7 @@ void menuRadioHardware(event_t event)
#if !defined(PCBX9D) && !defined(PCBX9DP) && !defined(PCBX9E)
case ITEM_RADIO_HARDWARE_INTERNAL_MODULE_BAUDRATE:
lcdDrawText(INDENT_WIDTH, y, STR_BAUDRATE);
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, INT_CROSSFIRE_BAUDRATE, attr|LEFT);
lcdDrawTextAtIndex(HW_SETTINGS_COLUMN2, y, STR_CRSF_BAUDRATE, g_eeGeneral.internalModuleBaudrate,attr | LEFT);
if (attr) {
g_eeGeneral.internalModuleBaudrate = CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event, CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.internalModuleBaudrate), 0, CROSSFIRE_MAX_INTERNAL_BAUDRATE));
if (checkIncDec_Ret) {
+1
View File
@@ -201,6 +201,7 @@ const char STR_BEEPCOUNTDOWN[] = TR_BEEPCOUNTDOWN;
const char STR_PERSISTENT[] = TR_PERSISTENT;
const char STR_BACKLIGHT_LABEL[] = TR_BACKLIGHT_LABEL;
const char STR_GHOST_MENU_LABEL[] = TR_GHOST_MENU_LABEL;
const char STR_STATUS[] = TR_STATUS;
const char STR_BLDELAY[] = TR_BLDELAY;
const char STR_RXCHANNELORD[] = TR_RXCHANNELORD;
const char STR_STICKS[] = TR_STICKS;
+1
View File
@@ -323,6 +323,7 @@ extern const char STR_BEEPCOUNTDOWN[];
extern const char STR_PERSISTENT[];
extern const char STR_BACKLIGHT_LABEL[];
extern const char STR_GHOST_MENU_LABEL[];
extern const char STR_STATUS[];
extern const char STR_BLDELAY[];
#if defined(PWM_BACKLIGHT) || defined(COLORLCD)
+1
View File
@@ -474,6 +474,7 @@
#define TR_BACKLIGHT_LABEL "背光"
#define TR_BLDELAY INDENT "Duration"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLONBRIGHTNESS "背光开"
#define TR_BLOFFBRIGHTNESS "背光关"
#define TR_KEYS_BACKLIGHT "按键背光"
+1
View File
@@ -510,6 +510,7 @@
#define TR_PERSISTENT INDENT"Trvalé"
#define TR_BACKLIGHT_LABEL "Podsvětlení"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT"Zhasnout po"
#define TR_BLONBRIGHTNESS TR3(INDENT"Jas Zap.", INDENT"Jas Zap.", INDENT"Jas zapnutého LCD")
#define TR_BLOFFBRIGHTNESS TR3(INDENT"Jas Vyp.", INDENT"Jas Vyp.", INDENT"Jas vypnutého LCD")
+1
View File
@@ -513,6 +513,7 @@
#define TR_PERSISTENT TR(INDENT "Permanent", INDENT "Permanent")
#define TR_BACKLIGHT_LABEL "LCD-Beleuchtung"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Dauer"
#define TR_BLONBRIGHTNESS INDENT "An-Helligkeit"
#define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit"
+1
View File
@@ -511,6 +511,7 @@
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistent")
#define TR_BACKLIGHT_LABEL "Backlight"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Duration"
#define TR_BLONBRIGHTNESS INDENT "ON brightness"
#define TR_BLOFFBRIGHTNESS INDENT "OFF brightness"
+1
View File
@@ -510,6 +510,7 @@
#define TR_PERSISTENT TR(INDENT"Persisten.", INDENT"Persistente")
#define TR_BACKLIGHT_LABEL "Luz fondo"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT"Duración"
#define TR_BLONBRIGHTNESS INDENT"MAS brillo"
#define TR_BLOFFBRIGHTNESS INDENT"MENOS brillo"
+1
View File
@@ -524,6 +524,7 @@
#define TR_PERSISTENT TR(INDENT"Persist.", INDENT"Persistent")
#define TR_BACKLIGHT_LABEL "Backlight"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT"Duration"
#define TR_BLONBRIGHTNESS INDENT"ON Brightness"
#define TR_BLOFFBRIGHTNESS INDENT"OFF Brightness"
+1
View File
@@ -531,6 +531,7 @@
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistant")
#define TR_BACKLIGHT_LABEL "Rétroéclairage"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Durée"
#define TR_BLONBRIGHTNESS INDENT "Luminosité ON"
#define TR_BLOFFBRIGHTNESS INDENT "Luminosité OFF"
+1
View File
@@ -535,6 +535,7 @@
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "Persistente")
#define TR_BACKLIGHT_LABEL TR("Retroillu.", "Retroilluminazione")
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Durata"
#define TR_BLONBRIGHTNESS TR(INDENT "Lumin. ON", INDENT "Luminosità ON")
#define TR_BLOFFBRIGHTNESS TR(INDENT "Lumin. OFF", INDENT "Luminosità OFF")
+1
View File
@@ -515,6 +515,7 @@
#define TR_PERSISTENT TR(INDENT "Vasth.", INDENT "Vasthouden")
#define TR_BACKLIGHT_LABEL "LCD-Verlichting"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Duur"
#define TR_BLONBRIGHTNESS INDENT "Aan-Helderheid"
#define TR_BLOFFBRIGHTNESS INDENT "Uit-Helderheid"
+1
View File
@@ -531,6 +531,7 @@
#define TR_PERSISTENT TR(INDENT "Dokł.", INDENT "Dokładny")
#define TR_BACKLIGHT_LABEL "Podświetl"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT"Czas trwania"
#define TR_BLONBRIGHTNESS INDENT"Jasnośc wł."
#define TR_BLOFFBRIGHTNESS INDENT"Jasność wył."
+1
View File
@@ -535,6 +535,7 @@
#define TR_PERSISTENT INDENT "Persist."
#define TR_BACKLIGHT_LABEL "Backlight"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Tempo Backlight"
#define TR_BLONBRIGHTNESS INDENT "ON Brightness"
#define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness"
+1
View File
@@ -538,6 +538,7 @@
#define TR_PERSISTENT TR("Jämt på ", INDENT"Alltid På")
#define TR_BACKLIGHT_LABEL "Belysning"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Av efter"
#define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka"
#define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka"
+1
View File
@@ -473,6 +473,7 @@
#define TR_PERSISTENT TR(INDENT "Persist.", INDENT "關機保持")
#define TR_BACKLIGHT_LABEL "背光"
#define TR_GHOST_MENU_LABEL "GHOST MENU"
#define TR_STATUS "Status"
#define TR_BLDELAY INDENT "Duration"
#define TR_BLONBRIGHTNESS "背光開"
#define TR_BLOFFBRIGHTNESS "背光關"