Ghost module handling

This commit is contained in:
3djc
2022-03-21 11:45:15 +01:00
committed by Raphael Coeffic
parent 97d3c68efc
commit 001144cd5c
7 changed files with 61 additions and 24 deletions
+2 -1
View File
@@ -530,7 +530,8 @@ PACK(struct ModuleData {
} afhds3));
NOBACKUP(struct {
uint8_t raw12bits:1;
uint8_t spare1:7 SKIP;
uint8_t telemetryBaudrate:3;
uint8_t spare1:4 SKIP;
} ghost);
NOBACKUP(struct {
uint8_t telemetryBaudrate:3;
+28 -10
View File
@@ -136,7 +136,7 @@ enum MenuModelSetupItems {
#if defined(HARDWARE_EXTERNAL_MODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(CROSSFIRE)
#if defined(CROSSFIRE) || defined(GHOST)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE,
#endif
#if defined(MULTIMODULE)
@@ -194,7 +194,11 @@ 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))
#define IF_CRSF_MODULE(module, xxx) (isModuleCrossfire(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
#if defined(PXX2)
#define REGISTRATION_ID_ROWS uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW),
@@ -374,7 +378,7 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
#define EXTERNAL_MODULE_ROWS \
LABEL(ExternalModule), \
MODULE_TYPE_ROWS(EXTERNAL_MODULE), \
IF_CRSF_MODULE(EXTERNAL_MODULE, 0), /* Baudrate */ \
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), /* Baudrate */ \
MULTIMODULE_TYPE_ROWS(EXTERNAL_MODULE) /* PROTOCOL */ \
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) /* SUBTYPE */ \
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE) \
@@ -1056,18 +1060,32 @@ void menuModelSetup(event_t event)
}
break;
#if defined(CROSSFIRE)
#if defined(CROSSFIRE) || defined(GHOST)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE: {
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawText( INDENT_WIDTH, y, STR_BAUDRATE);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,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) {
restartExternalModule();
lcdDrawText(INDENT_WIDTH, y, STR_BAUDRATE);
if (isModuleCrossfire(EXTERNAL_MODULE)) {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,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) {
restartExternalModule();
}
}
}
break;
#if SPORT_MAX_BAUDRATE < 400000
else {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[EXTERNAL_MODULE].ghost.telemetryBaudrate)],attr | LEFT);
if (attr) {
moduleData.ghost.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event,CROSSFIRE_STORE_TO_INDEX(moduleData.ghost.telemetryBaudrate),0, 1));
if (checkIncDec_Ret) {
restartExternalModule();
}
}
}
break;
#endif
}
#endif
+27 -9
View File
@@ -106,7 +106,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(CROSSFIRE)
#if defined(CROSSFIRE) || defined(GHOST)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE,
#endif
#if defined (MULTIMODULE)
@@ -316,7 +316,11 @@ 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))
#define IF_CRSF_MODULE(module, xxx) (isModuleCrossfire(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
#if defined(PXX2)
#define REGISTRATION_ID_ROWS uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW),
@@ -411,7 +415,7 @@ void menuModelSetup(event_t event)
LABEL(ExternalModule),
EXTERNAL_MODULE_TYPE_ROW(),
IF_CRSF_MODULE(EXTERNAL_MODULE, 0), // Baudrate
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), // Baudrate
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE)
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
AFHDS3_MODE_ROWS(EXTERNAL_MODULE)
@@ -1021,18 +1025,32 @@ void menuModelSetup(event_t event)
}
break;
#if defined(CROSSFIRE)
#if defined(CROSSFIRE) || defined(GHOST)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE: {
ModuleData &moduleData = g_model.moduleData[EXTERNAL_MODULE];
lcdDrawText(INDENT_WIDTH, y, STR_BAUDRATE);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,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) {
restartExternalModule();
if (isModuleCrossfire(EXTERNAL_MODULE)) {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, EXT_CROSSFIRE_BAUDRATE,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) {
restartExternalModule();
}
}
}
break;
#if SPORT_MAX_BAUDRATE < 400000
else {
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[EXTERNAL_MODULE].ghost.telemetryBaudrate)],attr | LEFT);
if (attr) {
moduleData.ghost.telemetryBaudrate = CROSSFIRE_INDEX_TO_STORE(checkIncDecModel(event,CROSSFIRE_STORE_TO_INDEX(moduleData.ghost.telemetryBaudrate),0, 1));
if (checkIncDec_Ret) {
restartExternalModule();
}
}
}
break;
#endif
}
#endif
+1 -1
View File
@@ -267,7 +267,7 @@ void telemetryPortSetDirectionInput()
{
sportWaitTransmissionComplete();
#if defined(GHOST) && SPORT_MAX_BAUDRATE < 400000
if (isModuleGhost(EXTERNAL_MODULE) && g_eeGeneral.telemetryBaudrate == GHST_TELEMETRY_RATE_115K) {
if (isModuleGhost(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].crsf.telemetryBaudrate == GHST_TELEMETRY_RATE_115K) {
TELEMETRY_USART->BRR = BRR_115K;
}
#endif
@@ -229,7 +229,7 @@ void telemetryPortSetDirectionInput()
{
sportWaitTransmissionComplete();
#if defined(GHOST) && SPORT_MAX_BAUDRATE < 400000
if (isModuleGhost(EXTERNAL_MODULE) && g_eeGeneral.telemetryBaudrate == GHST_TELEMETRY_RATE_115K) {
if (isModuleGhost(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].crsf.telemetryBaudrate == GHST_TELEMETRY_RATE_115K) {
TELEMETRY_USART->BRR = BRR_115K;
}
#endif
+1 -1
View File
@@ -141,7 +141,7 @@ const uint8_t CROSSFIRE_FRAME_PERIODS[] = {
#define INT_CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.InternalModuleBaudrate)]
#define EXT_CROSSFIRE_BAUDRATE CROSSFIRE_BAUDRATES[CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[EXTERNAL_MODULE].crsf.telemetryBaudrate)]
#define CROSSFIRE_PERIOD (CROSSFIRE_FRAME_PERIODS[CROSSFIRE_STORE_TO_INDEX(g_eeGeneral.telemetryBaudrate)] * 1000)
#define CROSSFIRE_PERIOD (CROSSFIRE_FRAME_PERIODS[CROSSFIRE_STORE_TO_INDEX(g_model.moduleData[EXTERNAL_MODULE].crsf.telemetryBaudrate)] * 1000)
#define CROSSFIRE_TELEM_MIRROR_BAUDRATE 115200
+1 -1
View File
@@ -91,7 +91,7 @@ const GhostSensor ghostSensors[] = {
uint8_t getGhostModuleAddr() {
#if SPORT_MAX_BAUDRATE < 400000
return g_eeGeneral.telemetryBaudrate == GHST_TELEMETRY_RATE_400K ? GHST_ADDR_MODULE_SYM : GHST_ADDR_MODULE_ASYM;
return g_model.moduleData[EXTERNAL_MODULE].crsf.telemetryBaudrate == GHST_TELEMETRY_RATE_400K ? GHST_ADDR_MODULE_SYM : GHST_ADDR_MODULE_ASYM;
#else
return GHST_ADDR_MODULE_SYM;
#endif