Merge pull request #6359 from etracer65/adjustments_osd_fix

Adjustments strings for OSD not kept in sync with enumeration causing invalid pointers
This commit is contained in:
Michael Keller 2018-07-15 15:52:26 +12:00 committed by GitHub
commit 2d27ce43e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 7 deletions

View File

@ -247,11 +247,15 @@ static const char * const adjustmentLabels[] = {
"D SETPOINT",
"D SETPOINT TRANSITION",
"HORIZON STRENGTH",
"ROLL RC RATE",
"PITCH RC RATE",
"ROLL RC EXPO",
"PITCH RC EXPO",
"PID AUDIO",
};
const char *adjustmentRangeName;
int adjustmentRangeValue = -1;
static int adjustmentRangeNameIndex = 0;
static int adjustmentRangeValue = -1;
#endif
#define ADJUSTMENT_FUNCTION_CONFIG_INDEX_OFFSET 1
@ -680,7 +684,7 @@ void processRcAdjustments(controlRateConfig_t *controlRateConfig)
#if defined(USE_OSD) && defined(USE_OSD_ADJUSTMENTS)
if (newValue != -1 && adjustmentState->config->adjustmentFunction != ADJUSTMENT_RATE_PROFILE) { // Rate profile already has an OSD element
adjustmentRangeName = &adjustmentLabels[adjustmentFunction - 1][0];
adjustmentRangeNameIndex = adjustmentFunction;
adjustmentRangeValue = newValue;
}
#else
@ -733,3 +737,17 @@ void useAdjustmentConfig(pidProfile_t *pidProfileToUse)
{
pidProfile = pidProfileToUse;
}
#if defined(USE_OSD) && defined(USE_OSD_ADJUSTMENTS)
const char *getAdjustmentsRangeName(void) {
if (adjustmentRangeNameIndex > 0) {
return &adjustmentLabels[adjustmentRangeNameIndex - 1][0];
} else {
return NULL;
}
}
int getAdjustmentsRangeValue(void) {
return adjustmentRangeValue;
}
#endif

View File

@ -105,12 +105,11 @@ typedef struct adjustmentState_s {
#define MAX_SIMULTANEOUS_ADJUSTMENT_COUNT 4 // enough for 4 x 3position switches / 4 aux channel
#endif
extern const char *adjustmentRangeName;
extern int adjustmentRangeValue;
void resetAdjustmentStates(void);
void updateAdjustmentStates(void);
struct controlRateConfig_s;
void processRcAdjustments(struct controlRateConfig_s *controlRateConfig);
struct pidProfile_s;
void useAdjustmentConfig(struct pidProfile_s *pidProfileToUse);
const char *getAdjustmentsRangeName(void);
int getAdjustmentsRangeValue(void);

View File

@ -944,7 +944,9 @@ static bool osdDrawSingleElement(uint8_t item)
#ifdef USE_OSD_ADJUSTMENTS
case OSD_ADJUSTMENT_RANGE:
tfp_sprintf(buff, "%s: %3d", adjustmentRangeName, adjustmentRangeValue);
if (getAdjustmentsRangeName()) {
tfp_sprintf(buff, "%s: %3d", getAdjustmentsRangeName(), getAdjustmentsRangeValue());
}
break;
#endif