Try to fix the trainer mode mess

This commit is contained in:
Raphael Coeffic
2022-03-20 16:30:59 +01:00
parent 34e9cbb245
commit de43d7e77c
6 changed files with 60 additions and 82 deletions
+4 -29
View File
@@ -177,7 +177,6 @@ enum BeeperMode {
e_mode_all
};
#if defined(PCBFRSKY) || defined(PCBNV14)
enum ModuleIndex {
INTERNAL_MODULE,
EXTERNAL_MODULE,
@@ -185,23 +184,19 @@ enum ModuleIndex {
};
enum TrainerMode {
#if defined(PCBNV14)
TRAINER_MODE_OFF,
#endif
TRAINER_MODE_MASTER_TRAINER_JACK,
TRAINER_MODE_SLAVE,
#if defined(PCBTARANIS) || defined(PCBNV14)
TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE,
TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE,
#endif
#if defined(PCBTARANIS) || defined(AUX_SERIAL) || defined(AUX2_SERIAL)
TRAINER_MODE_MASTER_BATTERY_COMPARTMENT,
#endif
TRAINER_MODE_MASTER_SERIAL,
TRAINER_MODE_MASTER_BLUETOOTH,
TRAINER_MODE_SLAVE_BLUETOOTH,
TRAINER_MODE_MULTI,
};
#endif
#define TRAINER_MODE_MIN() TRAINER_MODE_OFF
#define TRAINER_MODE_MAX() TRAINER_MODE_MULTI
enum SerialPort {
SP_AUX1=0,
@@ -216,26 +211,6 @@ enum SerialPort {
// GPS
#define PILOTPOS_MIN_HDOP 500
#define TRAINER_MODE_MIN() TRAINER_MODE_MASTER_TRAINER_JACK
#if !defined(HARDWARE_EXTERNAL_MODULE)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE
#elif defined(RADIO_T16) && !defined(INTERNAL_MODULE_MULTI)
#if defined(BLUETOOTH)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH
#else
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE
#endif
#elif defined(INTERNAL_MODULE_MULTI) || defined(ALLOW_TRAINER_MULTI)
#define TRAINER_MODE_MAX() TRAINER_MODE_MULTI
#elif defined(BLUETOOTH)
#define TRAINER_MODE_MAX() TRAINER_MODE_SLAVE_BLUETOOTH
#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBNV14)
#define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE
#else
#define TRAINER_MODE_MAX() TRAINER_MODE_MASTER_BATTERY_COMPARTMENT
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
#define IS_INTERNAL_MODULE_ENABLED() (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_NONE)
#else
+19 -24
View File
@@ -781,50 +781,45 @@ bool isTelemetryProtocolAvailable(int protocol)
bool isTrainerModeAvailable(int mode)
{
#if defined(PCBTARANIS)
if (IS_EXTERNAL_MODULE_ENABLED() && (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
return false;
#endif
#if defined(PCBX9E)
if (g_eeGeneral.bluetoothMode && mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) {
if (g_eeGeneral.bluetoothMode &&
mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE) {
// bluetooth uses the same USART than SBUS
return false;
}
#endif
#if defined(PCBTARANIS) || defined(AUX_SERIAL) || defined(AUX2_SERIAL)
if (mode == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT) {
#if defined(TRAINER_BATTERY_COMPARTMENT)
if (mode == TRAINER_MODE_MASTER_SERIAL)
return hasSerialMode(UART_MODE_SBUS_TRAINER) >= 0;
#else
return false;
#endif
}
#endif
if ((mode == TRAINER_MODE_MASTER_BLUETOOTH ||
mode == TRAINER_MODE_SLAVE_BLUETOOTH)
#if defined(BLUETOOTH) && !defined(PCBX9E)
if (g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER && (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH))
return false;
#else
if (mode == TRAINER_MODE_MASTER_BLUETOOTH || mode == TRAINER_MODE_SLAVE_BLUETOOTH)
return false;
&& g_eeGeneral.bluetoothMode != BLUETOOTH_TRAINER
#endif
)
return false;
#if defined(PCBXLITE) && !defined(PCBXLITES)
if (mode == TRAINER_MODE_MASTER_TRAINER_JACK || mode == TRAINER_MODE_SLAVE)
return false;
#endif
#if defined(PCBTARANIS) || defined(PCBNV14)
#if !defined(TRAINER_MODULE_CPPM)
#if !defined(TRAINER_MODULE_CPPM)
if (mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE)
return false;
#endif
#if !defined(TRAINER_MODULE_SBUS)
#endif
#if !defined(TRAINER_MODULE_SBUS)
if (mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE)
return false;
#endif
#endif
#if defined(TRAINER_MODULE_CPPM) || defined(TRAINER_MODULE_SBUS)
if (IS_EXTERNAL_MODULE_ENABLED() &&
(mode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE ||
mode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE))
return false;
#endif
return true;
@@ -711,7 +711,6 @@ bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opa
return wf(opaque, s, strlen(s));
}
extern const struct YamlIdStr enum_TrainerMode[];
const struct YamlIdStr enum_TrainerMode[] = {
#if defined(PCBNV14)
{ TRAINER_MODE_OFF, "OFF" },
@@ -733,8 +732,8 @@ const struct YamlIdStr enum_TrainerMode[] = {
#define r_trainerMode nullptr
bool w_trainerMode(const YamlNode* node, uint32_t val,
yaml_writer_func wf, void* opaque)
static bool w_trainerMode(const YamlNode* node, uint32_t val,
yaml_writer_func wf, void* opaque)
{
const char* str = nullptr;
str = yaml_output_enum(val, enum_TrainerMode);
@@ -58,10 +58,6 @@ namespace yaml_conv_220 {
bool w_spPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque);
bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque);
extern const struct YamlIdStr enum_TrainerMode[];
bool w_trainerMode(const YamlNode* node, uint32_t val,
yaml_writer_func wf, void* opaque);
extern const char* _tele_screen_type_lookup[];
bool w_tele_screen_type(void* user, uint8_t* data, uint32_t bitoffs,
yaml_writer_func wf, void* opaque);
@@ -1030,15 +1026,36 @@ static bool w_vPitch(const YamlNode* node, uint32_t val, yaml_writer_func wf, vo
return yaml_conv_220::w_vPitch(node, val, wf, opaque);
}
static const struct YamlIdStr enum_TrainerMode[] = {
{ TRAINER_MODE_OFF, "OFF" },
{ TRAINER_MODE_MASTER_TRAINER_JACK, "MASTER_TRAINER_JACK" },
{ TRAINER_MODE_SLAVE, "SLAVE" },
{ TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE, "MASTER_SBUS_EXT" },
{ TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, "MASTER_CPPM_EXT" },
{ TRAINER_MODE_MASTER_SERIAL, "MASTER_SERIAL" },
{ TRAINER_MODE_MASTER_SERIAL, "MASTER_BATT_COMP" },
{ TRAINER_MODE_MASTER_BLUETOOTH, "MASTER_BT" },
{ TRAINER_MODE_SLAVE_BLUETOOTH, "SLAVE_BT" },
{ TRAINER_MODE_MULTI, "MASTER_MULTI" },
{ 0, NULL }
};
static uint32_t r_trainerMode(const YamlNode* node, const char* val, uint8_t val_len)
{
return yaml_parse_enum(yaml_conv_220::enum_TrainerMode, val, val_len);
return yaml_parse_enum(enum_TrainerMode, val, val_len);
}
static bool w_trainerMode(const YamlNode* node, uint32_t val,
yaml_writer_func wf, void* opaque)
{
return yaml_conv_220::w_trainerMode(node, val, wf, opaque);
const char* str = nullptr;
str = yaml_output_enum(val, enum_TrainerMode);
if (str) {
return wf(opaque, str, strlen(str));
}
return true;
}
#if !defined(COLORLCD)
-4
View File
@@ -433,7 +433,6 @@
#if defined(RADIO_TX16S)
#define AUX_SERIAL_PWR_GPIO GPIOA
#define AUX_SERIAL_PWR_GPIO_PIN GPIO_Pin_15 // PA.15
#define TRAINER_BATTERY_COMPARTMENT // allows serial port TTL trainer
#endif
#else
#define AUX_SERIAL_RCC_AHB1Periph 0
@@ -481,9 +480,6 @@
#define AUX2_SERIAL_PWR_GPIO GPIOB
#define AUX2_SERIAL_PWR_GPIO_PIN GPIO_Pin_0 // PB.00
#endif
#if defined(RADIO_TX16S)
#define TRAINER_BATTERY_COMPARTMENT // allows serial port TTL trainer
#endif
#else // AUX2_SERIAL
#define AUX2_SERIAL_RCC_AHB1Periph 0
#define AUX2_SERIAL_RCC_APB1Periph 0
+12 -16
View File
@@ -61,6 +61,10 @@ void stopTrainer()
stop_trainer_ppm();
break;
case TRAINER_MODE_MASTER_SERIAL:
sbusSetGetByte(nullptr);
break;
#if defined(TRAINER_MODULE_CPPM)
case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE:
stop_trainer_module_cppm();
@@ -73,12 +77,6 @@ void stopTrainer()
stop_trainer_module_sbus();
break;
#endif
#if defined(TRAINER_BATTERY_COMPARTMENT)
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
sbusSetGetByte(nullptr);
break;
#endif
}
currentTrainerMode = 0xFF;
@@ -96,10 +94,18 @@ void checkTrainerSettings()
currentTrainerMode = requiredTrainerMode;
switch (requiredTrainerMode) {
case TRAINER_MODE_MASTER_TRAINER_JACK:
init_trainer_capture();
break;
case TRAINER_MODE_SLAVE:
init_trainer_ppm();
break;
case TRAINER_MODE_MASTER_SERIAL:
sbusSetGetByte(sbusAuxGetByte);
break;
#if defined(TRAINER_MODULE_CPPM)
case TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE:
init_trainer_module_cppm();
@@ -112,16 +118,6 @@ void checkTrainerSettings()
sbusSetGetByte(trainerModuleSbusGetByte);
break;
#endif
#if defined(TRAINER_BATTERY_COMPARTMENT)
case TRAINER_MODE_MASTER_BATTERY_COMPARTMENT:
sbusSetGetByte(sbusAuxGetByte);
break;
#endif
case TRAINER_MODE_MASTER_TRAINER_JACK:
init_trainer_capture();
break;
}
#if defined(INTMODULE_HEARTBEAT_GPIO) && !defined(SIMU)