1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 06:15:10 +03:00

Some reserve in telemetry sources added

This commit is contained in:
Bertrand Songis 2014-02-22 19:24:01 +01:00
parent a47ac42996
commit 7e43a88d3f
6 changed files with 127 additions and 63 deletions

View file

@ -232,8 +232,9 @@ class SourcesConversionTable: public ConversionTable {
} }
} }
if (afterrelease21March2013) if (afterrelease21March2013) {
addConversion(RawSource(SOURCE_TYPE_TELEMETRY, 0), val++); addConversion(RawSource(SOURCE_TYPE_TELEMETRY, 0), val++);
}
for (int i=1; i<TELEMETRY_SOURCE_ACC; i++) { for (int i=1; i<TELEMETRY_SOURCE_ACC; i++) {
if (version < 216) { if (version < 216) {
@ -241,6 +242,12 @@ class SourcesConversionTable: public ConversionTable {
continue; continue;
} }
addConversion(RawSource(SOURCE_TYPE_TELEMETRY, i), val++); addConversion(RawSource(SOURCE_TYPE_TELEMETRY, i), val++);
if (version >= 216 && IS_ARM(board)) {
if (i==TELEMETRY_SOURCE_DTE)
val += 5;
if (i==TELEMETRY_SOURCE_POWER_MAX)
val += 5;
}
} }
} }
} }
@ -314,6 +321,57 @@ class SwitchField: public ConversionField< SignedField<N> > {
int _switch; int _switch;
}; };
template <int N>
class TelemetrySourceField: public TransformedField {
public:
TelemetrySourceField(unsigned int & source, BoardEnum board, unsigned int version):
TransformedField(internalField),
internalField(_source),
source(source),
board(board),
version(version),
_source(0)
{
}
virtual void beforeExport()
{
_source = source;
if (source > 0 && !IS_AFTER_RELEASE_21_MARCH_2013(board, version))
_source--;
if (IS_ARM(board) && version >= 216) {
if (source > 1+TELEMETRY_SOURCE_DTE)
_source += 5;
if (source > 1+TELEMETRY_SOURCE_POWER_MAX)
_source += 5;
}
}
virtual void afterImport()
{
source = _source;
if (source > 0 && !IS_AFTER_RELEASE_21_MARCH_2013(board, version))
source++;
if (IS_ARM(board) && version >= 216) {
if (source > 1+TELEMETRY_SOURCE_DTE)
source -= 5;
if (source > 1+TELEMETRY_SOURCE_POWER_MAX)
source -= 5;
}
}
protected:
UnsignedField<N> internalField;
unsigned int & source;
BoardEnum board;
unsigned int version;
unsigned int _source;
};
template <int N> template <int N>
class SourceField: public ConversionField< UnsignedField<N> > { class SourceField: public ConversionField< UnsignedField<N> > {
public: public:
@ -1783,15 +1841,15 @@ class FrskyScreenField: public DataField {
version(version) version(version)
{ {
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
bars.Append(new UnsignedField<8>(_screen.body.bars[i].source)); bars.Append(new TelemetrySourceField<8>(screen.body.bars[i].source, board, version));
bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMin)); bars.Append(new UnsignedField<8>(screen.body.bars[i].barMin));
bars.Append(new UnsignedField<8>(_screen.body.bars[i].barMax)); bars.Append(new UnsignedField<8>(screen.body.bars[i].barMax));
} }
int columns=(IS_TARANIS(board) ? 3:2); int columns=(IS_TARANIS(board) ? 3:2);
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
for (int j=0; j<columns; j++) { for (int j=0; j<columns; j++) {
numbers.Append(new UnsignedField<8>(_screen.body.lines[i].source[j])); numbers.Append(new TelemetrySourceField<8>(screen.body.lines[i].source[j], board, version));
} }
} }
if (!IS_TARANIS(board)) { if (!IS_TARANIS(board)) {
@ -1803,23 +1861,6 @@ class FrskyScreenField: public DataField {
virtual void ExportBits(QBitArray & output) virtual void ExportBits(QBitArray & output)
{ {
_screen = screen;
bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version);
if (!afterrelease21March2013) {
for (int i=0; i<4; i++) {
if (_screen.body.bars[i].source > 0)
_screen.body.bars[i].source--;
}
int columns=(IS_TARANIS(board) ? 3:2);
for (int i=0; i<4; i++) {
for (int j=0; j<columns;j++) {
if (_screen.body.lines[i].source[j] > 0)
_screen.body.lines[i].source[j]--;
}
}
}
if (screen.type == 0) if (screen.type == 0)
numbers.ExportBits(output); numbers.ExportBits(output);
else else
@ -1828,34 +1869,14 @@ class FrskyScreenField: public DataField {
virtual void ImportBits(QBitArray & input) virtual void ImportBits(QBitArray & input)
{ {
_screen = screen;
bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version);
// NOTA: screen.type should have been imported first! // NOTA: screen.type should have been imported first!
if (screen.type == 0) { if (screen.type == 0) {
numbers.ImportBits(input); numbers.ImportBits(input);
if (!afterrelease21March2013) {
int columns=(IS_TARANIS(board) ? 3:2);
for (int i=0; i<4; i++) {
for (int j=0; j<columns;j++) {
if (_screen.body.lines[i].source[j] > 0)
_screen.body.lines[i].source[j]++;
}
}
}
} }
else { else {
bars.ImportBits(input); bars.ImportBits(input);
if (!afterrelease21March2013) {
for (int i=0; i<4; i++) {
if (_screen.body.bars[i].source > 0)
_screen.body.bars[i].source++;
}
}
} }
screen = _screen;
} }
virtual unsigned int size() virtual unsigned int size()
@ -1869,7 +1890,6 @@ class FrskyScreenField: public DataField {
protected: protected:
FrSkyScreenData & screen; FrSkyScreenData & screen;
FrSkyScreenData _screen;
BoardEnum board; BoardEnum board;
unsigned int version; unsigned int version;
StructField bars; StructField bars;

View file

@ -1815,7 +1815,7 @@ enum FlightModesItems {
ITEM_PHASES_LAST = ITEM_PHASES_COUNT-1 ITEM_PHASES_LAST = ITEM_PHASES_COUNT-1
}; };
bool isTrimModeAvailable(int16_t mode) bool isTrimModeAvailable(int mode)
{ {
return (mode == TRIM_MODE_NONE || (mode%2) == 0 || (mode/2) != (m_posVert-1)); return (mode == TRIM_MODE_NONE || (mode%2) == 0 || (mode/2) != (m_posVert-1));
} }
@ -5738,7 +5738,7 @@ void menuModelTelemetry(uint8_t event)
if (attr && (s_editMode>0 || p1valdiff)) { if (attr && (s_editMode>0 || p1valdiff)) {
switch (m_posHorz) { switch (m_posHorz) {
case 0: case 0:
bar.source = checkIncDecModel(event, barSource, 0, TELEM_DISPLAY_MAX); bar.source = CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, barSource, TELEM_DISPLAY_MAX, isTelemetrySourceAvailable);
if (checkIncDec_Ret) { if (checkIncDec_Ret) {
bar.barMin = 0; bar.barMin = 0;
bar.barMax = 255 - maxBarTelemValue(bar.source); bar.barMax = 255 - maxBarTelemValue(bar.source);
@ -5766,7 +5766,7 @@ void menuModelTelemetry(uint8_t event)
#endif #endif
lcd_putsiAtt(pos[c], y, STR_VTELEMCHNS, value, cellAttr); lcd_putsiAtt(pos[c], y, STR_VTELEMCHNS, value, cellAttr);
if (cellAttr && (s_editMode>0 || p1valdiff)) { if (cellAttr && (s_editMode>0 || p1valdiff)) {
CHECK_INCDEC_MODELVAR_ZERO(event, value, (lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX); CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, value, (lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX, isTelemetrySourceAvailable);
} }
} }
if (attr && m_posHorz == NUM_LINE_ITEMS) { if (attr && m_posHorz == NUM_LINE_ITEMS) {

View file

@ -1185,7 +1185,7 @@ void drawStatusLine()
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)
bool isSourceAvailable(int16_t source) bool isSourceAvailable(int source)
{ {
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
if (source>=MIXSRC_FIRST_INPUT && source<=MIXSRC_LAST_INPUT) { if (source>=MIXSRC_FIRST_INPUT && source<=MIXSRC_LAST_INPUT) {
@ -1228,10 +1228,24 @@ bool isSourceAvailable(int16_t source)
return false; return false;
#endif #endif
if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM)
return isTelemetrySourceAvailable(source-MIXSRC_FIRST_TELEM+1);
return true; return true;
} }
bool isInputSourceAvailable(int16_t source) bool isTelemetrySourceAvailable(int source)
{
if (source >= TELEM_RESERVE1 && source <= TELEM_RESERVE5)
return false;
if (source >= TELEM_RESERVE6 && source <= TELEM_RESERVE10)
return false;
return true;
}
bool isInputSourceAvailable(int source)
{ {
if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) if (source>=MIXSRC_Rud && source<=MIXSRC_MAX)
return true; return true;
@ -1243,12 +1257,12 @@ bool isInputSourceAvailable(int16_t source)
return true; return true;
if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM) if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM)
return true; return isTelemetrySourceAvailable(source-MIXSRC_FIRST_TELEM+1);
return false; return false;
} }
bool isSwitchAvailableInLogicalSwitches(int16_t swtch) bool isSwitchAvailableInLogicalSwitches(int swtch)
{ {
if (swtch < 0) { if (swtch < 0) {
if (swtch <= -SWSRC_ON) if (swtch <= -SWSRC_ON)
@ -1277,7 +1291,7 @@ bool isSwitchAvailableInLogicalSwitches(int16_t swtch)
return true; return true;
} }
bool isSwitchAvailable(int16_t swtch) bool isSwitchAvailable(int swtch)
{ {
if (!isSwitchAvailableInLogicalSwitches(swtch)) { if (!isSwitchAvailableInLogicalSwitches(swtch)) {
return false; return false;
@ -1291,13 +1305,12 @@ bool isSwitchAvailable(int16_t swtch)
return true; return true;
} }
// Not available yet, will be needed if we implement the Range function later... bool isLogicalSwitchFunctionAvailable(int function)
bool isLogicalSwitchFunctionAvailable(int16_t function)
{ {
return function != LS_FUNC_RANGE; return function != LS_FUNC_RANGE;
} }
bool isAssignableFunctionAvailable(int16_t function) bool isAssignableFunctionAvailable(int function)
{ {
switch (function) { switch (function) {

View file

@ -167,7 +167,7 @@ extern int8_t s_editMode; // global editmode
#define HIDDEN_ROW ((uint8_t)-2) #define HIDDEN_ROW ((uint8_t)-2)
#if defined(CPUARM) #if defined(CPUARM)
typedef bool (*IsValueAvailable)(int16_t); typedef bool (*IsValueAvailable)(int);
int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0, IsValueAvailable isValueAvailable=NULL); int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0, IsValueAvailable isValueAvailable=NULL);
#else #else
int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0); int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max, uint8_t i_flags=0);
@ -190,10 +190,18 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
var = checkIncDecModelZero(event,var,max) var = checkIncDecModelZero(event,var,max)
#if defined(CPUARM) #if defined(CPUARM)
bool isLogicalSwitchFunctionAvailable(int16_t function); #define CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, var, max, check) \
bool isAssignableFunctionAvailable(int16_t function); var = checkIncDec(event, var, 0, max, EE_MODEL, check)
bool isSwitchAvailable(int16_t swtch); #else
bool isSwitchAvailableInLogicalSwitches(int16_t swtch); #define CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, var, max, check) \
CHECK_INCDEC_MODELVAR_ZERO(event, var, max)
#endif
#if defined(CPUARM)
bool isLogicalSwitchFunctionAvailable(int function);
bool isAssignableFunctionAvailable(int function);
bool isSwitchAvailable(int swtch);
bool isSwitchAvailableInLogicalSwitches(int swtch);
#define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER))
#define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \ #define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \
var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SWITCH|NO_INCDEC_MARKS, isSwitchAvailable) var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SWITCH|NO_INCDEC_MARKS, isSwitchAvailable)
@ -207,8 +215,9 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)
bool isSourceAvailable(int16_t source); bool isSourceAvailable(int source);
bool isInputSourceAvailable(int16_t source); bool isTelemetrySourceAvailable(int source);
bool isInputSourceAvailable(int source);
#define CHECK_INCDEC_MODELSOURCE(event, var, min, max) \ #define CHECK_INCDEC_MODELSOURCE(event, var, min, max) \
var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable) var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable)
#elif defined(AUTOSOURCE) #elif defined(AUTOSOURCE)

View file

@ -962,6 +962,13 @@ enum TelemetrySource {
TELEM_VSPD, TELEM_VSPD,
TELEM_ASPD, TELEM_ASPD,
TELEM_DTE, TELEM_DTE,
#if defined(CPUARM)
TELEM_RESERVE1,
TELEM_RESERVE2,
TELEM_RESERVE3,
TELEM_RESERVE4,
TELEM_RESERVE5,
#endif
TELEM_MIN_A1, TELEM_MIN_A1,
TELEM_MIN_A2, TELEM_MIN_A2,
TELEM_MIN_ALT, TELEM_MIN_ALT,
@ -975,6 +982,13 @@ enum TelemetrySource {
TELEM_MIN_VFAS, TELEM_MIN_VFAS,
TELEM_MAX_CURRENT, TELEM_MAX_CURRENT,
TELEM_MAX_POWER, TELEM_MAX_POWER,
#if defined(CPUARM)
TELEM_RESERVE6,
TELEM_RESERVE7,
TELEM_RESERVE8,
TELEM_RESERVE9,
TELEM_RESERVE10,
#endif
TELEM_ACC, TELEM_ACC,
TELEM_GPS_TIME, TELEM_GPS_TIME,
TELEM_CSW_MAX = TELEM_MAX_POWER, TELEM_CSW_MAX = TELEM_MAX_POWER,

View file

@ -256,6 +256,7 @@
#define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk") #define TR_FUNCSOUNDS TR("Bp1\0""Bp2\0""Bp3\0""Wrn1""Wrn2""Chee""Rata""Tick""Sirn""Ring""SciF""Robt""Chrp""Tada""Crck""Alrm", "Beep1 ""Beep2 ""Beep3 ""Warn1 ""Warn2 ""Cheep ""Ratata""Tick ""Siren ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""AlmClk")
#define LEN_VTELEMCHNS "\004" #define LEN_VTELEMCHNS "\004"
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
#define TR_RSSI_0 "SWR\0" #define TR_RSSI_0 "SWR\0"
#define TR_RSSI_1 "RSSI" #define TR_RSSI_1 "RSSI"
@ -263,7 +264,14 @@
#define TR_RSSI_0 "Tx\0 " #define TR_RSSI_0 "Tx\0 "
#define TR_RSSI_1 "Rx\0 " #define TR_RSSI_1 "Rx\0 "
#endif #endif
#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0""A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+""Acc\0""Time"
#if defined(CPUARM)
#define TR_TELEM_RESERVE "[--]"
#else
#define TR_TELEM_RESERVE
#endif
#define TR_VTELEMCHNS "---\0""Batt""Tmr1""Tmr2" TR_RSSI_0 TR_RSSI_1 "A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Dist""GAlt""Cell""Cels""Vfas""Curr""Cnsp""Powr""AccX""AccY""AccZ""Hdg\0""VSpd""ASpd""dTE\0" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "A1-\0""A2-\0""Alt-""Alt+""Rpm+""T1+\0""T2+\0""Spd+""Dst+""Cel-""Vfs-""Cur+""Pwr+" TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE TR_TELEM_RESERVE "Acc\0""Time"
#if defined(CPUARM) #if defined(CPUARM)
#define LEN_VUNITSSYSTEM TR("\006", "\010") #define LEN_VUNITSSYSTEM TR("\006", "\010")