diff --git a/companion/src/firmwares/er9x/er9xeeprom.cpp b/companion/src/firmwares/er9x/er9xeeprom.cpp index b78538f70..82655d1d3 100644 --- a/companion/src/firmwares/er9x/er9xeeprom.cpp +++ b/companion/src/firmwares/er9x/er9xeeprom.cpp @@ -59,7 +59,7 @@ t_Er9xTrainerMix::operator TrainerMix() t_Er9xTrainerData::t_Er9xTrainerData() { - memset(this, 0, sizeof(t_Er9xTrainerData)); + memset(reinterpret_cast(this), 0, sizeof(t_Er9xTrainerData)); } t_Er9xTrainerData::operator TrainerData () @@ -74,7 +74,7 @@ t_Er9xTrainerData::operator TrainerData () t_Er9xGeneral::t_Er9xGeneral() { - memset(this, 0, sizeof(t_Er9xGeneral)); + memset(reinterpret_cast(this), 0, sizeof(t_Er9xGeneral)); } Er9xGeneral::operator GeneralSettings () @@ -334,7 +334,7 @@ t_Er9xFrSkyChannelData::operator FrSkyChannelData () t_Er9xFrSkyData::t_Er9xFrSkyData() { - memset(this, 0, sizeof(t_Er9xFrSkyData)); + memset(reinterpret_cast(this), 0, sizeof(t_Er9xFrSkyData)); } t_Er9xFrSkyData::operator FrSkyData () diff --git a/companion/src/firmwares/er9x/er9xeeprom.h b/companion/src/firmwares/er9x/er9xeeprom.h index 2ad3917cb..558702ed3 100644 --- a/companion/src/firmwares/er9x/er9xeeprom.h +++ b/companion/src/firmwares/er9x/er9xeeprom.h @@ -259,7 +259,7 @@ PACK(typedef struct t_Er9xModelData { Er9xFlightModeData flightModeData[ER9X_MAX_MODES] ; operator ModelData(); - t_Er9xModelData() { memset(this, 0, sizeof(t_Er9xModelData)); } + t_Er9xModelData() { memset(reinterpret_cast(this), 0, sizeof(t_Er9xModelData)); } }) Er9xModelData; #endif // _ER9XEEPROM_H_ diff --git a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp index 647cdd8d0..f6e6752ff 100644 --- a/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp +++ b/companion/src/firmwares/ersky9x/ersky9xeeprom.cpp @@ -54,7 +54,7 @@ RawSwitch ersky9xToSwitch(int8_t sw) t_Ersky9xTrainerMix::t_Ersky9xTrainerMix() { - memset(this, 0, sizeof(t_Ersky9xTrainerMix)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xTrainerMix)); } t_Ersky9xTrainerMix::operator TrainerMix() @@ -69,7 +69,7 @@ t_Ersky9xTrainerMix::operator TrainerMix() t_Ersky9xTrainerData::t_Ersky9xTrainerData() { - memset(this, 0, sizeof(t_Ersky9xTrainerData)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xTrainerData)); } t_Ersky9xTrainerData::operator TrainerData () @@ -84,7 +84,7 @@ t_Ersky9xTrainerData::operator TrainerData () t_Ersky9xGeneral::t_Ersky9xGeneral() { - memset(this, 0, sizeof(t_Ersky9xGeneral)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xGeneral)); } Ersky9xGeneral::operator GeneralSettings () @@ -157,7 +157,7 @@ Ersky9xGeneral::operator GeneralSettings () t_Ersky9xLimitData::t_Ersky9xLimitData() { - memset(this, 0, sizeof(t_Ersky9xLimitData)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xLimitData)); } t_Ersky9xLimitData::operator LimitData () @@ -172,7 +172,7 @@ t_Ersky9xLimitData::operator LimitData () t_Ersky9xMixData_v10::t_Ersky9xMixData_v10() { - memset(this, 0, sizeof(t_Ersky9xMixData_v10)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xMixData_v10)); } t_Ersky9xMixData_v10::operator MixData () @@ -242,7 +242,7 @@ t_Ersky9xMixData_v10::operator MixData () t_Ersky9xMixData_v11::t_Ersky9xMixData_v11() { - memset(this, 0, sizeof(t_Ersky9xMixData_v11)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xMixData_v11)); } t_Ersky9xMixData_v11::operator MixData () @@ -416,17 +416,17 @@ Ersky9xLogicalSwitchData_v11::operator LogicalSwitchData () t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10() { - memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xSafetySwData_v10)); } t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11() { - memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xSafetySwData_v11)); } t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10() { - memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xFrSkyChannelData_v10)); } t_Ersky9xFrSkyChannelData_v10::operator FrSkyChannelData () @@ -450,7 +450,7 @@ t_Ersky9xFrSkyChannelData_v10::operator FrSkyChannelData () t_Ersky9xFrSkyChannelData_v11::t_Ersky9xFrSkyChannelData_v11() { - memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v11)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xFrSkyChannelData_v11)); } t_Ersky9xFrSkyChannelData_v11::operator FrSkyChannelData () @@ -474,7 +474,7 @@ t_Ersky9xFrSkyChannelData_v11::operator FrSkyChannelData () t_Ersky9xFrSkyData_v10::t_Ersky9xFrSkyData_v10() { - memset(this, 0, sizeof(t_Ersky9xFrSkyData_v10)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xFrSkyData_v10)); } t_Ersky9xFrSkyData_v10::operator FrSkyData () @@ -487,7 +487,7 @@ t_Ersky9xFrSkyData_v10::operator FrSkyData () t_Ersky9xFrSkyData_v11::t_Ersky9xFrSkyData_v11() { - memset(this, 0, sizeof(t_Ersky9xFrSkyData_v11)); + memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xFrSkyData_v11)); } t_Ersky9xFrSkyData_v11::operator FrSkyData () diff --git a/companion/src/firmwares/ersky9x/ersky9xeeprom.h b/companion/src/firmwares/ersky9x/ersky9xeeprom.h index d96dca944..e7d2ed1f8 100644 --- a/companion/src/firmwares/ersky9x/ersky9xeeprom.h +++ b/companion/src/firmwares/ersky9x/ersky9xeeprom.h @@ -129,7 +129,7 @@ PACK(typedef struct t_Ersky9xExpoData { int8_t drSw1; int8_t drSw2; - t_Ersky9xExpoData() { memset(this, 0, sizeof(t_Ersky9xExpoData)); } + t_Ersky9xExpoData() { memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xExpoData)); } }) Ersky9xExpoData; @@ -196,7 +196,7 @@ PACK(typedef struct t_Ersky9xLogicalSwitchData_v10 { // Custom Switches data uint8_t func; operator LogicalSwitchData(); - t_Ersky9xLogicalSwitchData_v10() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v10)); } + t_Ersky9xLogicalSwitchData_v10() { memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xLogicalSwitchData_v10)); } }) Ersky9xLogicalSwitchData_v10; PACK(typedef struct t_Ersky9xLogicalSwitchData_v11 { // Custom Switches data @@ -207,7 +207,7 @@ PACK(typedef struct t_Ersky9xLogicalSwitchData_v11 { // Custom Switches data uint8_t res ; operator LogicalSwitchData(); - t_Ersky9xLogicalSwitchData_v11() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v11)); } + t_Ersky9xLogicalSwitchData_v11() { memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xLogicalSwitchData_v11)); } }) Ersky9xLogicalSwitchData_v11; PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data @@ -372,7 +372,7 @@ PACK(typedef struct t_Ersky9xModelData_v10 { Ersky9xFrSkyData_v10 frsky; Ersky9xTimerMode_v10 timer[2] ; operator ModelData(); - t_Ersky9xModelData_v10() { memset(this, 0, sizeof(t_Ersky9xModelData_v10)); } + t_Ersky9xModelData_v10() { memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xModelData_v10)); } }) Ersky9xModelData_v10; PACK(typedef struct t_Ersky9xModelData_v11 { @@ -430,7 +430,7 @@ PACK(typedef struct t_Ersky9xModelData_v11 { Ersky9xGvarData gvars[ERSKY9X_MAX_GVARS] ; operator ModelData(); - t_Ersky9xModelData_v11() { memset(this, 0, sizeof(t_Ersky9xModelData_v11)); } + t_Ersky9xModelData_v11() { memset(reinterpret_cast(this), 0, sizeof(t_Ersky9xModelData_v11)); } }) Ersky9xModelData_v11; #endif // _ERSKY9XEEPROM_H_ diff --git a/companion/src/firmwares/generalsettings.cpp b/companion/src/firmwares/generalsettings.cpp index 46e117c36..c9c1907be 100644 --- a/companion/src/firmwares/generalsettings.cpp +++ b/companion/src/firmwares/generalsettings.cpp @@ -65,7 +65,7 @@ bool GeneralSettings::isSliderAvailable(int index) const GeneralSettings::GeneralSettings() { - memset(this, 0, sizeof(GeneralSettings)); + memset(reinterpret_cast(this), 0, sizeof(GeneralSettings)); contrast = 25; diff --git a/companion/src/flasheepromdialog.cpp b/companion/src/flasheepromdialog.cpp index ec2b70d67..6c210f940 100644 --- a/companion/src/flasheepromdialog.cpp +++ b/companion/src/flasheepromdialog.cpp @@ -29,10 +29,9 @@ #include "splashlibrarydialog.h" FlashEEpromDialog::FlashEEpromDialog(QWidget *parent, const QString &filename): -QDialog(parent), -ui(new Ui::FlashEEpromDialog), -eepromFilename(filename), -radioData(new RadioData()) + QDialog(parent), + ui(new Ui::FlashEEpromDialog), + eepromFilename(filename) { ui->setupUi(this); ui->profileLabel->setText(tr("Current profile: %1").arg(g.profile[g.id()].name())); @@ -42,7 +41,7 @@ radioData(new RadioData()) } QString backupPath = g.profile[g.id()].pBackupDir(); if (backupPath.isEmpty()) { - backupPath=g.backupDir(); + backupPath = g.backupDir(); ui->backupBeforeWrite->setChecked(g.enableBackup() || g.profile[g.id()].penableBackup()); } if (backupPath.isEmpty() || !QDir(backupPath).exists()) { @@ -123,7 +122,7 @@ int FlashEEpromDialog::getEEpromVersion(const QString & filename) return result; } -bool FlashEEpromDialog::patchCalibration() +bool FlashEEpromDialog::patchCalibration(RadioData * radioData) { QString calib = g.profile[g.id()].stickPotCalib(); QString trainercalib = g.profile[g.id()].trainerCalib(); @@ -168,7 +167,7 @@ bool FlashEEpromDialog::patchCalibration() } } -bool FlashEEpromDialog::patchHardwareSettings() +bool FlashEEpromDialog::patchHardwareSettings(RadioData * radioData) { QString DisplaySet = g.profile[g.id()].display(); QString BeeperSet = g.profile[g.id()].beeper(); @@ -215,32 +214,37 @@ bool FlashEEpromDialog::patchHardwareSettings() void FlashEEpromDialog::on_burnButton_clicked() { - // patch the eeprom if needed - bool patch = false; - if (ui->patchCalibration->isChecked()) { - patch |= patchCalibration(); - } - if (ui->patchHardwareSettings->isChecked()) { - patch |= patchHardwareSettings(); - } QString filename = eepromFilename; - if (patch) { - QString filename = generateProcessUniqueTempFileName("temp.bin"); - QFile file(filename); - uint8_t *eeprom = (uint8_t*)malloc(Boards::getEEpromSize(getCurrentBoard())); - int eeprom_size = getCurrentEEpromInterface()->save(eeprom, *radioData, 0, getCurrentFirmware()->getVariantNumber()); - if (eeprom_size == 0) { - return; + bool patch = false; + + if (ui->patchCalibration->isChecked() || ui->patchHardwareSettings->isChecked()) { + QSharedPointer radioData = QSharedPointer(new RadioData()); + Storage storage(eepromFilename); + if (storage.load(*radioData)) { + if (ui->patchCalibration->isChecked()) + patch |= patchCalibration(radioData.data()); + if (ui->patchHardwareSettings->isChecked()) + patch |= patchHardwareSettings(radioData.data()); } - if (!file.open(QIODevice::WriteOnly)) { - QMessageBox::warning(this, CPN_STR_TTL_ERROR, tr("Cannot write file %1:\n%2.").arg(filename).arg(file.errorString())); - return; - } - QTextStream outputStream(&file); - long result = file.write((char*)eeprom, eeprom_size); - if (result != eeprom_size) { - QMessageBox::warning(this, CPN_STR_TTL_ERROR, tr("Error writing file %1:\n%2.").arg(filename).arg(file.errorString())); - return; + + if (patch) { + filename = generateProcessUniqueTempFileName("patched.bin"); + QFile file(filename); + uint8_t *eeprom = (uint8_t*)malloc(Boards::getEEpromSize(getCurrentBoard())); + int eeprom_size = getCurrentEEpromInterface()->save(eeprom, *radioData, 0, getCurrentFirmware()->getVariantNumber()); + if (eeprom_size == 0) { + return; + } + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::warning(this, CPN_STR_TTL_ERROR, tr("Cannot write file %1:\n%2.").arg(filename).arg(file.errorString())); + return; + } + QTextStream outputStream(&file); + long result = file.write((char*)eeprom, eeprom_size); + if (result != eeprom_size) { + QMessageBox::warning(this, CPN_STR_TTL_ERROR, tr("Error writing file %1:\n%2.").arg(filename).arg(file.errorString())); + return; + } } } diff --git a/companion/src/flasheepromdialog.h b/companion/src/flasheepromdialog.h index e7973bce6..f962562cb 100644 --- a/companion/src/flasheepromdialog.h +++ b/companion/src/flasheepromdialog.h @@ -49,14 +49,13 @@ protected: void updateUI(); bool isValidEEprom(const QString &filename); int getEEpromVersion(const QString &filename); - bool patchCalibration(); - bool patchHardwareSettings(); + bool patchCalibration(RadioData * radioData); + bool patchHardwareSettings(RadioData * radioData); virtual void showEvent(QShowEvent *); private: Ui::FlashEEpromDialog *ui; QString eepromFilename; - RadioData *radioData; }; #endif // _FLASHEEPROMDIALOG_H_