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):
|
||||
StructField("Limit")
|
||||
{
|
||||
if (IS_TARANIS(board) && version >= 216) {
|
||||
Append(new ConversionField< SignedField<16> >(limit.min, +1000));
|
||||
Append(new ConversionField< SignedField<16> >(limit.max, -1000));
|
||||
if (IS_TARANIS(board) && version >= 217) {
|
||||
Append(new ConversionField< SignedField<11> >(limit.min, +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 {
|
||||
Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
|
||||
Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
|
||||
}
|
||||
Append(new SignedField<8>(limit.ppmCenter));
|
||||
Append(new SignedField<14>(limit.offset));
|
||||
Append(new BoolField<1>(limit.symetrical));
|
||||
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));
|
||||
if (IS_TARANIS(board) && version >= 216) {
|
||||
Append(new ConversionField< SignedField<16> >(limit.min, +1000));
|
||||
Append(new ConversionField< SignedField<16> >(limit.max, -1000));
|
||||
}
|
||||
else {
|
||||
Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
|
||||
Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
|
||||
}
|
||||
Append(new SignedField<8>(limit.ppmCenter));
|
||||
Append(new SignedField<14>(limit.offset));
|
||||
Append(new BoolField<1>(limit.symetrical));
|
||||
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:
|
||||
return (IS_ARM(board) ? 32 : 8);
|
||||
case PPMCenter:
|
||||
return 1;
|
||||
return (IS_TARANIS(board) ? 500 : 125);
|
||||
case SYMLimits:
|
||||
return 1;
|
||||
case OptrexDisplay:
|
||||
|
|
|
@ -113,12 +113,13 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
|
|||
}
|
||||
|
||||
// PPM center
|
||||
if (firmware->getCapability(PPMCenter)) {
|
||||
int ppmCenterMax = firmware->getCapability(PPMCenter);
|
||||
if (ppmCenterMax) {
|
||||
QSpinBox * center = new QSpinBox(this);
|
||||
center->setProperty("index", i);
|
||||
center->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
||||
center->setMinimum(1375);
|
||||
center->setMaximum(1625);
|
||||
center->setMinimum(1500-ppmCenterMax);
|
||||
center->setMaximum(1500+ppmCenterMax);
|
||||
center->setValue(1500);
|
||||
center->setValue(model.limitData[i].ppmCenter + 1500);
|
||||
connect(center, SIGNAL(editingFinished()), this, SLOT(ppmcenterEdited()));
|
||||
|
|
|
@ -148,6 +148,21 @@ PACK(typedef struct {
|
|||
LIMITDATA_V215_EXTRA
|
||||
}) 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)
|
||||
PACK(typedef struct {
|
||||
uint8_t destCh;
|
||||
|
@ -339,7 +354,7 @@ PACK(typedef struct {
|
|||
AVR_FIELD(int8_t ppmDelay)
|
||||
BeepANACenter beepANACenter; // 1<<0->A1.. 1<<6->A7
|
||||
MixData mixData[MAX_MIXERS];
|
||||
LimitData limitData[NUM_CHNOUT];
|
||||
LimitData_v216 limitData[NUM_CHNOUT];
|
||||
ExpoData expoData[MAX_EXPOS];
|
||||
|
||||
CURVDATA curves[MAX_CURVES];
|
||||
|
@ -1074,7 +1089,20 @@ void ConvertModel_216_to_217(ModelData &model)
|
|||
newModel.mixData[i] = oldModel.mixData[i];
|
||||
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++) {
|
||||
newModel.expoData[i] = oldModel.expoData[i];
|
||||
#if defined(PCBTARANIS)
|
||||
|
|
|
@ -4173,7 +4173,7 @@ void menuModelLimits(uint8_t event)
|
|||
case ITEM_LIMITS_PPM_CENTER:
|
||||
lcd_outdezAtt(LIMITS_PPM_CENTER_POS, y, PPM_CENTER+ld->ppmCenter, attr);
|
||||
if (active) {
|
||||
CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -125, +125);
|
||||
CHECK_INCDEC_MODELVAR(event, ld->ppmCenter, -PPM_CENTER_MAX, +PPM_CENTER_MAX);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
|
@ -357,7 +357,6 @@ PACK(typedef struct t_ScriptData {
|
|||
};
|
||||
#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 LIMITDATA_EXTRA char name[LEN_CHANNEL_NAME]; int8_t curve;
|
||||
#define swstate_t uint16_t
|
||||
#elif defined(PCBSKY9X)
|
||||
enum ModuleIndex {
|
||||
|
@ -367,12 +366,10 @@ PACK(typedef struct t_ScriptData {
|
|||
};
|
||||
#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 LIMITDATA_EXTRA
|
||||
#define swstate_t uint8_t
|
||||
#else
|
||||
#define MODELDATA_BITMAP
|
||||
#define MODELDATA_EXTRA
|
||||
#define LIMITDATA_EXTRA
|
||||
#define swstate_t uint8_t
|
||||
#endif
|
||||
|
||||
|
@ -555,6 +552,7 @@ PACK(typedef struct t_ExpoData {
|
|||
#define limit_min_max_t int16_t
|
||||
#define LIMIT_EXT_PERCENT 150
|
||||
#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_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)
|
||||
|
@ -565,6 +563,7 @@ PACK(typedef struct t_ExpoData {
|
|||
#define limit_min_max_t int8_t
|
||||
#define LIMIT_EXT_PERCENT 125
|
||||
#define LIMIT_EXT_MAX LIMIT_EXT_PERCENT
|
||||
#define PPM_CENTER_MAX 125
|
||||
#define LIMIT_MAX(lim) (lim->max+100)
|
||||
#define LIMIT_MIN(lim) (lim->min-100)
|
||||
#define LIMIT_OFS(lim) (lim->offset)
|
||||
|
@ -573,17 +572,28 @@ PACK(typedef struct t_ExpoData {
|
|||
#define LIMIT_OFS_RESX(lim) calc1000toRESX(LIMIT_OFS(lim))
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
PACK(typedef struct t_LimitData {
|
||||
limit_min_max_t min;
|
||||
limit_min_max_t max;
|
||||
int16_t min:11;
|
||||
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;
|
||||
int16_t offset:14;
|
||||
uint16_t symetrical:1;
|
||||
uint16_t revert:1;
|
||||
|
||||
LIMITDATA_EXTRA
|
||||
|
||||
}) LimitData;
|
||||
#endif
|
||||
|
||||
#define TRIM_OFF (1)
|
||||
#define TRIM_ON (0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue