mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
[Taranis] PPM Center will now have a bigger range [-500:+500]
This commit is contained in:
parent
b5c63e339f
commit
07fe45ec5f
6 changed files with 81 additions and 30 deletions
|
@ -1212,23 +1212,35 @@ class LimitField: public StructField {
|
||||||
LimitField(LimitData & limit, BoardEnum board, unsigned int version):
|
LimitField(LimitData & limit, BoardEnum board, unsigned int version):
|
||||||
StructField("Limit")
|
StructField("Limit")
|
||||||
{
|
{
|
||||||
if (IS_TARANIS(board) && version >= 216) {
|
if (IS_TARANIS(board) && version >= 217) {
|
||||||
Append(new ConversionField< SignedField<16> >(limit.min, +1000));
|
Append(new ConversionField< SignedField<11> >(limit.min, +1000));
|
||||||
Append(new ConversionField< SignedField<16> >(limit.max, -1000));
|
Append(new ConversionField< SignedField<11> >(limit.max, -1000));
|
||||||
|
Append(new SignedField<11>(limit.offset));
|
||||||
|
Append(new SignedField<11>(limit.ppmCenter));
|
||||||
|
Append(new BoolField<1>(limit.symetrical));
|
||||||
|
Append(new BoolField<1>(limit.revert));
|
||||||
|
Append(new SpareBitsField<2>());
|
||||||
|
Append(new SignedField<8>(limit.curve.value));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
|
if (IS_TARANIS(board) && version >= 216) {
|
||||||
Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
|
Append(new ConversionField< SignedField<16> >(limit.min, +1000));
|
||||||
}
|
Append(new ConversionField< SignedField<16> >(limit.max, -1000));
|
||||||
Append(new SignedField<8>(limit.ppmCenter));
|
}
|
||||||
Append(new SignedField<14>(limit.offset));
|
else {
|
||||||
Append(new BoolField<1>(limit.symetrical));
|
Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
|
||||||
Append(new BoolField<1>(limit.revert));
|
Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
|
||||||
if (HAS_LARGE_LCD(board)) {
|
}
|
||||||
Append(new ZCharField<6>(limit.name));
|
Append(new SignedField<8>(limit.ppmCenter));
|
||||||
}
|
Append(new SignedField<14>(limit.offset));
|
||||||
if (IS_TARANIS(board) && version >= 216) {
|
Append(new BoolField<1>(limit.symetrical));
|
||||||
Append(new SignedField<8>(limit.curve.value));
|
Append(new BoolField<1>(limit.revert));
|
||||||
|
if (HAS_LARGE_LCD(board)) {
|
||||||
|
Append(new ZCharField<6>(limit.name));
|
||||||
|
}
|
||||||
|
if (IS_TARANIS(board) && version >= 216) {
|
||||||
|
Append(new SignedField<8>(limit.curve.value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -665,7 +665,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||||
case TelemetryMaxMultiplier:
|
case TelemetryMaxMultiplier:
|
||||||
return (IS_ARM(board) ? 32 : 8);
|
return (IS_ARM(board) ? 32 : 8);
|
||||||
case PPMCenter:
|
case PPMCenter:
|
||||||
return 1;
|
return (IS_TARANIS(board) ? 500 : 125);
|
||||||
case SYMLimits:
|
case SYMLimits:
|
||||||
return 1;
|
return 1;
|
||||||
case OptrexDisplay:
|
case OptrexDisplay:
|
||||||
|
|
|
@ -113,12 +113,13 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
|
||||||
}
|
}
|
||||||
|
|
||||||
// PPM center
|
// PPM center
|
||||||
if (firmware->getCapability(PPMCenter)) {
|
int ppmCenterMax = firmware->getCapability(PPMCenter);
|
||||||
|
if (ppmCenterMax) {
|
||||||
QSpinBox * center = new QSpinBox(this);
|
QSpinBox * center = new QSpinBox(this);
|
||||||
center->setProperty("index", i);
|
center->setProperty("index", i);
|
||||||
center->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
center->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
||||||
center->setMinimum(1375);
|
center->setMinimum(1500-ppmCenterMax);
|
||||||
center->setMaximum(1625);
|
center->setMaximum(1500+ppmCenterMax);
|
||||||
center->setValue(1500);
|
center->setValue(1500);
|
||||||
center->setValue(model.limitData[i].ppmCenter + 1500);
|
center->setValue(model.limitData[i].ppmCenter + 1500);
|
||||||
connect(center, SIGNAL(editingFinished()), this, SLOT(ppmcenterEdited()));
|
connect(center, SIGNAL(editingFinished()), this, SLOT(ppmcenterEdited()));
|
||||||
|
|
|
@ -148,6 +148,21 @@ PACK(typedef struct {
|
||||||
LIMITDATA_V215_EXTRA
|
LIMITDATA_V215_EXTRA
|
||||||
}) LimitData_v215;
|
}) LimitData_v215;
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
PACK(typedef struct {
|
||||||
|
int16_t min;
|
||||||
|
int16_t max;
|
||||||
|
int8_t ppmCenter;
|
||||||
|
int16_t offset:14;
|
||||||
|
uint16_t symetrical:1;
|
||||||
|
uint16_t revert:1;
|
||||||
|
char name[LEN_CHANNEL_NAME];
|
||||||
|
int8_t curve;
|
||||||
|
}) LimitData_v216;
|
||||||
|
#else
|
||||||
|
#define LimitData_v216 LimitData
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
PACK(typedef struct {
|
PACK(typedef struct {
|
||||||
uint8_t destCh;
|
uint8_t destCh;
|
||||||
|
@ -339,7 +354,7 @@ PACK(typedef struct {
|
||||||
AVR_FIELD(int8_t ppmDelay)
|
AVR_FIELD(int8_t ppmDelay)
|
||||||
BeepANACenter beepANACenter; // 1<<0->A1.. 1<<6->A7
|
BeepANACenter beepANACenter; // 1<<0->A1.. 1<<6->A7
|
||||||
MixData mixData[MAX_MIXERS];
|
MixData mixData[MAX_MIXERS];
|
||||||
LimitData limitData[NUM_CHNOUT];
|
LimitData_v216 limitData[NUM_CHNOUT];
|
||||||
ExpoData expoData[MAX_EXPOS];
|
ExpoData expoData[MAX_EXPOS];
|
||||||
|
|
||||||
CURVDATA curves[MAX_CURVES];
|
CURVDATA curves[MAX_CURVES];
|
||||||
|
@ -1074,7 +1089,20 @@ void ConvertModel_216_to_217(ModelData &model)
|
||||||
newModel.mixData[i] = oldModel.mixData[i];
|
newModel.mixData[i] = oldModel.mixData[i];
|
||||||
newModel.mixData[i].srcRaw = ConvertSource_216_to_217(oldModel.mixData[i].srcRaw);
|
newModel.mixData[i].srcRaw = ConvertSource_216_to_217(oldModel.mixData[i].srcRaw);
|
||||||
}
|
}
|
||||||
memcpy(newModel.limitData, oldModel.limitData, sizeof(newModel.limitData));
|
for (int i=0; i<NUM_CHNOUT; i++) {
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
newModel.limitData[i].min = oldModel.limitData[i].min;
|
||||||
|
newModel.limitData[i].max = oldModel.limitData[i].max;
|
||||||
|
newModel.limitData[i].offset = oldModel.limitData[i].offset;
|
||||||
|
newModel.limitData[i].ppmCenter = oldModel.limitData[i].ppmCenter;
|
||||||
|
newModel.limitData[i].symetrical = oldModel.limitData[i].symetrical;
|
||||||
|
newModel.limitData[i].revert = oldModel.limitData[i].revert;
|
||||||
|
newModel.limitData[i].curve = oldModel.limitData[i].curve;
|
||||||
|
memcpy(newModel.limitData[i].name, oldModel.limitData[i].name, sizeof(newModel.limitData[i].name));
|
||||||
|
#else
|
||||||
|
newModel.limitData[i] = oldModel.limitData[i];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
for (int i=0; i<MAX_EXPOS; i++) {
|
for (int i=0; i<MAX_EXPOS; i++) {
|
||||||
newModel.expoData[i] = oldModel.expoData[i];
|
newModel.expoData[i] = oldModel.expoData[i];
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
|
|
|
@ -4173,7 +4173,7 @@ void menuModelLimits(uint8_t event)
|
||||||
case ITEM_LIMITS_PPM_CENTER:
|
case ITEM_LIMITS_PPM_CENTER:
|
||||||
lcd_outdezAtt(LIMITS_PPM_CENTER_POS, y, PPM_CENTER+ld->ppmCenter, attr);
|
lcd_outdezAtt(LIMITS_PPM_CENTER_POS, y, PPM_CENTER+ld->ppmCenter, attr);
|
||||||
if (active) {
|
if (active) {
|
||||||
CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -125, +125);
|
CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -PPM_CENTER_MAX, +PPM_CENTER_MAX);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -357,7 +357,6 @@ PACK(typedef struct t_ScriptData {
|
||||||
};
|
};
|
||||||
#define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME];
|
#define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME];
|
||||||
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t spare[2];
|
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t spare[2];
|
||||||
#define LIMITDATA_EXTRA char name[LEN_CHANNEL_NAME]; int8_t curve;
|
|
||||||
#define swstate_t uint16_t
|
#define swstate_t uint16_t
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
enum ModuleIndex {
|
enum ModuleIndex {
|
||||||
|
@ -367,12 +366,10 @@ PACK(typedef struct t_ScriptData {
|
||||||
};
|
};
|
||||||
#define MODELDATA_BITMAP
|
#define MODELDATA_BITMAP
|
||||||
#define MODELDATA_EXTRA uint8_t externalModule; ModuleData moduleData[NUM_MODULES+1]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t rxBattAlarms[2];
|
#define MODELDATA_EXTRA uint8_t externalModule; ModuleData moduleData[NUM_MODULES+1]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t rxBattAlarms[2];
|
||||||
#define LIMITDATA_EXTRA
|
|
||||||
#define swstate_t uint8_t
|
#define swstate_t uint8_t
|
||||||
#else
|
#else
|
||||||
#define MODELDATA_BITMAP
|
#define MODELDATA_BITMAP
|
||||||
#define MODELDATA_EXTRA
|
#define MODELDATA_EXTRA
|
||||||
#define LIMITDATA_EXTRA
|
|
||||||
#define swstate_t uint8_t
|
#define swstate_t uint8_t
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -555,6 +552,7 @@ PACK(typedef struct t_ExpoData {
|
||||||
#define limit_min_max_t int16_t
|
#define limit_min_max_t int16_t
|
||||||
#define LIMIT_EXT_PERCENT 150
|
#define LIMIT_EXT_PERCENT 150
|
||||||
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
#define LIMIT_EXT_MAX (LIMIT_EXT_PERCENT*10)
|
||||||
|
#define PPM_CENTER_MAX 500
|
||||||
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode)*10 : lim->max+1000)
|
#define LIMIT_MAX(lim) (GV_IS_GV_VALUE(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->max, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode)*10 : lim->max+1000)
|
||||||
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode)*10 : lim->min-1000)
|
#define LIMIT_MIN(lim) (GV_IS_GV_VALUE(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX) ? GET_GVAR(lim->min, -LIMIT_EXT_MAX, LIMIT_EXT_MAX, mixerCurrentFlightMode)*10 : lim->min-1000)
|
||||||
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR(lim->offset, -1000, 1000, mixerCurrentFlightMode)*10 : lim->offset)
|
#define LIMIT_OFS(lim) (GV_IS_GV_VALUE(lim->offset, -1000, 1000) ? GET_GVAR(lim->offset, -1000, 1000, mixerCurrentFlightMode)*10 : lim->offset)
|
||||||
|
@ -565,6 +563,7 @@ PACK(typedef struct t_ExpoData {
|
||||||
#define limit_min_max_t int8_t
|
#define limit_min_max_t int8_t
|
||||||
#define LIMIT_EXT_PERCENT 125
|
#define LIMIT_EXT_PERCENT 125
|
||||||
#define LIMIT_EXT_MAX LIMIT_EXT_PERCENT
|
#define LIMIT_EXT_MAX LIMIT_EXT_PERCENT
|
||||||
|
#define PPM_CENTER_MAX 125
|
||||||
#define LIMIT_MAX(lim) (lim->max+100)
|
#define LIMIT_MAX(lim) (lim->max+100)
|
||||||
#define LIMIT_MIN(lim) (lim->min-100)
|
#define LIMIT_MIN(lim) (lim->min-100)
|
||||||
#define LIMIT_OFS(lim) (lim->offset)
|
#define LIMIT_OFS(lim) (lim->offset)
|
||||||
|
@ -573,17 +572,28 @@ PACK(typedef struct t_ExpoData {
|
||||||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
PACK(typedef struct t_LimitData {
|
PACK(typedef struct t_LimitData {
|
||||||
limit_min_max_t min;
|
int16_t min:11;
|
||||||
limit_min_max_t max;
|
int16_t max:11;
|
||||||
|
int16_t offset:11;
|
||||||
|
int16_t ppmCenter:11;
|
||||||
|
uint8_t symetrical:1;
|
||||||
|
uint8_t revert:1;
|
||||||
|
uint8_t spare:2;
|
||||||
|
int8_t curve;
|
||||||
|
char name[LEN_CHANNEL_NAME];
|
||||||
|
}) LimitData;
|
||||||
|
#else
|
||||||
|
PACK(typedef struct t_LimitData {
|
||||||
|
int8_t min;
|
||||||
|
int8_t max;
|
||||||
int8_t ppmCenter;
|
int8_t ppmCenter;
|
||||||
int16_t offset:14;
|
int16_t offset:14;
|
||||||
uint16_t symetrical:1;
|
uint16_t symetrical:1;
|
||||||
uint16_t revert:1;
|
uint16_t revert:1;
|
||||||
|
|
||||||
LIMITDATA_EXTRA
|
|
||||||
|
|
||||||
}) LimitData;
|
}) LimitData;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define TRIM_OFF (1)
|
#define TRIM_OFF (1)
|
||||||
#define TRIM_ON (0)
|
#define TRIM_ON (0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue