Added YAML serialPort
TODO: - restrict serial modes for VCP - allow a function to be assigned only to one port
This commit is contained in:
@@ -59,7 +59,7 @@ const YamlLookupTable bluetoothModeLut = {
|
||||
{ GeneralSettings::BLUETOOTH_MODE_TRAINER, "TRAINER" },
|
||||
};
|
||||
|
||||
const YamlLookupTable uartModeLut = {
|
||||
const YamlLookupTable oldUartModeLut = {
|
||||
{ GeneralSettings::AUX_SERIAL_OFF, "MODE_NONE" },
|
||||
{ GeneralSettings::AUX_SERIAL_TELE_MIRROR, "MODE_TELEMETRY_MIRROR" },
|
||||
{ GeneralSettings::AUX_SERIAL_TELE_IN, "MODE_TELEMETRY" },
|
||||
@@ -67,6 +67,23 @@ const YamlLookupTable uartModeLut = {
|
||||
{ GeneralSettings::AUX_SERIAL_LUA, "MODE_LUA" },
|
||||
};
|
||||
|
||||
const YamlLookupTable serialPortLut = {
|
||||
{ GeneralSettings::SP_AUX1, "AUX1" },
|
||||
{ GeneralSettings::SP_AUX2, "AUX2" },
|
||||
{ GeneralSettings::SP_VCP, "VCP" },
|
||||
};
|
||||
|
||||
const YamlLookupTable uartModeLut = {
|
||||
{ GeneralSettings::AUX_SERIAL_OFF, "NONE" },
|
||||
{ GeneralSettings::AUX_SERIAL_TELE_MIRROR, "TELEMETRY_MIRROR" },
|
||||
{ GeneralSettings::AUX_SERIAL_TELE_IN, "TELEMETRY" },
|
||||
{ GeneralSettings::AUX_SERIAL_SBUS_TRAINER, "SBUS_TRAINER" },
|
||||
{ GeneralSettings::AUX_SERIAL_LUA, "LUA" },
|
||||
{ GeneralSettings::AUX_SERIAL_CLI, "CLI" },
|
||||
{ GeneralSettings::AUX_SERIAL_GPS, "GPS" },
|
||||
{ GeneralSettings::AUX_SERIAL_DEBUG, "DEBUG" },
|
||||
};
|
||||
|
||||
const YamlLookupTable antennaModeLut = {
|
||||
{ GeneralSettings::ANTENNA_MODE_INTERNAL, "MODE_INTERNAL" },
|
||||
{ GeneralSettings::ANTENNA_MODE_ASK, "MODE_ASK" },
|
||||
@@ -195,8 +212,17 @@ Node convert<GeneralSettings>::encode(const GeneralSettings& rhs)
|
||||
node["varioRange"] = rhs.varioRange * 15;
|
||||
node["varioRepeat"] = rhs.varioRepeat;
|
||||
node["backgroundVolume"] = rhs.backgroundVolume + 2;
|
||||
node["auxSerialMode"] = uartModeLut << rhs.auxSerialMode;
|
||||
node["aux2SerialMode"] = uartModeLut << rhs.aux2SerialMode;
|
||||
|
||||
Node serialPort;
|
||||
for (int i = 0; i < GeneralSettings::SP_COUNT; i++) {
|
||||
if (rhs.serialPort[i] != UART_MODE_NONE) {
|
||||
Node mode = uartModeLut << rhs.serialPort[i];
|
||||
serialPort[LookupValue(serialPortLut, i)]["mode"] = mode;
|
||||
}
|
||||
}
|
||||
if (serialPort && serialPort.IsMap())
|
||||
node["serialPort"] = serialPort;
|
||||
|
||||
node["antennaMode"] = antennaModeLut << rhs.antennaMode;
|
||||
node["backlightColor"] = rhs.backlightColor;
|
||||
node["pwrOnSpeed"] = rhs.pwrOnSpeed;
|
||||
@@ -372,8 +398,31 @@ bool convert<GeneralSettings>::decode(const Node& node, GeneralSettings& rhs)
|
||||
node["varioRange"] >> ifactor<int>(rhs.varioRange, 15);
|
||||
node["varioRepeat"] >> rhs.varioRepeat;
|
||||
node["backgroundVolume"] >> ioffset_int(rhs.backgroundVolume, 2);
|
||||
node["auxSerialMode"] >> uartModeLut >> rhs.auxSerialMode;
|
||||
node["aux2SerialMode"] >> uartModeLut >> rhs.aux2SerialMode;
|
||||
|
||||
if (node["auxSerialMode"]) {
|
||||
node["auxSerialMode"] >> oldUartModeLut >>
|
||||
rhs.serialPort[GeneralSettings::SP_AUX1];
|
||||
}
|
||||
|
||||
if (node["aux2SerialMode"]) {
|
||||
node["aux2SerialMode"] >> oldUartModeLut >>
|
||||
rhs.serialPort[GeneralSettings::SP_AUX2];
|
||||
}
|
||||
|
||||
if (node["serialPort"]) {
|
||||
Node serialPort = node["serialPort"];
|
||||
if (serialPort.IsMap()) {
|
||||
for (const auto& port : serialPort) {
|
||||
YAML::Node port_nr = port.first >> serialPortLut;
|
||||
if (port_nr) {
|
||||
int p = port_nr.as<int>();
|
||||
if (p >= 0 && p < GeneralSettings::SP_COUNT && port.second.IsMap())
|
||||
port.second["mode"] >> uartModeLut >> rhs.serialPort[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
node["antennaMode"] >> antennaModeLut >> rhs.antennaMode;
|
||||
node["backlightColor"] >> rhs.backlightColor;
|
||||
node["pwrOnSpeed"] >> rhs.pwrOnSpeed;
|
||||
|
||||
@@ -160,6 +160,7 @@ enum Capability {
|
||||
Sensors,
|
||||
HasAuxSerialMode,
|
||||
HasAux2SerialMode,
|
||||
HasVCPSerialMode,
|
||||
HasBluetooth,
|
||||
HasAntennaChoice,
|
||||
HasADCJitterFilter,
|
||||
|
||||
@@ -418,9 +418,12 @@ QString GeneralSettings::bluetoothModeToString() const
|
||||
return bluetoothModeToString(bluetoothMode);
|
||||
}
|
||||
|
||||
QString GeneralSettings::auxSerialModeToString() const
|
||||
QString GeneralSettings::serialPortModeToString(int port_nr) const
|
||||
{
|
||||
return auxSerialModeToString(auxSerialMode);
|
||||
if (port_nr < 0 || port_nr >= SP_COUNT)
|
||||
return QString();
|
||||
|
||||
return serialModeToString(serialPort[port_nr]);
|
||||
}
|
||||
|
||||
QString GeneralSettings::telemetryBaudrateToString() const
|
||||
@@ -467,7 +470,7 @@ QString GeneralSettings::bluetoothModeToString(int value)
|
||||
}
|
||||
|
||||
// static
|
||||
QString GeneralSettings::auxSerialModeToString(int value)
|
||||
QString GeneralSettings::serialModeToString(int value)
|
||||
{
|
||||
switch(value) {
|
||||
case AUX_SERIAL_OFF:
|
||||
@@ -480,6 +483,12 @@ QString GeneralSettings::auxSerialModeToString(int value)
|
||||
return tr("SBUS Trainer");
|
||||
case AUX_SERIAL_LUA:
|
||||
return tr("LUA");
|
||||
case AUX_SERIAL_CLI:
|
||||
return tr("CLI");
|
||||
case AUX_SERIAL_GPS:
|
||||
return tr("GPS");
|
||||
case AUX_SERIAL_DEBUG:
|
||||
return tr("Debug");
|
||||
default:
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
@@ -546,13 +555,14 @@ AbstractStaticItemModel * GeneralSettings::bluetoothModeItemModel()
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * GeneralSettings::auxSerialModeItemModel()
|
||||
AbstractStaticItemModel * GeneralSettings::serialModeItemModel(int port_nr)
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName(AIM_GS_AUXSERIALMODE);
|
||||
mdl->setName(QString(AIM_GS_SERIALMODE).arg(port_nr));
|
||||
|
||||
for (int i = 0; i < AUX_SERIAL_COUNT; i++) {
|
||||
mdl->appendToItemList(auxSerialModeToString(i), i);
|
||||
// TODO: check if supported on 'port_nr'
|
||||
mdl->appendToItemList(serialModeToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
|
||||
@@ -38,7 +38,7 @@ class AbstractStaticItemModel;
|
||||
// identiying names of static abstract item models
|
||||
constexpr char AIM_GS_ANTENNAMODE[] {"gs.antennamode"};
|
||||
constexpr char AIM_GS_BLUETOOTHMODE[] {"gs.bluetoothmode"};
|
||||
constexpr char AIM_GS_AUXSERIALMODE[] {"gs.auxserialmode"};
|
||||
constexpr char AIM_GS_SERIALMODE[] {"gs.serialmode%1"};
|
||||
constexpr char AIM_GS_TELEMETRYBAUDRATE[] {"gs.telemetrybaudrate"};
|
||||
constexpr char AIM_TRAINERMIX_MODE[] {"trainermix.mode"};
|
||||
constexpr char AIM_TRAINERMIX_SRC[] {"trainermix.src"};
|
||||
@@ -135,12 +135,22 @@ class GeneralSettings {
|
||||
AUX_SERIAL_TELE_IN,
|
||||
AUX_SERIAL_SBUS_TRAINER,
|
||||
AUX_SERIAL_LUA,
|
||||
AUX_SERIAL_CLI,
|
||||
AUX_SERIAL_GPS,
|
||||
AUX_SERIAL_DEBUG,
|
||||
AUX_SERIAL_COUNT
|
||||
};
|
||||
|
||||
enum TelemetryBaudrate {
|
||||
};
|
||||
|
||||
enum SerialPort {
|
||||
SP_AUX1,
|
||||
SP_AUX2,
|
||||
SP_VCP,
|
||||
SP_COUNT,
|
||||
};
|
||||
|
||||
GeneralSettings() { clear(); }
|
||||
void clear();
|
||||
void init();
|
||||
@@ -228,8 +238,7 @@ class GeneralSettings {
|
||||
int backgroundVolume;
|
||||
unsigned int mavbaud;
|
||||
unsigned int switchUnlockStates;
|
||||
unsigned int auxSerialMode;
|
||||
unsigned int aux2SerialMode;
|
||||
unsigned int serialPort[SP_COUNT];
|
||||
int antennaMode;
|
||||
unsigned int backlightColor;
|
||||
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
|
||||
@@ -257,17 +266,17 @@ class GeneralSettings {
|
||||
bool isSliderAvailable(int index) const;
|
||||
QString antennaModeToString() const;
|
||||
QString bluetoothModeToString() const;
|
||||
QString auxSerialModeToString() const;
|
||||
QString serialPortModeToString(int port_nr) const;
|
||||
QString telemetryBaudrateToString() const;
|
||||
|
||||
static QString antennaModeToString(int value);
|
||||
static QString bluetoothModeToString(int value);
|
||||
static QString auxSerialModeToString(int value);
|
||||
static QString serialModeToString(int value);
|
||||
static QString telemetryBaudrateToString(int value);
|
||||
static FieldRange getPPM_MultiplierRange();
|
||||
static FieldRange getTxCurrentCalibration();
|
||||
static AbstractStaticItemModel * antennaModeItemModel();
|
||||
static AbstractStaticItemModel * bluetoothModeItemModel();
|
||||
static AbstractStaticItemModel * auxSerialModeItemModel();
|
||||
static AbstractStaticItemModel * serialModeItemModel(int port_nr);
|
||||
static AbstractStaticItemModel * telemetryBaudrateItemModel();
|
||||
};
|
||||
|
||||
@@ -1624,18 +1624,23 @@ bool ModelData::isTrainerModeAvailable(const GeneralSettings & generalSettings,
|
||||
|
||||
if (!IS_FLYSKY_NV14(board) && value == TRAINER_MODE_OFF)
|
||||
ret = false;
|
||||
else if (!IS_TARANIS(board) || IS_ACCESS_RADIO(board, Firmware::getCurrentVariant()->getId())) {
|
||||
if (value >= TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE && value <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
|
||||
ret = false;
|
||||
}
|
||||
else if (generalSettings.auxSerialMode != UART_MODE_SBUS_TRAINER && value == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
|
||||
else if (!IS_TARANIS(board) ||
|
||||
IS_ACCESS_RADIO(board, Firmware::getCurrentVariant()->getId())) {
|
||||
if (value >= TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE &&
|
||||
value <= TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
|
||||
ret = false;
|
||||
} else if (generalSettings.serialPort[GeneralSettings::SP_AUX1] !=
|
||||
UART_MODE_SBUS_TRAINER &&
|
||||
value == TRAINER_MODE_MASTER_BATTERY_COMPARTMENT)
|
||||
ret = false;
|
||||
|
||||
if (generalSettings.bluetoothMode != GeneralSettings::BLUETOOTH_MODE_TRAINER && value >= TRAINER_MODE_MASTER_BLUETOOTH && value <= TRAINER_MODE_SLAVE_BLUETOOTH)
|
||||
ret = false;
|
||||
if (generalSettings.bluetoothMode !=
|
||||
GeneralSettings::BLUETOOTH_MODE_TRAINER &&
|
||||
value >= TRAINER_MODE_MASTER_BLUETOOTH &&
|
||||
value <= TRAINER_MODE_SLAVE_BLUETOOTH)
|
||||
ret = false;
|
||||
|
||||
if (!IS_RADIOMASTER_TX16S(board) && value == TRAINER_MODE_MULTI)
|
||||
ret = false;
|
||||
if (!IS_RADIOMASTER_TX16S(board) && value == TRAINER_MODE_MULTI) ret = false;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3141,9 +3141,9 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
|
||||
if (IS_STM32(board)) {
|
||||
if (version >= 218) {
|
||||
internalField.Append(new UnsignedField<4>(this, generalData.auxSerialMode));
|
||||
internalField.Append(new UnsignedField<4>(this, generalData.serialPort[GeneralSettings::SP_AUX1]));
|
||||
if (IS_FAMILY_HORUS_OR_T16(board) && version >= 219) {
|
||||
internalField.Append(new UnsignedField<4>(this, generalData.aux2SerialMode));
|
||||
internalField.Append(new UnsignedField<4>(this, generalData.serialPort[GeneralSettings::SP_AUX2]));
|
||||
}
|
||||
else {
|
||||
for (uint8_t i=0; i<SLIDERS_CONFIG_SIZE(board,version); i++) {
|
||||
@@ -3152,7 +3152,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
}
|
||||
}
|
||||
else {
|
||||
internalField.Append(new UnsignedField<6>(this, generalData.auxSerialMode));
|
||||
internalField.Append(new UnsignedField<6>(this, generalData.serialPort[GeneralSettings::SP_AUX1]));
|
||||
if (IS_TARANIS_X9E(board)) {
|
||||
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[2]));
|
||||
internalField.Append(new UnsignedField<1>(this, generalData.sliderConfig[3]));
|
||||
|
||||
@@ -744,9 +744,11 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||
else
|
||||
return 40;
|
||||
case HasAuxSerialMode:
|
||||
return (IS_FAMILY_HORUS_OR_T16(board) && !IS_TARANIS_SMALL(board)) ? true : false;
|
||||
return IS_FAMILY_HORUS_OR_T16(board) || (IS_TARANIS_X9(board) && !IS_TARANIS_X9DP_2019(board));
|
||||
case HasAux2SerialMode:
|
||||
return (IS_FAMILY_HORUS_OR_T16(board) && !IS_TARANIS_SMALL(board) && !IS_FLYSKY_NV14(board)) ? true : false;
|
||||
return IS_FAMILY_T16(board);
|
||||
case HasVCPSerialMode:
|
||||
return IS_FAMILY_HORUS_OR_T16(board) || IS_RADIOMASTER_ZORRO(board) || IS_JUMPER_TPRO(board);
|
||||
case HasBluetooth:
|
||||
return (IS_FAMILY_HORUS_OR_T16(board) || IS_TARANIS_X7(board) || IS_TARANIS_XLITE(board)|| IS_TARANIS_X9E(board) || IS_TARANIS_X9DP_2019(board) || IS_FLYSKY_NV14(board)) ? true : false;
|
||||
case HasAntennaChoice:
|
||||
|
||||
@@ -50,7 +50,8 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
|
||||
int antmodelid = editorItemModels->registerItemModel(GeneralSettings::antennaModeItemModel());
|
||||
int btmodelid = editorItemModels->registerItemModel(GeneralSettings::bluetoothModeItemModel());
|
||||
int auxmodelid = editorItemModels->registerItemModel(GeneralSettings::auxSerialModeItemModel());
|
||||
int auxmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_AUX1));
|
||||
int vcpmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_VCP));
|
||||
int baudmodelid = editorItemModels->registerItemModel(GeneralSettings::telemetryBaudrateItemModel());
|
||||
|
||||
id = editorItemModels->registerItemModel(ModuleData::internalModuleItemModel());
|
||||
@@ -156,7 +157,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
addLabel(tr("%1").arg(lbl), row, 0);
|
||||
AutoComboBox *serialPortMode = new AutoComboBox(this);
|
||||
serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid));
|
||||
serialPortMode->setField(generalSettings.auxSerialMode);
|
||||
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX1]);
|
||||
addParams(row, serialPortMode);
|
||||
}
|
||||
|
||||
@@ -165,10 +166,18 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
if (IS_RADIOMASTER_TX16S(board))
|
||||
lbl.append(" (TTL)");
|
||||
addLabel(tr("%1").arg(lbl), row, 0);
|
||||
AutoComboBox *serialPort2Mode = new AutoComboBox(this);
|
||||
serialPort2Mode->setModel(editorItemModels->getItemModel(auxmodelid));
|
||||
serialPort2Mode->setField(generalSettings.aux2SerialMode);
|
||||
addParams(row, serialPort2Mode);
|
||||
AutoComboBox *serialPortMode = new AutoComboBox(this);
|
||||
serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid));
|
||||
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX2]);
|
||||
addParams(row, serialPortMode);
|
||||
}
|
||||
|
||||
if (firmware->getCapability(HasVCPSerialMode)) {
|
||||
addLabel(tr("Serial Port VCP"), row, 0);
|
||||
AutoComboBox *serialPortMode = new AutoComboBox(this);
|
||||
serialPortMode->setModel(editorItemModels->getItemModel(vcpmodelid));
|
||||
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_VCP]);
|
||||
addParams(row, serialPortMode);
|
||||
}
|
||||
|
||||
if (firmware->getCapability(HasADCJitterFilter)) {
|
||||
|
||||
@@ -509,7 +509,9 @@ void TelemetryPanel::setup()
|
||||
ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
|
||||
ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
|
||||
if (IS_9XRPRO(firmware->getBoard()) ||
|
||||
(IS_TARANIS(firmware->getBoard()) && generalSettings.auxSerialMode == 2)) {
|
||||
(IS_TARANIS(firmware->getBoard()) &&
|
||||
generalSettings.serialPort[GeneralSettings::SP_AUX1] ==
|
||||
GeneralSettings::AUX_SERIAL_TELE_IN)) {
|
||||
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
|
||||
}
|
||||
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
|
||||
|
||||
Reference in New Issue
Block a user