From 7d0f5a9d9b5903f1bae5aa6f4cb4b38f34472d02 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sun, 31 Jan 2016 11:58:21 +0100 Subject: [PATCH] Store control types and names in profile (fix #3260) --- companion/src/appdata.cpp | 10 ++++ companion/src/appdata.h | 6 ++ companion/src/generaledit/generaledit.cpp | 67 ++++++++++++++++++++++- 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/companion/src/appdata.cpp b/companion/src/appdata.cpp index a464bf459..f26ec50ea 100644 --- a/companion/src/appdata.cpp +++ b/companion/src/appdata.cpp @@ -312,6 +312,8 @@ QString Profile::speaker() const { return _speaker; } QString Profile::stickPotCalib() const { return _stickPotCalib; } QString Profile::timeStamp() const { return _timeStamp; } QString Profile::trainerCalib() const { return _trainerCalib; } +QString Profile::controlTypes() const { return _controlTypes; } +QString Profile::controlNames() const { return _controlNames; } int Profile::txCurrentCalibration() const { return _txCurrentCalibration; } int Profile::gsStickMode() const { return _gsStickMode; } int Profile::ppmMultiplier() const { return _ppmMultiplier; } @@ -342,6 +344,8 @@ void Profile::speaker (const QString x) { store(x, _speaker, "Speake void Profile::stickPotCalib (const QString x) { store(x, _stickPotCalib, "StickPotCalib" ,"Profiles", QString("profile%1").arg(index));} void Profile::timeStamp (const QString x) { store(x, _timeStamp, "TimeStamp" ,"Profiles", QString("profile%1").arg(index));} void Profile::trainerCalib (const QString x) { store(x, _trainerCalib, "TrainerCalib" ,"Profiles", QString("profile%1").arg(index));} +void Profile::controlTypes (const QString x) { store(x, _controlTypes, "ControlTypes" ,"Profiles", QString("profile%1").arg(index));} +void Profile::controlNames (const QString x) { store(x, _controlNames, "ControlNames" ,"Profiles", QString("profile%1").arg(index));} void Profile::txCurrentCalibration (const int x) { store(x, _txCurrentCalibration, "currentCalib","Profiles", QString("profile%1").arg(index));} void Profile::gsStickMode (const int x) { store(x, _gsStickMode, "GSStickMode" ,"Profiles", QString("profile%1").arg(index));} void Profile::ppmMultiplier (const int x) { store(x, _ppmMultiplier, "PPM_Multiplier" ,"Profiles", QString("profile%1").arg(index));} @@ -378,6 +382,8 @@ Profile& Profile::operator=(const Profile& rhs) speaker ( rhs.speaker() ); stickPotCalib( rhs.stickPotCalib() ); trainerCalib ( rhs.trainerCalib() ); + controlTypes ( rhs.controlTypes() ); + controlNames ( rhs.controlNames() ); txCurrentCalibration ( rhs.txCurrentCalibration() ); gsStickMode ( rhs.gsStickMode() ); ppmMultiplier( rhs.ppmMultiplier() ); @@ -423,6 +429,8 @@ void Profile::initFwVariables() _stickPotCalib = ""; _timeStamp = ""; _trainerCalib = ""; + _controlTypes = ""; + _controlNames = ""; _txCurrentCalibration = 0; _gsStickMode = 0; @@ -483,6 +491,8 @@ void Profile::flush() getset( _stickPotCalib, "StickPotCalib" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _timeStamp, "TimeStamp" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _trainerCalib, "TrainerCalib" ,"" ,"Profiles", QString("profile%1").arg(index)); + getset( _controlTypes, "ControlTypes" ,"" ,"Profiles", QString("profile%1").arg(index)); + getset( _controlNames, "ControlNames" ,"" ,"Profiles", QString("profile%1").arg(index)); getset( _txCurrentCalibration, "currentCalib" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _gsStickMode, "GSStickMode" ,0 ,"Profiles", QString("profile%1").arg(index)); getset( _ppmMultiplier, "PPM_Multiplier" ,0 ,"Profiles", QString("profile%1").arg(index)); diff --git a/companion/src/appdata.h b/companion/src/appdata.h index c435ff769..78bbe0dff 100644 --- a/companion/src/appdata.h +++ b/companion/src/appdata.h @@ -125,6 +125,8 @@ class Profile: protected CompStoreObj QString _stickPotCalib; QString _timeStamp; QString _trainerCalib; + QString _controlTypes; + QString _controlNames; int _txCurrentCalibration; int _gsStickMode; int _ppmMultiplier; @@ -156,6 +158,8 @@ class Profile: protected CompStoreObj QString stickPotCalib() const; QString timeStamp() const; QString trainerCalib() const; + QString controlTypes() const; + QString controlNames() const; int txCurrentCalibration() const; int gsStickMode() const; int ppmMultiplier() const; @@ -186,6 +190,8 @@ class Profile: protected CompStoreObj void stickPotCalib (const QString); void timeStamp (const QString); void trainerCalib (const QString); + void controlTypes (const QString); + void controlNames (const QString); void txCurrentCalibration (const int); void gsStickMode (const int); void ppmMultiplier (const int); diff --git a/companion/src/generaledit/generaledit.cpp b/companion/src/generaledit/generaledit.cpp index 271693d14..e11a134d7 100644 --- a/companion/src/generaledit/generaledit.cpp +++ b/companion/src/generaledit/generaledit.cpp @@ -84,12 +84,15 @@ void GeneralEdit::on_calretrieve_PB_clicked() { int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt(); QString calib=g.profile[profile_id].stickPotCalib(); - int potsnum=GetCurrentFirmware()->getCapability(Pots); + int potsnum=GetCurrentFirmware()->getCapability(Pots)+GetCurrentFirmware()->getCapability(Sliders); + int numSwPots=GetCurrentFirmware()->getCapability(Switches)+GetCurrentFirmware()->getCapability(Pots)+GetCurrentFirmware()->getCapability(Sliders); if (calib.isEmpty()) { return; } else { QString trainercalib = g.profile[profile_id].trainerCalib(); + QString hwtypes = g.profile[profile_id].controlTypes(); + QString controlNames=g.profile[profile_id].controlNames(); int8_t txVoltageCalibration = (int8_t)g.profile[profile_id].txVoltageCalibration(); int8_t txCurrentCalibration = (int8_t)g.profile[profile_id].txCurrentCalibration(); int8_t PPM_Multiplier = (int8_t)g.profile[profile_id].ppmMultiplier(); @@ -136,6 +139,45 @@ void GeneralEdit::on_calretrieve_PB_clicked() } else { QMessageBox::critical(this, tr("Warning"), tr("Wrong data in profile, radio calibration was not retrieved")); } + if (hwtypes.length()==numSwPots) { + QString Byte; + int16_t byte16; + QByteArray qba; + int16_t offset; + bool ok; + for (int i=0; igetCapability(Switches)); i++) { + Byte=hwtypes.mid(i,1); + byte16=(int16_t)Byte.toInt(&ok,16); + qba=controlNames.mid(3*(i+NUM_STICKS),3).toAscii(); + if (ok) + generalSettings.switchConfig[i]=byte16; + strcpy(generalSettings.switchName[i], qba.data()); + } + offset = GetCurrentFirmware()->getCapability(Switches); + for (int i=0; i<(GetCurrentFirmware()->getCapability(Pots)); i++) { + Byte=hwtypes.mid(i+offset,1); + byte16=(int16_t)Byte.toInt(&ok,16); + qba=controlNames.mid(3*(i+NUM_STICKS+offset),3).toAscii(); + if (ok) + generalSettings.potConfig[i]=byte16; + strcpy(generalSettings.potName[i], qba.data()); + } + offset += GetCurrentFirmware()->getCapability(Pots); + for (int i=0; i<(GetCurrentFirmware()->getCapability(Sliders)); i++) { + Byte=hwtypes.mid(i+offset,1); + byte16=(int16_t)Byte.toInt(&ok,16); + qba=controlNames.mid(3*(i+NUM_STICKS+offset),3).toAscii(); + if (ok) + generalSettings.sliderConfig[i]=byte16; + strcpy(generalSettings.sliderName[i], qba.data()); + } + } else { + QMessageBox::critical(this, tr("Warning"), tr("Wrong data in profile, Switch/pot config not retrieved")); + } if ((DisplaySet.length()==6) && (BeeperSet.length()==4) && (HapticSet.length()==6) && (SpeakerSet.length()==6)) { generalSettings.stickMode=GSStickMode; uint8_t byte8u; @@ -200,13 +242,15 @@ void GeneralEdit::on_calstore_PB_clicked() int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt(); QString name=g.profile[profile_id].name(); - int potsnum=GetCurrentFirmware()->getCapability(Pots); + int potsnum=GetCurrentFirmware()->getCapability(Pots)+GetCurrentFirmware()->getCapability(Sliders); if (name.isEmpty()) { ui->calstore_PB->setDisabled(true); return; } else { QString calib=g.profile[profile_id].stickPotCalib(); + QString hwtypes=g.profile[profile_id].controlTypes(); + QString controlNames=g.profile[profile_id].controlNames(); if (!(calib.isEmpty())) { int ret = QMessageBox::question(this, "Companion", tr("Do you want to store calibration in %1 profile
overwriting existing calibration?").arg(name) , @@ -227,6 +271,25 @@ void GeneralEdit::on_calstore_PB_clicked() calib.append(QString("%1").arg((uint16_t)generalSettings.trainer.calib[i], 4, 16, QChar('0'))); } g.profile[profile_id].trainerCalib( calib ); + hwtypes.clear(); + controlNames.clear(); + for (int i=0; igetCapability(Switches)); i++) { + hwtypes.append(QString("%1").arg((uint16_t)generalSettings.switchConfig[i], 1)); + controlNames.append(QString("%1").arg(generalSettings.switchName[i], -3)); + } + for (int i=0; i<(GetCurrentFirmware()->getCapability(Pots)); i++) { + hwtypes.append(QString("%1").arg((uint16_t)generalSettings.potConfig[i], 1)); + controlNames.append(QString("%1").arg(generalSettings.potName[i], -3)); + } + for (int i=0; i<(GetCurrentFirmware()->getCapability(Sliders)); i++) { + hwtypes.append(QString("%1").arg((uint16_t)generalSettings.sliderConfig[i], 1)); + controlNames.append(QString("%1").arg(generalSettings.sliderName[i], -3)); + } + g.profile[profile_id].controlTypes( hwtypes ); + g.profile[profile_id].controlNames( controlNames ); g.profile[profile_id].txVoltageCalibration( generalSettings.txVoltageCalibration ); g.profile[profile_id].txCurrentCalibration( generalSettings.txCurrentCalibration ); g.profile[profile_id].vBatWarn( generalSettings.vBatWarn );