[Companion] It's now possible to create an empty Horus storage and simulate it (only the 1st model)
This commit is contained in:
@@ -22,17 +22,17 @@ if(ALLOW_NIGHTLY_BUILDS)
|
||||
add_definitions(-DALLOW_NIGHTLY_BUILDS)
|
||||
endif(ALLOW_NIGHTLY_BUILDS)
|
||||
|
||||
option(DEBUG_IMPORT "Turn on debug output for EEPROM import") # Disabled by default
|
||||
if(DEBUG_IMPORT)
|
||||
add_definitions(-DDEBUG_MODEL_IMPORT)
|
||||
message(STATUS "EEPROM import debugging enabled")
|
||||
endif(DEBUG_IMPORT)
|
||||
option(DEBUG_STORAGE_IMPORT "Turn on debug output for storage import") # Disabled by default
|
||||
if(DEBUG_STORAGE_IMPORT)
|
||||
add_definitions(-DDEBUG_STORAGE_IMPORT)
|
||||
message(STATUS "Storage import debugging enabled")
|
||||
endif()
|
||||
|
||||
option(TABLE_LAYOUT "Use QTableWidget for grid layouts") # Disabled by default
|
||||
if(TABLE_LAYOUT)
|
||||
add_definitions(-DTABLE_LAYOUT)
|
||||
message(STATUS "Using QTableWidget")
|
||||
endif(TABLE_LAYOUT)
|
||||
endif()
|
||||
|
||||
if(SDL_FOUND)
|
||||
include_directories(${SDL_INCLUDE_DIR})
|
||||
|
||||
@@ -57,6 +57,7 @@ enum BoardEnum {
|
||||
#define CPN_MAX_CYC 3
|
||||
#define CPN_MAX_SWITCHES 32
|
||||
#define CPN_MAX_KEYS 32
|
||||
#define CPN_MAX_MOUSE_ANALOGS 2
|
||||
|
||||
const char * const ARROW_LEFT = "\xE2\x86\x90";
|
||||
const char * const ARROW_UP = "\xE2\x86\x91";
|
||||
|
||||
@@ -23,9 +23,8 @@
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
// Controls the generation of debug output for EEPROM import
|
||||
#if defined(DEBUG_MODEL_IMPORT)
|
||||
#if defined(DEBUG_STORAGE_IMPORT)
|
||||
inline QDebug eepromImportDebug() { return QDebug(QtDebugMsg); }
|
||||
#else
|
||||
#undef eepromImportDebug
|
||||
|
||||
@@ -314,8 +314,8 @@ class SpareBitsField: public UnsignedField<N> {
|
||||
template<int N>
|
||||
class CharField: public DataField {
|
||||
public:
|
||||
CharField(char *field, bool truncate=true):
|
||||
DataField("Char"),
|
||||
CharField(char * field, bool truncate=true, const char * name="Char"):
|
||||
DataField(name),
|
||||
field(field),
|
||||
truncate(truncate)
|
||||
{
|
||||
@@ -365,8 +365,8 @@ char idx2char(int8_t idx);
|
||||
template<int N>
|
||||
class ZCharField: public DataField {
|
||||
public:
|
||||
ZCharField(char *field):
|
||||
DataField("ZChar"),
|
||||
ZCharField(char * field, const char * name = "ZChar"):
|
||||
DataField(name),
|
||||
field(field)
|
||||
{
|
||||
}
|
||||
@@ -418,7 +418,7 @@ class ZCharField: public DataField {
|
||||
|
||||
class StructField: public DataField {
|
||||
public:
|
||||
StructField(const char *name="Struct"):
|
||||
StructField(const char * name="Struct"):
|
||||
DataField(name)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -640,9 +640,10 @@ QString RawSwitch::toString() const
|
||||
return QString("!") + RawSwitch(type, -index).toString();
|
||||
}
|
||||
else {
|
||||
BoardEnum board = GetEepromInterface()->getBoard();
|
||||
switch(type) {
|
||||
case SWITCH_TYPE_SWITCH:
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
|
||||
if (IS_HORUS(board) || IS_TARANIS(board)) {
|
||||
div_t qr = div(index-1, 3);
|
||||
Firmware::Switch sw = GetCurrentFirmware()->getSwitch(qr.quot);
|
||||
const char * positions[] = { ARROW_UP, "-", ARROW_DOWN };
|
||||
@@ -1105,12 +1106,9 @@ GeneralSettings::GeneralSettings()
|
||||
templateSetup = g.profile[g.id()].channelOrder();
|
||||
stickMode = g.profile[g.id()].defaultMode();
|
||||
|
||||
QString t_calib=g.profile[g.id()].stickPotCalib();
|
||||
int potsnum=GetCurrentFirmware()->getCapability(Pots);
|
||||
if (t_calib.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
QString t_calib = g.profile[g.id()].stickPotCalib();
|
||||
int potsnum = GetCurrentFirmware()->getCapability(Pots);
|
||||
if (!t_calib.isEmpty()) {
|
||||
QString t_trainercalib=g.profile[g.id()].trainerCalib();
|
||||
int8_t t_txVoltageCalibration=(int8_t)g.profile[g.id()].txVoltageCalibration();
|
||||
int8_t t_txCurrentCalibration=(int8_t)g.profile[g.id()].txCurrentCalibration();
|
||||
@@ -1203,6 +1201,12 @@ GeneralSettings::GeneralSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
strcpy(themeName, "default");
|
||||
ThemeOptionData option1 = { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 };
|
||||
memcpy(&themeOptionValue[0], option1, sizeof(ThemeOptionData));
|
||||
ThemeOptionData option2 = { 0x03, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 };
|
||||
memcpy(&themeOptionValue[1], option2, sizeof(ThemeOptionData));
|
||||
}
|
||||
|
||||
int GeneralSettings::getDefaultStick(unsigned int channel) const
|
||||
|
||||
@@ -1035,6 +1035,33 @@ class SensorData {
|
||||
void clear() { memset(this, 0, sizeof(SensorData)); }
|
||||
};
|
||||
|
||||
/*
|
||||
* TODO ...
|
||||
*/
|
||||
#if 0
|
||||
class CustomScreenOptionData {
|
||||
public:
|
||||
|
||||
};
|
||||
|
||||
class CustomScreenZoneData {
|
||||
public:
|
||||
char widgetName[10+1];
|
||||
WidgetOptionData widgetOptions[5];
|
||||
};
|
||||
|
||||
class CustomScreenData {
|
||||
public:
|
||||
CustomScreenData();
|
||||
|
||||
char layoutName[10+1];
|
||||
CustomScreenZoneData zones[];
|
||||
CustomScreenOptionData options[];
|
||||
};
|
||||
#else
|
||||
typedef char CustomScreenData[610+1];
|
||||
#endif
|
||||
|
||||
class ModelData {
|
||||
public:
|
||||
ModelData();
|
||||
@@ -1101,7 +1128,9 @@ class ModelData {
|
||||
SensorData sensorData[CPN_MAX_SENSORS];
|
||||
|
||||
unsigned int toplcdTimer;
|
||||
|
||||
|
||||
CustomScreenData customScreenData[5];
|
||||
|
||||
void clear();
|
||||
bool isEmpty() const;
|
||||
void setDefaultInputs(const GeneralSettings & settings);
|
||||
@@ -1174,9 +1203,9 @@ class GeneralSettings {
|
||||
|
||||
unsigned int version;
|
||||
unsigned int variant;
|
||||
int calibMid[CPN_MAX_STICKS+CPN_MAX_POTS];
|
||||
int calibSpanNeg[CPN_MAX_STICKS+CPN_MAX_POTS];
|
||||
int calibSpanPos[CPN_MAX_STICKS+CPN_MAX_POTS];
|
||||
int calibMid[CPN_MAX_STICKS+CPN_MAX_POTS+CPN_MAX_MOUSE_ANALOGS];
|
||||
int calibSpanNeg[CPN_MAX_STICKS+CPN_MAX_POTS+CPN_MAX_MOUSE_ANALOGS];
|
||||
int calibSpanPos[CPN_MAX_STICKS+CPN_MAX_POTS+CPN_MAX_MOUSE_ANALOGS];
|
||||
unsigned int currModel; // 0..15
|
||||
unsigned int contrast;
|
||||
unsigned int vBatWarn;
|
||||
@@ -1228,6 +1257,7 @@ class GeneralSettings {
|
||||
unsigned int gpsFormat;
|
||||
int speakerVolume;
|
||||
unsigned int backlightBright;
|
||||
unsigned int backlightOffBright;
|
||||
int switchesDelay;
|
||||
int temperatureCalib;
|
||||
int temperatureWarn;
|
||||
@@ -1264,6 +1294,10 @@ class GeneralSettings {
|
||||
char sliderName[4][3+1];
|
||||
unsigned int sliderConfig[4];
|
||||
|
||||
char themeName[8+1];
|
||||
typedef uint8_t ThemeOptionData[8+1];
|
||||
ThemeOptionData themeOptionValue[5];
|
||||
|
||||
struct SwitchInfo {
|
||||
SwitchInfo(unsigned int index, unsigned int position):
|
||||
index(index),
|
||||
@@ -1416,10 +1450,6 @@ class EEPROMInterface
|
||||
|
||||
virtual unsigned long loadBackup(RadioData & radioData, const uint8_t * eeprom, int esize, int index) = 0;
|
||||
|
||||
virtual bool loadRadioSettings(GeneralSettings & model, const QByteArray & data) { return false; }
|
||||
|
||||
virtual bool loadModel(ModelData & model, const QByteArray & data) { return false; }
|
||||
|
||||
virtual unsigned long loadxml(RadioData & radioData, QDomDocument &doc) = 0;
|
||||
|
||||
virtual int save(uint8_t * eeprom, RadioData & radioData, uint8_t version=0, uint32_t variant=0) = 0;
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
#define HAS_PERSISTENT_TIMERS(board) (IS_ARM(board) || IS_2560(board))
|
||||
#define MAX_VIEWS(board) (HAS_LARGE_LCD(board) ? 2 : 256)
|
||||
#define MAX_POTS(board, version) (board == BOARD_X7D ? 2 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : (version >= 216 ? 3 : 2)) : 3))
|
||||
#define MAX_POTS(board, version) (IS_HORUS(board) ? 3 : (board == BOARD_X7D ? 2 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : (version >= 216 ? 3 : 2)) : 3)))
|
||||
#define MAX_SLIDERS(board) (IS_HORUS(board) ? 4 : (board == BOARD_X7D ? 0 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 4 : 2) : 0)))
|
||||
#define MAX_MOUSE_ANALOGS(board) (IS_HORUS(board) ? 2 : 0)
|
||||
#define MAX_SWITCHES(board, version) (IS_HORUS(board) ? 8 : (board == BOARD_X7D ? 6 : (IS_TARANIS(board) ? (IS_TARANIS_X9E(board) ? 18 : 8) : 7)))
|
||||
@@ -835,9 +835,9 @@ class FlightModeField: public TransformedField {
|
||||
}
|
||||
if (IS_ARM(board) && version >= 218) {
|
||||
if (HAS_LARGE_LCD(board))
|
||||
internalField.Append(new ZCharField<10>(phase.name));
|
||||
internalField.Append(new ZCharField<10>(phase.name, "Flight mode name"));
|
||||
else
|
||||
internalField.Append(new ZCharField<6>(phase.name));
|
||||
internalField.Append(new ZCharField<6>(phase.name, "Flight mode name"));
|
||||
internalField.Append(new SwitchField<9>(phase.swtch, board, version));
|
||||
internalField.Append(new SpareBitsField<7>());
|
||||
}
|
||||
@@ -2599,7 +2599,7 @@ class FrskyScreenField: public DataField {
|
||||
}
|
||||
|
||||
if (IS_TARANIS(board) && version >= 217) {
|
||||
script.Append(new CharField<8>(screen.body.script.filename));
|
||||
script.Append(new CharField<8>(screen.body.script.filename, true, "Script name"));
|
||||
script.Append(new SpareBitsField<16*8>());
|
||||
}
|
||||
|
||||
@@ -2912,6 +2912,23 @@ class MavlinkField: public StructField {
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* TODO
|
||||
*/
|
||||
#if 0
|
||||
class CustomScreenField: public StructField {
|
||||
public:
|
||||
CustomScreenField(CustomScreenData & customScreen):
|
||||
StructField("Custom Screen"),
|
||||
customScreen(customScreen)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
CustomScreenData & customScreen;
|
||||
};
|
||||
#endif
|
||||
|
||||
class SensorField: public TransformedField {
|
||||
public:
|
||||
SensorField(SensorData & sensor, BoardEnum board, unsigned int version):
|
||||
@@ -3016,11 +3033,11 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
eepromImportDebug() << QString("OpenTxModelData::OpenTxModelData(name: %1, board: %2, ver: %3, var: %4)").arg(name).arg(board).arg(version).arg(variant);
|
||||
|
||||
if (board == BOARD_HORUS)
|
||||
internalField.Append(new ZCharField<15>(modelData.name));
|
||||
internalField.Append(new ZCharField<15>(modelData.name, "Model name"));
|
||||
else if (HAS_LARGE_LCD(board))
|
||||
internalField.Append(new ZCharField<12>(modelData.name));
|
||||
internalField.Append(new ZCharField<12>(modelData.name, "Model name"));
|
||||
else
|
||||
internalField.Append(new ZCharField<10>(modelData.name));
|
||||
internalField.Append(new ZCharField<10>(modelData.name, "Model name"));
|
||||
|
||||
bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version);
|
||||
|
||||
@@ -3032,7 +3049,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
}
|
||||
|
||||
if (HAS_LARGE_LCD(board) && version >= 215) {
|
||||
internalField.Append(new CharField<10>(modelData.bitmap));
|
||||
internalField.Append(new CharField<10>(modelData.bitmap, true, "Model bitmap"));
|
||||
}
|
||||
|
||||
for (int i=0; i<MAX_TIMERS(board, version); i++) {
|
||||
@@ -3045,9 +3062,9 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
internalField.Append(new UnsignedField<2>(modelData.timers[i].persistent));
|
||||
internalField.Append(new SpareBitsField<3>());
|
||||
if (HAS_LARGE_LCD(board))
|
||||
internalField.Append(new ZCharField<8>(modelData.timers[i].name));
|
||||
internalField.Append(new ZCharField<8>(modelData.timers[i].name, "Timer name"));
|
||||
else
|
||||
internalField.Append(new ZCharField<3>(modelData.timers[i].name));
|
||||
internalField.Append(new ZCharField<3>(modelData.timers[i].name, "Timer name"));
|
||||
}
|
||||
else if (IS_ARM(board) && version >= 217) {
|
||||
internalField.Append(new SwitchField<8>(modelData.timers[i].mode, board, version, true));
|
||||
@@ -3058,9 +3075,9 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
internalField.Append(new UnsignedField<2>(modelData.timers[i].persistent));
|
||||
internalField.Append(new SpareBitsField<3>());
|
||||
if (IS_TARANIS(board))
|
||||
internalField.Append(new ZCharField<8>(modelData.timers[i].name));
|
||||
internalField.Append(new ZCharField<8>(modelData.timers[i].name, "Timer name"));
|
||||
else
|
||||
internalField.Append(new ZCharField<3>(modelData.timers[i].name));
|
||||
internalField.Append(new ZCharField<3>(modelData.timers[i].name, "Timer name"));
|
||||
}
|
||||
else if ((IS_ARM(board) || IS_2560(board)) && version >= 216) {
|
||||
internalField.Append(new SwitchField<8>(modelData.timers[i].mode, board, version, true));
|
||||
@@ -3187,7 +3204,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
|
||||
for (int i=0; i<MAX_GVARS(board, version); i++) {
|
||||
if (version >= 218) {
|
||||
internalField.Append(new ZCharField<3>(modelData.gvars_names[i]));
|
||||
internalField.Append(new ZCharField<3>(modelData.gvars_names[i], "GVar name"));
|
||||
internalField.Append(new SpareBitsField<12>()); // TODO min
|
||||
internalField.Append(new SpareBitsField<12>()); // TODO max
|
||||
internalField.Append(new BoolField<1>(modelData.gvars_popups[i]));
|
||||
@@ -3196,7 +3213,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
internalField.Append(new SpareBitsField<4>());
|
||||
}
|
||||
else {
|
||||
internalField.Append(new ZCharField<6>(modelData.gvars_names[i]));
|
||||
internalField.Append(new ZCharField<6>(modelData.gvars_names[i], "GVar name"));
|
||||
if (version >= 216) {
|
||||
internalField.Append(new BoolField<1>(modelData.gvars_popups[i]));
|
||||
internalField.Append(new SpareBitsField<7>());
|
||||
@@ -3219,7 +3236,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
}
|
||||
|
||||
if (IS_TARANIS(board) && version < 215) {
|
||||
internalField.Append(new CharField<10>(modelData.bitmap));
|
||||
internalField.Append(new CharField<10>(modelData.bitmap, true, "Model bitmap"));
|
||||
}
|
||||
|
||||
int modulesCount = 2;
|
||||
@@ -3286,7 +3303,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
|
||||
if (IS_TARANIS(board) && version < 218) {
|
||||
for (int i=0; i<MAX_CURVES(board, version); i++) {
|
||||
internalField.Append(new ZCharField<6>(modelData.curves[i].name));
|
||||
internalField.Append(new ZCharField<6>(modelData.curves[i].name, "Curve name"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3294,8 +3311,8 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
if (version >= 218) {
|
||||
for (int i=0; i<MAX_SCRIPTS(board); i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<6>(script.filename));
|
||||
internalField.Append(new ZCharField<6>(script.name));
|
||||
internalField.Append(new CharField<6>(script.filename, true, "Script filename"));
|
||||
internalField.Append(new ZCharField<6>(script.name, "Script name"));
|
||||
for (int j=0; j<6; j++) {
|
||||
internalField.Append(new SignedField<16>(script.inputs[j]));
|
||||
}
|
||||
@@ -3304,8 +3321,8 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
else if (version >= 217) {
|
||||
for (int i=0; i<7; i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<8>(script.filename));
|
||||
internalField.Append(new ZCharField<8>(script.name));
|
||||
internalField.Append(new CharField<8>(script.filename, true, "Script filename"));
|
||||
internalField.Append(new ZCharField<8>(script.name, "Script name"));
|
||||
for (int j=0; j<8; j++) {
|
||||
internalField.Append(new SignedField<8>(script.inputs[j]));
|
||||
}
|
||||
@@ -3314,8 +3331,8 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
else if (version >= 216) {
|
||||
for (int i=0; i<7; i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<10>(script.filename));
|
||||
internalField.Append(new ZCharField<10>(script.name));
|
||||
internalField.Append(new CharField<10>(script.filename, true, "Script filename"));
|
||||
internalField.Append(new ZCharField<10>(script.name, "Script name"));
|
||||
for (int j=0; j<10; j++) {
|
||||
internalField.Append(new SignedField<8>(script.inputs[j]));
|
||||
}
|
||||
@@ -3326,9 +3343,9 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
for (int i=0; i<32; i++) {
|
||||
if (HAS_LARGE_LCD(board))
|
||||
internalField.Append(new ZCharField<4>(modelData.inputNames[i]));
|
||||
internalField.Append(new ZCharField<4>(modelData.inputNames[i], "Input name"));
|
||||
else
|
||||
internalField.Append(new ZCharField<3>(modelData.inputNames[i]));
|
||||
internalField.Append(new ZCharField<3>(modelData.inputNames[i], "Input name"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3374,6 +3391,10 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
if (IS_TARANIS_X9E(board)) {
|
||||
internalField.Append(new UnsignedField<8>(modelData.toplcdTimer));
|
||||
}
|
||||
|
||||
for (int i=0; i<5; i++) {
|
||||
internalField.Append(new CharField<610>(modelData.customScreenData[i], true, "Custom screen blob"));
|
||||
}
|
||||
}
|
||||
|
||||
void OpenTxModelData::beforeExport()
|
||||
@@ -3504,7 +3525,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
}
|
||||
|
||||
internalField.Append(new UnsignedField<8>(generalData.view, 0, MAX_VIEWS(board)-1));
|
||||
|
||||
|
||||
internalField.Append(new SpareBitsField<2>()); // TODO buzzerMode?
|
||||
internalField.Append(new BoolField<1>(generalData.fai));
|
||||
internalField.Append(new SignedField<2>((int &)generalData.beeperMode));
|
||||
@@ -3577,7 +3598,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
internalField.Append(new SignedField<8>(generalData.vBatMin));
|
||||
internalField.Append(new SignedField<8>(generalData.vBatMax));
|
||||
}
|
||||
|
||||
|
||||
if (IS_ARM(board)) {
|
||||
internalField.Append(new UnsignedField<8>(generalData.backlightBright));
|
||||
if (version < 218) internalField.Append(new SignedField<8>(generalData.txCurrentCalibration));
|
||||
@@ -3604,7 +3625,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
}
|
||||
}
|
||||
if (version >= 215) {
|
||||
internalField.Append(new CharField<2>(generalData.ttsLanguage));
|
||||
internalField.Append(new CharField<2>(generalData.ttsLanguage, true, "TTS language"));
|
||||
if (version >= 218) {
|
||||
internalField.Append(new SignedField<4>(generalData.beepVolume));
|
||||
internalField.Append(new SignedField<4>(generalData.wavVolume));
|
||||
@@ -3628,6 +3649,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
internalField.Append(new ArmCustomFunctionField(generalData.customFn[i], board, version, variant));
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_STM32(board) && version >= 216) {
|
||||
if (version >= 218) {
|
||||
internalField.Append(new UnsignedField<4>(generalData.hw_uartMode));
|
||||
@@ -3674,19 +3696,19 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
|
||||
if (IS_HORUS(board)) {
|
||||
for (int i=0; i<MAX_SWITCHES(board, version); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.switchName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.switchName[i], "Switch name"));
|
||||
}
|
||||
for (int i=0; i<CPN_MAX_STICKS; ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.stickName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.stickName[i], "Stick name"));
|
||||
}
|
||||
for (int i=0; i<MAX_POTS(board, version); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.potName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.potName[i], "Pot name"));
|
||||
}
|
||||
for (int i=0; i<MAX_SLIDERS(board); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.sliderName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.sliderName[i], "Slider name"));
|
||||
}
|
||||
static char * modelName = "model1.bin\0 ";
|
||||
internalField.Append(new CharField<16>(modelName));
|
||||
static char modelName[17+1] = "model1.bin\0 ";
|
||||
internalField.Append(new CharField<17>(modelName, true, "Model name"));
|
||||
}
|
||||
else if (IS_TARANIS(board) && version >= 217) {
|
||||
for (int i=0; i<MAX_SWITCHES(board, version); i++) {
|
||||
@@ -3696,22 +3718,34 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
internalField.Append(new SpareBitsField<64-2*18>());
|
||||
}
|
||||
for (int i=0; i<MAX_SWITCHES(board, version); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.switchName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.switchName[i], "Switch name"));
|
||||
}
|
||||
for (int i=0; i<CPN_MAX_STICKS; ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.stickName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.stickName[i], "Stick name"));
|
||||
}
|
||||
for (int i=0; i<MAX_POTS(board, version); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.potName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.potName[i], "Pot name"));
|
||||
}
|
||||
for (int i=0; i<MAX_SLIDERS(board); ++i) {
|
||||
internalField.Append(new ZCharField<3>(generalData.sliderName[i]));
|
||||
internalField.Append(new ZCharField<3>(generalData.sliderName[i], "Slider name"));
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_TARANIS_X9E(board) && version >= 217) {
|
||||
if (IS_HORUS(board)) {
|
||||
internalField.Append(new BoolField<1>(generalData.bluetoothEnable));
|
||||
internalField.Append(new UnsignedField<7>(generalData.backlightOffBright));
|
||||
internalField.Append(new ZCharField<10>(generalData.bluetoothName, "Bluetooth name"));
|
||||
}
|
||||
else if (IS_TARANIS_X9E(board) && version >= 217) {
|
||||
internalField.Append(new BoolField<8>(generalData.bluetoothEnable));
|
||||
internalField.Append(new ZCharField<10>(generalData.bluetoothName));
|
||||
internalField.Append(new ZCharField<10>(generalData.bluetoothName, "Bluetooth name"));
|
||||
}
|
||||
|
||||
if (IS_HORUS(board)) {
|
||||
internalField.Append(new CharField<8>(generalData.themeName, true, "Theme name"));
|
||||
for (int i=0; i<5; i++) {
|
||||
internalField.Append(new CharField<8>((char *)generalData.themeOptionValue[i], true, "Theme blob"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ bool OpenTxEepromInterface::saveToByteArray(const T & src, QByteArray & data, ui
|
||||
{
|
||||
QByteArray raw;
|
||||
M manager((T&)src, board, version, 0);
|
||||
// manager.Dump();
|
||||
manager.Dump();
|
||||
manager.Export(raw);
|
||||
data.resize(8);
|
||||
*((uint32_t*)&data.data()[0]) = 0x3178396F;
|
||||
@@ -180,7 +180,7 @@ bool OpenTxEepromInterface::loadFromByteArray(T & dest, const QByteArray & data,
|
||||
{
|
||||
M manager(dest, board, version, variant);
|
||||
manager.Import(data);
|
||||
// manager.Dump(); // Dumps the structure so that it's easy to check with firmware datastructs.h
|
||||
manager.Dump(); // Dumps the structure so that it's easy to check with firmware datastructs.h
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ unsigned long OpenTxEepromInterface::loadxml(RadioData &radioData, QDomDocument
|
||||
return errors.to_ulong();
|
||||
}
|
||||
|
||||
int OpenTxEepromInterface::loadFile(RadioData &radioData, const QString & filename)
|
||||
int OpenTxEepromInterface::loadFile(RadioData & radioData, const QString & filename)
|
||||
{
|
||||
StorageSdcard storage;
|
||||
|
||||
@@ -234,7 +234,7 @@ int OpenTxEepromInterface::loadFile(RadioData &radioData, const QString & filena
|
||||
|
||||
// radio.bin
|
||||
qDebug() << "Radio settings:" << storage.radio.size();
|
||||
loadRadioSettings(radioData.generalSettings, storage.radio);
|
||||
loadFromByteArray<GeneralSettings, OpenTxGeneralData>(radioData.generalSettings, storage.radio);
|
||||
|
||||
// all models
|
||||
QList<QString> models = storage.getModelsFileNames();
|
||||
|
||||
@@ -85,7 +85,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model,
|
||||
|
||||
s1.report("get tracks");
|
||||
|
||||
if (IS_TARANIS(firmware->getBoard())) {
|
||||
if (IS_STM32(firmware->getBoard())) {
|
||||
scriptsSet = getFilesSet(g.profile[g.id()].sdPath() + "/SCRIPTS/FUNCTIONS", QStringList() << "*.lua", firmware->getCapability(VoicesMaxLength));
|
||||
for (int i=0; i<num_fsw; i++) {
|
||||
if (functions[i].func==FuncPlayScript) {
|
||||
|
||||
@@ -1100,7 +1100,7 @@ static inline void check_struct()
|
||||
CHKSIZE(CurveData, 4);
|
||||
CHKSIZE(RadioData, 847);
|
||||
CHKSIZE(ModelData, 9380);
|
||||
|
||||
CHKSIZE(CustomScreenData, 610);
|
||||
#elif defined(PCBSKY9X)
|
||||
CHKSIZE(MixData, 20);
|
||||
CHKSIZE(ExpoData, 17);
|
||||
|
||||
Reference in New Issue
Block a user