1
0
Fork 0
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:
bsongis 2014-08-21 21:40:44 +02:00
parent b5c63e339f
commit 07fe45ec5f
6 changed files with 81 additions and 30 deletions

View file

@ -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));
}
} }
} }
}; };

View file

@ -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:

View file

@ -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()));

View file

@ -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)

View file

@ -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

View file

@ -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)