[Companion] It's now possible to create an empty Horus storage and simulate it (only the 1st model)

This commit is contained in:
Bertrand Songis
2016-11-27 14:47:01 +01:00
parent 8854cf9e87
commit ee1f6e5bdc
10 changed files with 141 additions and 73 deletions
+6 -6
View File
@@ -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})
+1
View File
@@ -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";
+1 -2
View File
@@ -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
+5 -5
View File
@@ -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)
{
}
+11 -7
View File
@@ -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
+38 -8
View File
@@ -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;
+73 -39
View File
@@ -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();
+1 -1
View File
@@ -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) {
+1 -1
View File
@@ -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);