Merge pull request #6567 from opentx/bsongis/issue_6564

Fix HW patch feature
This commit is contained in:
3djc
2019-07-13 12:56:33 +02:00
committed by GitHub
7 changed files with 59 additions and 56 deletions
+3 -3
View File
@@ -59,7 +59,7 @@ t_Er9xTrainerMix::operator TrainerMix()
t_Er9xTrainerData::t_Er9xTrainerData()
{
memset(this, 0, sizeof(t_Er9xTrainerData));
memset(reinterpret_cast<void *>(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<void *>(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<void *>(this), 0, sizeof(t_Er9xFrSkyData));
}
t_Er9xFrSkyData::operator FrSkyData ()
+1 -1
View File
@@ -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<void *>(this), 0, sizeof(t_Er9xModelData)); }
}) Er9xModelData;
#endif // _ER9XEEPROM_H_
@@ -54,7 +54,7 @@ RawSwitch ersky9xToSwitch(int8_t sw)
t_Ersky9xTrainerMix::t_Ersky9xTrainerMix()
{
memset(this, 0, sizeof(t_Ersky9xTrainerMix));
memset(reinterpret_cast<void *>(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<void *>(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<void *>(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<void *>(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<void *>(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<void *>(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<void *>(this), 0, sizeof(t_Ersky9xSafetySwData_v10));
}
t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11()
{
memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11));
memset(reinterpret_cast<void *>(this), 0, sizeof(t_Ersky9xSafetySwData_v11));
}
t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10()
{
memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10));
memset(reinterpret_cast<void *>(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<void *>(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<void *>(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<void *>(this), 0, sizeof(t_Ersky9xFrSkyData_v11));
}
t_Ersky9xFrSkyData_v11::operator FrSkyData ()
@@ -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<void *>(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<void *>(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<void *>(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<void *>(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<void *>(this), 0, sizeof(t_Ersky9xModelData_v11)); }
}) Ersky9xModelData_v11;
#endif // _ERSKY9XEEPROM_H_
+1 -1
View File
@@ -65,7 +65,7 @@ bool GeneralSettings::isSliderAvailable(int index) const
GeneralSettings::GeneralSettings()
{
memset(this, 0, sizeof(GeneralSettings));
memset(reinterpret_cast<void *>(this), 0, sizeof(GeneralSettings));
contrast = 25;
+35 -31
View File
@@ -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> radioData = QSharedPointer<RadioData>(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;
}
}
}
+2 -3
View File
@@ -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_