Try to fix the trainer mode mess
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user