1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-22 07:45:14 +03:00

Reset SF can now reset individual telemetry items (fix #161)

This commit is contained in:
Andre Bernet 2015-03-22 17:58:14 +04:00
parent 51500d4455
commit aced02f2bb
5 changed files with 48 additions and 8 deletions

View file

@ -41,6 +41,7 @@ CustomFunctionsContext modelFunctionsContext = { 0 };
#if defined(CPUARM) #if defined(CPUARM)
CustomFunctionsContext globalFunctionsContext = { 0 }; CustomFunctionsContext globalFunctionsContext = { 0 };
extern TelemetryItem telemetryItems[];
#endif #endif
@ -355,6 +356,12 @@ void evalFunctions()
break; break;
#endif #endif
} }
#if defined(CPUARM)
if (CFN_PARAM(cfn)>=FUNC_RESET_PARAM_FIRST_TELEM) {
TelemetryItem * telemetryItem = & telemetryItems[CFN_PARAM(cfn)-FUNC_RESET_PARAM_FIRST_TELEM];
telemetryItem->clear();
}
#endif
break; break;
#if defined(CPUARM) #if defined(CPUARM)

View file

@ -211,8 +211,18 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu
int16_t val_min = 0; int16_t val_min = 0;
int16_t val_max = 255; int16_t val_max = 255;
if (func == FUNC_RESET) { if (func == FUNC_RESET) {
val_max = FUNC_RESET_PARAM_LAST; val_max = FUNC_RESET_PARAM_FIRST_TELEM+lastUsedTelemetryIndex();
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(cfn), attr); int param = CFN_PARAM(cfn);
if (param < FUNC_RESET_PARAM_FIRST_TELEM) {
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, param, attr);
}
else {
if (param > FUNC_RESET_PARAM_FIRST_TELEM) {
INCDEC_ENABLE_CHECK(isSensorAvailableInResetSpecialFunction);
}
TelemetrySensor * sensor = & g_model.telemetrySensors[param-FUNC_RESET_PARAM_FIRST_TELEM];
lcd_putsnAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, sensor->label, TELEM_LABEL_LEN, attr|ZCHAR);
}
} }
#if defined(OVERRIDE_CHANNEL_FUNCTION) #if defined(OVERRIDE_CHANNEL_FUNCTION)
else if (func == FUNC_OVERRIDE_CHANNEL) { else if (func == FUNC_OVERRIDE_CHANNEL) {

View file

@ -130,6 +130,7 @@
#define NUM_POTS 5 #define NUM_POTS 5
#define NUM_XPOTS 3 #define NUM_XPOTS 3
#endif #endif
#define TELEM_VALUES_MAX 32
#elif defined(CPUARM) #elif defined(CPUARM)
#define MAX_MODELS 60 #define MAX_MODELS 60
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32 #define NUM_CHNOUT 32 // number of real output channels CH1-CH32
@ -141,6 +142,7 @@
#define NUM_TRAINER 16 #define NUM_TRAINER 16
#define NUM_POTS 3 #define NUM_POTS 3
#define NUM_XPOTS 0 #define NUM_XPOTS 0
#define TELEM_VALUES_MAX 16
#elif defined(CPUM2560) || defined(CPUM2561) #elif defined(CPUM2560) || defined(CPUM2561)
#define MAX_MODELS 30 #define MAX_MODELS 30
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16
@ -152,6 +154,7 @@
#define NUM_TRAINER 8 #define NUM_TRAINER 8
#define NUM_POTS 3 #define NUM_POTS 3
#define NUM_XPOTS 0 #define NUM_XPOTS 0
#define TELEM_VALUES_MAX 0
#elif defined(CPUM128) #elif defined(CPUM128)
#define MAX_MODELS 30 #define MAX_MODELS 30
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16
@ -163,6 +166,7 @@
#define NUM_TRAINER 8 #define NUM_TRAINER 8
#define NUM_POTS 3 #define NUM_POTS 3
#define NUM_XPOTS 0 #define NUM_XPOTS 0
#define TELEM_VALUES_MAX 0
#else #else
#define MAX_MODELS 16 #define MAX_MODELS 16
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16
@ -174,6 +178,7 @@
#define NUM_TRAINER 8 #define NUM_TRAINER 8
#define NUM_POTS 3 #define NUM_POTS 3
#define NUM_XPOTS 0 #define NUM_XPOTS 0
#define TELEM_VALUES_MAX 0
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)
@ -584,9 +589,13 @@ enum ResetFunctionParam {
#endif #endif
#if ROTARY_ENCODERS > 1 #if ROTARY_ENCODERS > 1
FUNC_RESET_ROTENC2, FUNC_RESET_ROTENC2,
#endif
#if defined(CPUARM)
FUNC_RESET_PARAM_FIRST_TELEM,
FUNC_RESET_PARAM_LAST_TELEM = FUNC_RESET_PARAM_FIRST_TELEM + TELEM_VALUES_MAX,
#endif #endif
FUNC_RESET_PARAMS_COUNT, FUNC_RESET_PARAMS_COUNT,
FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1 FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1,
}; };
enum AdjustGvarFunctionParam { enum AdjustGvarFunctionParam {
@ -1211,11 +1220,6 @@ PACK(typedef struct {
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)
#if defined(PCBTARANIS)
#define TELEM_VALUES_MAX 32
#else
#define TELEM_VALUES_MAX 16
#endif
#define TELEM_LABEL_LEN 4 #define TELEM_LABEL_LEN 4
//#define TELEM_FLAG_TIMEOUT 0x01 //#define TELEM_FLAG_TIMEOUT 0x01
#define TELEM_FLAG_LOG 0x02 #define TELEM_FLAG_LOG 0x02

View file

@ -453,6 +453,23 @@ int availableTelemetryIndex()
return -1; return -1;
} }
int lastUsedTelemetryIndex()
{
for (int index=TELEM_VALUES_MAX-1; index>=0; index--) {
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index];
if (telemetrySensor.isAvailable()) {
return index;
}
}
return -1;
}
bool isSensorAvailableInResetSpecialFunction(int index)
{
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index-FUNC_RESET_PARAM_FIRST_TELEM];
return telemetrySensor.isAvailable();
}
void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec) void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec)
{ {
int index = getTelemetryIndex(protocol, id, instance); int index = getTelemetryIndex(protocol, id, instance);

View file

@ -185,6 +185,8 @@ inline bool isTelemetryFieldComparisonAvailable(int index)
void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec); void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec);
void delTelemetryIndex(uint8_t index); void delTelemetryIndex(uint8_t index);
int availableTelemetryIndex(); int availableTelemetryIndex();
int lastUsedTelemetryIndex();
bool isSensorAvailableInResetSpecialFunction(int index);
int32_t getTelemetryValue(uint8_t index, uint8_t & prec); int32_t getTelemetryValue(uint8_t index, uint8_t & prec);
int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec); int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec);