1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-25 09:15:38 +03:00

Conversion issues #4570 and #4264

This commit is contained in:
Bertrand Songis 2017-03-27 19:52:22 +02:00
parent f5ab145d2f
commit c9df941ee6
8 changed files with 136 additions and 35 deletions

View file

@ -30,10 +30,10 @@
#define CPN_MAX_CURVES 32
#define CPN_MAX_POINTS 17
#define CPN_MAX_GVARS 9
#define CPN_MAX_ENCODERS 2 // rotary encoders
#define CPN_MAX_CHNOUT 32 // number of real output channels
#define CPN_MAX_CSW 64 // number of custom switches
#define CPN_MAX_CUSTOM_FUNCTIONS 64 // number of functions assigned to switches
#define CPN_MAX_ENCODERS 2 // rotary encoders
#define CPN_MAX_CHNOUT 32 // number of real output channels
#define CPN_MAX_LOGICAL_SWITCHES 64 // number of custom switches
#define CPN_MAX_SPECIAL_FUNCTIONS 64 // number of functions assigned to switches
#define CPN_MAX_MODULES 2
#define CPN_MAX_STICKS Board::STICK_AXIS_COUNT
#define CPN_MAX_TRIMS Board::TRIM_AXIS_COUNT

View file

@ -1528,9 +1528,9 @@ void ModelData::clear()
limitData[i].clear();
for (int i=0; i<CPN_MAX_STICKS; i++)
expoData[i].clear();
for (int i=0; i<CPN_MAX_CSW; i++)
for (int i=0; i<CPN_MAX_LOGICAL_SWITCHES; i++)
logicalSw[i].clear();
for (int i=0; i<CPN_MAX_CUSTOM_FUNCTIONS; i++)
for (int i=0; i<CPN_MAX_SPECIAL_FUNCTIONS; i++)
customFn[i].clear();
for (int i=0; i<CPN_MAX_CURVES; i++)
curves[i].clear(5);

View file

@ -81,18 +81,18 @@ class CustomFunctionsPanel : public GenericPanel
QSet<QString> tracksSet;
QSet<QString> scriptsSet;
int mediaPlayerCurrent;
QComboBox * fswtchSwtch[CPN_MAX_CUSTOM_FUNCTIONS];
QComboBox * fswtchFunc[CPN_MAX_CUSTOM_FUNCTIONS];
QCheckBox * fswtchParamGV[CPN_MAX_CUSTOM_FUNCTIONS];
QDoubleSpinBox * fswtchParam[CPN_MAX_CUSTOM_FUNCTIONS];
QTimeEdit * fswtchParamTime[CPN_MAX_CUSTOM_FUNCTIONS];
QPushButton * playBT[CPN_MAX_CUSTOM_FUNCTIONS];
QComboBox * fswtchParamT[CPN_MAX_CUSTOM_FUNCTIONS];
QComboBox * fswtchParamArmT[CPN_MAX_CUSTOM_FUNCTIONS];
QCheckBox * fswtchEnable[CPN_MAX_CUSTOM_FUNCTIONS];
RepeatComboBox * fswtchRepeat[CPN_MAX_CUSTOM_FUNCTIONS];
QComboBox * fswtchGVmode[CPN_MAX_CUSTOM_FUNCTIONS];
QSlider * fswtchBLcolor[CPN_MAX_CUSTOM_FUNCTIONS];
QComboBox * fswtchSwtch[CPN_MAX_SPECIAL_FUNCTIONS];
QComboBox * fswtchFunc[CPN_MAX_SPECIAL_FUNCTIONS];
QCheckBox * fswtchParamGV[CPN_MAX_SPECIAL_FUNCTIONS];
QDoubleSpinBox * fswtchParam[CPN_MAX_SPECIAL_FUNCTIONS];
QTimeEdit * fswtchParamTime[CPN_MAX_SPECIAL_FUNCTIONS];
QPushButton * playBT[CPN_MAX_SPECIAL_FUNCTIONS];
QComboBox * fswtchParamT[CPN_MAX_SPECIAL_FUNCTIONS];
QComboBox * fswtchParamArmT[CPN_MAX_SPECIAL_FUNCTIONS];
QCheckBox * fswtchEnable[CPN_MAX_SPECIAL_FUNCTIONS];
RepeatComboBox * fswtchRepeat[CPN_MAX_SPECIAL_FUNCTIONS];
QComboBox * fswtchGVmode[CPN_MAX_SPECIAL_FUNCTIONS];
QSlider * fswtchBLcolor[CPN_MAX_SPECIAL_FUNCTIONS];
QMediaPlayer * mediaPlayer;
int selectedFunction;

View file

@ -48,16 +48,16 @@ class LogicalSwitchesPanel : public ModelPanel
void cswCut();
private:
QComboBox * csw[CPN_MAX_CSW];
QDoubleSpinBox * cswitchValue[CPN_MAX_CSW];
QDoubleSpinBox * cswitchOffset[CPN_MAX_CSW];
QDoubleSpinBox * cswitchOffset2[CPN_MAX_CSW];
QTimeEdit * cswitchTOffset[CPN_MAX_CSW];
QComboBox * cswitchAnd[CPN_MAX_CSW];
QDoubleSpinBox * cswitchDuration[CPN_MAX_CSW];
QDoubleSpinBox * cswitchDelay[CPN_MAX_CSW];
QComboBox * cswitchSource1[CPN_MAX_CSW];
QComboBox * cswitchSource2[CPN_MAX_CSW];
QComboBox * csw[CPN_MAX_LOGICAL_SWITCHES];
QDoubleSpinBox * cswitchValue[CPN_MAX_LOGICAL_SWITCHES];
QDoubleSpinBox * cswitchOffset[CPN_MAX_LOGICAL_SWITCHES];
QDoubleSpinBox * cswitchOffset2[CPN_MAX_LOGICAL_SWITCHES];
QTimeEdit * cswitchTOffset[CPN_MAX_LOGICAL_SWITCHES];
QComboBox * cswitchAnd[CPN_MAX_LOGICAL_SWITCHES];
QDoubleSpinBox * cswitchDuration[CPN_MAX_LOGICAL_SWITCHES];
QDoubleSpinBox * cswitchDelay[CPN_MAX_LOGICAL_SWITCHES];
QComboBox * cswitchSource1[CPN_MAX_LOGICAL_SWITCHES];
QComboBox * cswitchSource2[CPN_MAX_LOGICAL_SWITCHES];
QStandardItemModel * rawSwitchItemModel;
QStandardItemModel * rawSourceItemModel;
void setSwitchWidgetVisibility(int i);

View file

@ -23,7 +23,7 @@
// TODO here we will move a lot of functions from eeprominterface.cpp when no merge risk
void RawSource::convert(Board::Type before, Board::Type after)
RawSource RawSource::convert(Board::Type before, Board::Type after)
{
if (type == SOURCE_TYPE_STICK && index >= 4 + getBoardCapability(before, Board::Pots)) {
// 1st slider alignment
@ -57,11 +57,79 @@ void RawSource::convert(Board::Type before, Board::Type after)
}
}
}
return *this;
}
RawSwitch RawSwitch::convert(Board::Type before, Board::Type after)
{
// SWI to SWR don't exist on !X9E board
if (!IS_TARANIS_X9E(after) && IS_TARANIS_X9E(before)) {
if (type == SWITCH_TYPE_SWITCH && index >= 24) {
index = index % 24;
}
}
// No SE and SG on X7 board
if (IS_TARANIS_X7(after)) {
if (IS_TARANIS_X9(before) || IS_HORUS(before)) {
if (type == SWITCH_TYPE_SWITCH && index >= 18) {
index -= 6;
}
else if (type == SWITCH_TYPE_SWITCH && index >= 12) {
index -= 3;
}
}
}
return *this;
}
void ExpoData::convert(Board::Type before, Board::Type after)
{
swtch.convert(before, after);
}
void MixData::convert(Board::Type before, Board::Type after)
{
srcRaw.convert(before, after);
swtch.convert(before, after);
}
void LogicalSwitchData::convert(Board::Type before, Board::Type after)
{
CSFunctionFamily family = getFunctionFamily();
switch(family) {
case LS_FAMILY_VOFS:
val1 = RawSource(val1).convert(before, after).toValue();
break;
case LS_FAMILY_STICKY:
case LS_FAMILY_VBOOL:
val1 = RawSwitch(val1).convert(before, after).toValue();
val2 = RawSwitch(val2).convert(before, after).toValue();
break;
case LS_FAMILY_EDGE:
val1 = RawSwitch(val1).convert(before, after).toValue();
break;
case LS_FAMILY_VCOMP:
val1 = RawSource(val1).convert(before, after).toValue();
val2 = RawSource(val2).convert(before, after).toValue();
break;
default:
break;
}
andsw = RawSwitch(andsw).convert(before, after).toValue();
}
void CustomFunctionData::convert(Board::Type before, Board::Type after)
{
swtch.convert(before, after);
}
void FlightModeData::convert(Board::Type before, Board::Type after)
{
swtch.convert(before, after);
}
void ModelData::convert(Board::Type before, Board::Type after)
@ -70,11 +138,37 @@ void ModelData::convert(Board::Type before, Board::Type after)
for (int i=0; i<CPN_MAX_MIXERS; i++) {
mixData[i].convert(before, after);
}
for (int i=0; i<CPN_MAX_EXPOS; i++) {
expoData[i].convert(before, after);
}
for (int i=0; i<CPN_MAX_LOGICAL_SWITCHES; i++) {
logicalSw[i].convert(before, after);
}
for (int i=0; i<CPN_MAX_SPECIAL_FUNCTIONS; i++) {
customFn[i].convert(before, after);
}
for (int i=0; i<CPN_MAX_FLIGHT_MODES; i++) {
flightModeData[i].convert(before, after);
}
}
void GeneralSettings::convert(Board::Type before, Board::Type after)
{
// Here we can add explicit conversions when moving from one board to another
// No SE and SG on X7 board
if (IS_TARANIS_X7(after)) {
if (IS_TARANIS_X9(before) || IS_HORUS(before)) {
switchConfig[4] = switchConfig[5];
memcpy(switchName[4], switchName[5], sizeof(switchName[4]));
switchConfig[5] = switchConfig[7];
memcpy(switchName[5], switchName[7], sizeof(switchName[5]));
}
}
}
void RadioData::setCurrentModel(unsigned int index)

View file

@ -211,7 +211,7 @@ class RawSource {
{
}
void convert(Board::Type before, Board::Type after);
RawSource convert(Board::Type before, Board::Type after);
inline const int toValue() const
{
@ -287,6 +287,8 @@ class RawSwitch {
return (this->type != other.type) || (this->index != other.index);
}
RawSwitch convert(Board::Type before, Board::Type after);
RawSwitchType type;
int index;
};
@ -338,6 +340,7 @@ class ExpoData {
int carryTrim;
char name[10+1];
void clear() { memset(this, 0, sizeof(ExpoData)); }
void convert(Board::Type before, Board::Type after);
};
class CurvePoint {
@ -468,6 +471,7 @@ class LogicalSwitchData { // Logical Switches data
CSFunctionFamily getFunctionFamily() const;
unsigned int getRangeFlags() const;
QString funcToString() const;
void convert(Board::Type before, Board::Type after);
};
enum AssignFunc {
@ -536,6 +540,8 @@ class CustomFunctionData { // Function Switches data
static void populatePlaySoundParams(QStringList & qs);
static void populateHapticParams(QStringList & qs);
void convert(Board::Type before, Board::Type after);
};
class FlightModeData {
@ -551,6 +557,7 @@ class FlightModeData {
int rotaryEncoders[CPN_MAX_ENCODERS];
int gvars[CPN_MAX_GVARS];
void clear(const int phase);
void convert(Board::Type before, Board::Type after);
};
class SwashRingData { // Swash Ring data
@ -1033,8 +1040,8 @@ class ModelData {
ExpoData expoData[CPN_MAX_EXPOS];
CurveData curves[CPN_MAX_CURVES];
LogicalSwitchData logicalSw[CPN_MAX_CSW];
CustomFunctionData customFn[CPN_MAX_CUSTOM_FUNCTIONS];
LogicalSwitchData logicalSw[CPN_MAX_LOGICAL_SWITCHES];
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
SwashRingData swashRingData;
unsigned int thrTraceSrc;
uint64_t switchWarningStates;
@ -1200,7 +1207,7 @@ class GeneralSettings {
unsigned int switchUnlockStates;
unsigned int hw_uartMode;
unsigned int backlightColor;
CustomFunctionData customFn[CPN_MAX_CUSTOM_FUNCTIONS];
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
char switchName[CPN_MAX_SWITCHES][3+1];
unsigned int switchConfig[CPN_MAX_SWITCHES];
char stickName[CPN_MAX_STICKS][3+1];

View file

@ -321,7 +321,7 @@ void RadioOutputsWidget::setValues()
if (ui->logicalSwitchesWidget->isVisible()) {
QHash<int, QLabel* >::const_iterator ls;
for (ls = m_logicSwitchMap.constBegin(); ls != m_logicSwitchMap.constEnd(); ++ls) {
if (ls.key() >= CPN_MAX_CSW || (prevOutputs.vsw[ls.key()] == outputs.vsw[ls.key()] && m_lastFlightPhase > -1))
if (ls.key() >= CPN_MAX_LOGICAL_SWITCHES || (prevOutputs.vsw[ls.key()] == outputs.vsw[ls.key()] && m_lastFlightPhase > -1))
continue;
ls.value()->setBackgroundRole(outputs.vsw[ls.key()] ? QPalette::Dark : QPalette::Background);
ls.value()->setForegroundRole(outputs.vsw[ls.key()] ? QPalette::BrightText : QPalette::WindowText);

View file

@ -49,7 +49,7 @@ class TxOutputs
public:
TxOutputs() { memset(this, 0, sizeof(TxOutputs)); }
int chans[CPN_MAX_CHNOUT];
bool vsw[CPN_MAX_CSW];
bool vsw[CPN_MAX_LOGICAL_SWITCHES];
int gvars[CPN_MAX_FLIGHT_MODES][CPN_MAX_GVARS];
unsigned int beep;
// uint8_t phase;