Companion: YAML and hardware panel
This commit is contained in:
@@ -111,31 +111,28 @@ const YamlLookupTable internalModuleLut = {
|
||||
{ MODULE_TYPE_FLYSKY, "TYPE_FLYSKY" },
|
||||
};
|
||||
|
||||
struct YamlTelemetryBaudrate {
|
||||
unsigned int value;
|
||||
|
||||
YamlTelemetryBaudrate() = default;
|
||||
|
||||
YamlTelemetryBaudrate(const unsigned int * telemetryBaudrate)
|
||||
{
|
||||
if (Boards::getCapability(getCurrentFirmware()->getBoard(), Board::SportMaxBaudRate) < 400000) {
|
||||
value = *telemetryBaudrate;
|
||||
}
|
||||
else {
|
||||
value = (*telemetryBaudrate + telemetryBaudratesList.size() - 1) % telemetryBaudratesList.size();
|
||||
}
|
||||
YamlTelemetryBaudrate::YamlTelemetryBaudrate(
|
||||
const unsigned int* moduleBaudrate)
|
||||
{
|
||||
if (Boards::getCapability(getCurrentFirmware()->getBoard(),
|
||||
Board::SportMaxBaudRate) < 400000) {
|
||||
value = *moduleBaudrate;
|
||||
} else {
|
||||
value = (*moduleBaudrate + moduleBaudratesList.size() - 1) %
|
||||
moduleBaudratesList.size();
|
||||
}
|
||||
}
|
||||
|
||||
void toCpn(unsigned int * telemetryBaudrate, unsigned int variant)
|
||||
{
|
||||
if (Boards::getCapability((Board::Type)variant, Board::SportMaxBaudRate) < 400000) {
|
||||
*telemetryBaudrate = value;
|
||||
}
|
||||
else {
|
||||
*telemetryBaudrate = (value + 1) % telemetryBaudratesList.size();
|
||||
}
|
||||
void YamlTelemetryBaudrate::toCpn(unsigned int* moduleBaudrate,
|
||||
unsigned int variant)
|
||||
{
|
||||
if (Boards::getCapability((Board::Type)variant, Board::SportMaxBaudRate) <
|
||||
400000) {
|
||||
*moduleBaudrate = value;
|
||||
} else {
|
||||
*moduleBaudrate = (value + 1) % moduleBaudratesList.size();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace YAML
|
||||
{
|
||||
@@ -179,8 +176,8 @@ Node convert<GeneralSettings>::encode(const GeneralSettings& rhs)
|
||||
node["adjustRTC"] = (int)rhs.adjustRTC;
|
||||
node["inactivityTimer"] = rhs.inactivityTimer;
|
||||
|
||||
YamlTelemetryBaudrate telemetryBaudrate(&rhs.telemetryBaudrate);
|
||||
node["telemetryBaudrate"] = telemetryBaudrate.value;
|
||||
YamlTelemetryBaudrate internalModuleBaudrate(&rhs.internalModuleBaudrate);
|
||||
node["internalModuleBaudrate"] = internalModuleBaudrate.value;
|
||||
|
||||
node["internalModule"] = LookupValue(internalModuleLut, rhs.internalModule);
|
||||
node["splashMode"] = rhs.splashMode; // TODO: B&W only
|
||||
@@ -358,9 +355,13 @@ bool convert<GeneralSettings>::decode(const Node& node, GeneralSettings& rhs)
|
||||
node["adjustRTC"] >> rhs.adjustRTC;
|
||||
node["inactivityTimer"] >> rhs.inactivityTimer;
|
||||
|
||||
YamlTelemetryBaudrate telemetryBaudrate;
|
||||
node["telemetryBaudrate"] >> telemetryBaudrate.value;
|
||||
telemetryBaudrate.toCpn(&rhs.telemetryBaudrate, rhs.variant);
|
||||
YamlTelemetryBaudrate internalModuleBaudrate;
|
||||
if (node["telemetryBaudrate"]) {
|
||||
node["telemetryBaudrate"] >> internalModuleBaudrate.value;
|
||||
} else {
|
||||
node["internalModuleBaudrate"] >> internalModuleBaudrate.value;
|
||||
}
|
||||
internalModuleBaudrate.toCpn(&rhs.internalModuleBaudrate, rhs.variant);
|
||||
|
||||
if (node["internalModule"]) {
|
||||
node["internalModule"] >> internalModuleLut >> rhs.internalModule;
|
||||
|
||||
@@ -21,6 +21,14 @@
|
||||
#include "yaml_ops.h"
|
||||
#include "generalsettings.h"
|
||||
|
||||
struct YamlTelemetryBaudrate {
|
||||
unsigned int value;
|
||||
|
||||
YamlTelemetryBaudrate() = default;
|
||||
YamlTelemetryBaudrate(const unsigned int* moduleBaudrate);
|
||||
void toCpn(unsigned int* moduleBaudrate, unsigned int variant);
|
||||
};
|
||||
|
||||
namespace YAML {
|
||||
|
||||
template<>
|
||||
@@ -30,5 +38,3 @@ namespace YAML {
|
||||
static bool decode(const Node& node, GeneralSettings& rhs);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "yaml_moduledata.h"
|
||||
#include "yaml_generalsettings.h"
|
||||
#include "moduledata.h"
|
||||
#include "rawsource.h"
|
||||
|
||||
@@ -296,8 +297,16 @@ Node convert<ModuleData>::encode(const ModuleData& rhs)
|
||||
case PULSES_GHOST: {
|
||||
Node ghost;
|
||||
ghost["raw12bits"] = (int)rhs.ghost.raw12bits;
|
||||
YamlTelemetryBaudrate br(&rhs.ghost.telemetryBaudrate);
|
||||
ghost["telemetryBaudrate"] = br.value;
|
||||
mod["ghost"] = ghost;
|
||||
} break;
|
||||
case PULSES_CROSSFIRE: {
|
||||
Node crsf;
|
||||
YamlTelemetryBaudrate br(&rhs.crsf.telemetryBaudrate);
|
||||
crsf["telemetryBaudrate"] = br.value;
|
||||
mod["crsf"] = crsf;
|
||||
} break;
|
||||
// TODO: afhds3, flysky
|
||||
default: {
|
||||
Node ppm;
|
||||
|
||||
@@ -426,9 +426,9 @@ QString GeneralSettings::serialPortModeToString(int port_nr) const
|
||||
return serialModeToString(serialPort[port_nr]);
|
||||
}
|
||||
|
||||
QString GeneralSettings::telemetryBaudrateToString() const
|
||||
QString GeneralSettings::internalModuleBaudrateToString() const
|
||||
{
|
||||
return telemetryBaudrateToString(telemetryBaudrate);
|
||||
return moduleBaudrateToString(internalModuleBaudrate);
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -495,9 +495,9 @@ QString GeneralSettings::serialModeToString(int value)
|
||||
}
|
||||
|
||||
// static
|
||||
QString GeneralSettings::telemetryBaudrateToString(int value)
|
||||
QString GeneralSettings::moduleBaudrateToString(int value)
|
||||
{
|
||||
return telemetryBaudratesList.value(value, CPN_STR_UNKNOWN_ITEM);
|
||||
return moduleBaudratesList.value(value, CPN_STR_UNKNOWN_ITEM);
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -576,13 +576,13 @@ AbstractStaticItemModel * GeneralSettings::serialModeItemModel(int port_nr)
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * GeneralSettings::telemetryBaudrateItemModel()
|
||||
AbstractStaticItemModel * GeneralSettings::internalModuleBaudrateItemModel()
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName(AIM_GS_TELEMETRYBAUDRATE);
|
||||
mdl->setName(AIM_GS_INTMODULEBAUDRATE);
|
||||
|
||||
for (int i = 0; i < telemetryBaudratesList.size(); i++) {
|
||||
mdl->appendToItemList(telemetryBaudrateToString(i), i);
|
||||
for (int i = 0; i < moduleBaudratesList.size(); i++) {
|
||||
mdl->appendToItemList(moduleBaudrateToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
|
||||
@@ -39,11 +39,12 @@ class AbstractStaticItemModel;
|
||||
constexpr char AIM_GS_ANTENNAMODE[] {"gs.antennamode"};
|
||||
constexpr char AIM_GS_BLUETOOTHMODE[] {"gs.bluetoothmode"};
|
||||
constexpr char AIM_GS_SERIALMODE[] {"gs.serialmode%1"};
|
||||
constexpr char AIM_GS_TELEMETRYBAUDRATE[] {"gs.telemetrybaudrate"};
|
||||
constexpr char AIM_GS_INTMODULEBAUDRATE[] {"gs.intmodulebaudrate"};
|
||||
constexpr char AIM_TRAINERMIX_MODE[] {"trainermix.mode"};
|
||||
constexpr char AIM_TRAINERMIX_SRC[] {"trainermix.src"};
|
||||
|
||||
static const QStringList telemetryBaudratesList({ "115K", "400K", "921K", "1.87M", "3.75M", "5.25M" });
|
||||
static const QStringList moduleBaudratesList({"115K", "400K", "921K", "1.87M",
|
||||
"3.75M", "5.25M"});
|
||||
|
||||
enum UartModes {
|
||||
UART_MODE_NONE,
|
||||
@@ -193,7 +194,7 @@ class GeneralSettings {
|
||||
bool adjustRTC;
|
||||
bool optrexDisplay;
|
||||
unsigned int inactivityTimer;
|
||||
unsigned int telemetryBaudrate;
|
||||
unsigned int internalModuleBaudrate;
|
||||
bool minuteBeep;
|
||||
bool preBeep;
|
||||
bool flashBeep;
|
||||
@@ -267,16 +268,16 @@ class GeneralSettings {
|
||||
QString antennaModeToString() const;
|
||||
QString bluetoothModeToString() const;
|
||||
QString serialPortModeToString(int port_nr) const;
|
||||
QString telemetryBaudrateToString() const;
|
||||
QString internalModuleBaudrateToString() const;
|
||||
|
||||
static QString antennaModeToString(int value);
|
||||
static QString bluetoothModeToString(int value);
|
||||
static QString serialModeToString(int value);
|
||||
static QString telemetryBaudrateToString(int value);
|
||||
static QString moduleBaudrateToString(int value);
|
||||
static FieldRange getPPM_MultiplierRange();
|
||||
static FieldRange getTxCurrentCalibration();
|
||||
static AbstractStaticItemModel * antennaModeItemModel();
|
||||
static AbstractStaticItemModel * bluetoothModeItemModel();
|
||||
static AbstractStaticItemModel * serialModeItemModel(int port_nr);
|
||||
static AbstractStaticItemModel * telemetryBaudrateItemModel();
|
||||
static AbstractStaticItemModel * internalModuleBaudrateItemModel();
|
||||
};
|
||||
|
||||
@@ -229,8 +229,13 @@ class ModuleData {
|
||||
|
||||
struct GHOST {
|
||||
bool raw12bits;
|
||||
unsigned int telemetryBaudrate;
|
||||
} ghost;
|
||||
|
||||
struct CRSF {
|
||||
unsigned int telemetryBaudrate;
|
||||
} crsf;
|
||||
|
||||
struct Access {
|
||||
unsigned int receivers;
|
||||
char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME+1];
|
||||
|
||||
@@ -3070,7 +3070,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
|
||||
}
|
||||
|
||||
internalField.Append(new UnsignedField<8>(this, generalData.inactivityTimer));
|
||||
internalField.Append(new UnsignedField<3>(this, generalData.telemetryBaudrate));
|
||||
internalField.Append(new UnsignedField<3>(this, generalData.internalModuleBaudrate));
|
||||
if (IS_FAMILY_HORUS_OR_T16(board))
|
||||
internalField.Append(new SpareBitsField<3>(this));
|
||||
else if (IS_TARANIS(board))
|
||||
@@ -3369,8 +3369,11 @@ void OpenTxGeneralData::beforeExport()
|
||||
|
||||
chkSum = sum;
|
||||
|
||||
if (Boards::getCapability((Board::Type)generalData.variant, Board::SportMaxBaudRate) >= 400000)
|
||||
generalData.telemetryBaudrate = (generalData.telemetryBaudrate + telemetryBaudratesList.size() - 1) % telemetryBaudratesList.size();
|
||||
if (Boards::getCapability((Board::Type)generalData.variant,
|
||||
Board::SportMaxBaudRate) >= 400000)
|
||||
generalData.internalModuleBaudrate =
|
||||
(generalData.internalModuleBaudrate + moduleBaudratesList.size() - 1) %
|
||||
moduleBaudratesList.size();
|
||||
}
|
||||
|
||||
void OpenTxGeneralData::afterImport()
|
||||
@@ -3382,7 +3385,8 @@ void OpenTxGeneralData::afterImport()
|
||||
}
|
||||
}
|
||||
|
||||
if (Boards::getCapability((Board::Type)generalData.variant, Board::SportMaxBaudRate) >= 400000)
|
||||
generalData.telemetryBaudrate = (generalData.telemetryBaudrate + 1) % telemetryBaudratesList.size();
|
||||
if (Boards::getCapability((Board::Type)generalData.variant,
|
||||
Board::SportMaxBaudRate) >= 400000)
|
||||
generalData.internalModuleBaudrate =
|
||||
(generalData.internalModuleBaudrate + 1) % moduleBaudratesList.size();
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
int btmodelid = editorItemModels->registerItemModel(GeneralSettings::bluetoothModeItemModel());
|
||||
int auxmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_AUX1));
|
||||
int vcpmodelid = editorItemModels->registerItemModel(GeneralSettings::serialModeItemModel(GeneralSettings::SP_VCP));
|
||||
int baudmodelid = editorItemModels->registerItemModel(GeneralSettings::telemetryBaudrateItemModel());
|
||||
int baudmodelid = editorItemModels->registerItemModel(GeneralSettings::internalModuleBaudrateItemModel());
|
||||
|
||||
id = editorItemModels->registerItemModel(ModuleData::internalModuleItemModel());
|
||||
tabFilteredModels->registerItemModel(new FilteredItemModel(editorItemModels->getItemModel(id)), FIM_INTERNALMODULES);
|
||||
@@ -182,16 +182,21 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||
internalModule = new AutoComboBox(this);
|
||||
internalModule->setModel(tabFilteredModels->getItemModel(FIM_INTERNALMODULES));
|
||||
internalModule->setField(generalSettings.internalModule, this);
|
||||
addParams(row, internalModule);
|
||||
connect(internalModule, &AutoComboBox::currentDataChanged, this, &HardwarePanel::on_internalModuleChanged);
|
||||
}
|
||||
|
||||
if (firmware->getCapability(HasTelemetryBaudrate)) {
|
||||
addLabel(tr("Maximum Baud"), row, 0);
|
||||
AutoComboBox *maxBaudRate = new AutoComboBox(this);
|
||||
maxBaudRate->setModel(editorItemModels->getItemModel(baudmodelid));
|
||||
maxBaudRate->setField(generalSettings.telemetryBaudrate, this);
|
||||
addParams(row, maxBaudRate);
|
||||
connect(internalModule, &AutoComboBox::currentDataChanged, this,
|
||||
&HardwarePanel::on_internalModuleChanged);
|
||||
|
||||
internalModuleBaudRate = new AutoComboBox(this);
|
||||
internalModuleBaudRate->setModel(editorItemModels->getItemModel(baudmodelid));
|
||||
internalModuleBaudRate->setField(generalSettings.internalModuleBaudrate, this);
|
||||
|
||||
if (m_internalModule != MODULE_TYPE_GHOST && m_internalModule != MODULE_TYPE_CROSSFIRE) {
|
||||
generalSettings.internalModuleBaudrate = 0;
|
||||
internalModuleBaudRate->setVisible(false);
|
||||
}
|
||||
|
||||
addParams(row, internalModule, internalModuleBaudRate);
|
||||
row++;
|
||||
}
|
||||
|
||||
// All values except 0 are mutually exclusive
|
||||
@@ -275,6 +280,13 @@ void HardwarePanel::on_internalModuleChanged()
|
||||
}
|
||||
else {
|
||||
m_internalModule = generalSettings.internalModule;
|
||||
if (m_internalModule == MODULE_TYPE_GHOST || m_internalModule == MODULE_TYPE_CROSSFIRE) {
|
||||
// TODO: set proper default baudrate
|
||||
internalModuleBaudRate->setVisible(true);
|
||||
} else {
|
||||
generalSettings.internalModuleBaudrate = 0;
|
||||
internalModuleBaudRate->setVisible(false);
|
||||
}
|
||||
emit internalModuleChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ class HardwarePanel : public GeneralPanel
|
||||
QGridLayout *grid;
|
||||
AutoComboBox *internalModule;
|
||||
unsigned int m_internalModule = 0;
|
||||
AutoComboBox *internalModuleBaudRate;
|
||||
|
||||
void addStick(int index, int & row);
|
||||
void addPot(int index, int & row);
|
||||
|
||||
Reference in New Issue
Block a user