Merge pull request #202 from KiteAnton/rateprofile
Rateprofiles to profiles
This commit is contained in:
commit
6df1b3ead3
|
@ -1136,7 +1136,7 @@ static bool blackboxWriteSysinfo()
|
||||||
blackboxPrintfHeaderLine("P interval:%d/%d", masterConfig.blackbox_rate_num, masterConfig.blackbox_rate_denom);
|
blackboxPrintfHeaderLine("P interval:%d/%d", masterConfig.blackbox_rate_num, masterConfig.blackbox_rate_denom);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
blackboxPrintfHeaderLine("rcRate:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile.rcRate8);
|
blackboxPrintfHeaderLine("rcRate:%d", masterConfig.profile[masterConfig.current_profile_index].controlRateProfile[masterConfig.profile[masterConfig.current_profile_index].activeRateProfile].rcRate8);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
blackboxPrintfHeaderLine("minthrottle:%d", masterConfig.escAndServoConfig.minthrottle);
|
blackboxPrintfHeaderLine("minthrottle:%d", masterConfig.escAndServoConfig.minthrottle);
|
||||||
|
|
|
@ -339,7 +339,8 @@ uint8_t getCurrentProfile(void)
|
||||||
static void setProfile(uint8_t profileIndex)
|
static void setProfile(uint8_t profileIndex)
|
||||||
{
|
{
|
||||||
currentProfile = &masterConfig.profile[profileIndex];
|
currentProfile = &masterConfig.profile[profileIndex];
|
||||||
currentControlRateProfile = ¤tProfile->controlRateProfile;
|
currentControlRateProfileIndex = currentProfile->activeRateProfile;
|
||||||
|
currentControlRateProfile = ¤tProfile->controlRateProfile[currentControlRateProfileIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t getCurrentControlRateProfile(void)
|
uint8_t getCurrentControlRateProfile(void)
|
||||||
|
@ -347,8 +348,15 @@ uint8_t getCurrentControlRateProfile(void)
|
||||||
return currentControlRateProfileIndex;
|
return currentControlRateProfileIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void setControlRateProfile(uint8_t profileIndex) {
|
||||||
|
currentControlRateProfileIndex = profileIndex;
|
||||||
|
masterConfig.profile[getCurrentProfile()].activeRateProfile = profileIndex;
|
||||||
|
currentControlRateProfile = &masterConfig.profile[getCurrentProfile()].controlRateProfile[profileIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
controlRateConfig_t *getControlRateConfig(uint8_t profileIndex) {
|
controlRateConfig_t *getControlRateConfig(uint8_t profileIndex) {
|
||||||
return &masterConfig.profile[profileIndex].controlRateProfile;
|
return &masterConfig.profile[profileIndex].controlRateProfile[masterConfig.profile[profileIndex].activeRateProfile];
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getCurrentMinthrottle(void)
|
uint16_t getCurrentMinthrottle(void)
|
||||||
|
@ -480,8 +488,10 @@ static void resetConf(void)
|
||||||
|
|
||||||
resetPidProfile(¤tProfile->pidProfile);
|
resetPidProfile(¤tProfile->pidProfile);
|
||||||
|
|
||||||
resetControlRateConfig(&masterConfig.profile[0].controlRateProfile);
|
uint8_t rI;
|
||||||
|
for (rI = 0; rI<MAX_RATEPROFILES; rI++) {
|
||||||
|
resetControlRateConfig(&masterConfig.profile[0].controlRateProfile[rI]);
|
||||||
|
}
|
||||||
resetRollAndPitchTrims(&masterConfig.accelerometerTrims);
|
resetRollAndPitchTrims(&masterConfig.accelerometerTrims);
|
||||||
|
|
||||||
masterConfig.mag_declination = 0;
|
masterConfig.mag_declination = 0;
|
||||||
|
@ -995,6 +1005,14 @@ void changeProfile(uint8_t profileIndex)
|
||||||
beeperConfirmationBeeps(profileIndex + 1);
|
beeperConfirmationBeeps(profileIndex + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeControlRateProfile(uint8_t profileIndex) {
|
||||||
|
if (profileIndex > MAX_RATEPROFILES) {
|
||||||
|
profileIndex = MAX_RATEPROFILES - 1;
|
||||||
|
}
|
||||||
|
setControlRateProfile(profileIndex);
|
||||||
|
activateControlRateConfig();
|
||||||
|
}
|
||||||
|
|
||||||
void handleOneshotFeatureChangeOnRestart(void)
|
void handleOneshotFeatureChangeOnRestart(void)
|
||||||
{
|
{
|
||||||
// Shutdown PWM on all motors prior to soft restart
|
// Shutdown PWM on all motors prior to soft restart
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define MAX_PROFILE_COUNT 2
|
#define MAX_PROFILE_COUNT 2
|
||||||
|
#define MAX_RATEPROFILES 3
|
||||||
#define ONESHOT_FEATURE_CHANGED_DELAY_ON_BOOT_MS 1500
|
#define ONESHOT_FEATURE_CHANGED_DELAY_ON_BOOT_MS 1500
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -67,7 +68,7 @@ uint8_t getCurrentProfile(void);
|
||||||
void changeProfile(uint8_t profileIndex);
|
void changeProfile(uint8_t profileIndex);
|
||||||
|
|
||||||
uint8_t getCurrentControlRateProfile(void);
|
uint8_t getCurrentControlRateProfile(void);
|
||||||
|
void changeControlRateProfile(uint8_t profileIndex);
|
||||||
bool canSoftwareSerialBeUsed(void);
|
bool canSoftwareSerialBeUsed(void);
|
||||||
|
|
||||||
uint16_t getCurrentMinthrottle(void);
|
uint16_t getCurrentMinthrottle(void);
|
||||||
|
|
|
@ -19,5 +19,6 @@
|
||||||
|
|
||||||
typedef struct profile_s {
|
typedef struct profile_s {
|
||||||
pidProfile_t pidProfile;
|
pidProfile_t pidProfile;
|
||||||
controlRateConfig_t controlRateProfile;
|
uint8_t activeRateProfile;
|
||||||
|
controlRateConfig_t controlRateProfile[MAX_RATEPROFILES];
|
||||||
} profile_t;
|
} profile_t;
|
||||||
|
|
|
@ -651,7 +651,6 @@ void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t adjustm
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Is this needed ?
|
|
||||||
void applySelectAdjustment(uint8_t adjustmentFunction, uint8_t position)
|
void applySelectAdjustment(uint8_t adjustmentFunction, uint8_t position)
|
||||||
{
|
{
|
||||||
bool applied = false;
|
bool applied = false;
|
||||||
|
@ -659,7 +658,7 @@ void applySelectAdjustment(uint8_t adjustmentFunction, uint8_t position)
|
||||||
switch(adjustmentFunction) {
|
switch(adjustmentFunction) {
|
||||||
case ADJUSTMENT_RATE_PROFILE:
|
case ADJUSTMENT_RATE_PROFILE:
|
||||||
if (getCurrentControlRateProfile() != position) {
|
if (getCurrentControlRateProfile() != position) {
|
||||||
changeProfile(position); // Is this safe to change profile "in flight" ?
|
changeControlRateProfile(position);
|
||||||
blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RATE_PROFILE, position);
|
blackboxLogInflightAdjustmentEvent(ADJUSTMENT_RATE_PROFILE, position);
|
||||||
applied = true;
|
applied = true;
|
||||||
}
|
}
|
||||||
|
@ -670,7 +669,7 @@ void applySelectAdjustment(uint8_t adjustmentFunction, uint8_t position)
|
||||||
beeperConfirmationBeeps(position + 1);
|
beeperConfirmationBeeps(position + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
#define RESET_FREQUENCY_2HZ (1000 / 2)
|
#define RESET_FREQUENCY_2HZ (1000 / 2)
|
||||||
|
|
||||||
void processRcAdjustments(controlRateConfig_t *controlRateConfig, rxConfig_t *rxConfig)
|
void processRcAdjustments(controlRateConfig_t *controlRateConfig, rxConfig_t *rxConfig)
|
||||||
|
@ -724,10 +723,10 @@ void processRcAdjustments(controlRateConfig_t *controlRateConfig, rxConfig_t *rx
|
||||||
|
|
||||||
applyStepAdjustment(controlRateConfig, adjustmentFunction, delta);
|
applyStepAdjustment(controlRateConfig, adjustmentFunction, delta);
|
||||||
} else if (adjustmentState->config->mode == ADJUSTMENT_MODE_SELECT) {
|
} else if (adjustmentState->config->mode == ADJUSTMENT_MODE_SELECT) {
|
||||||
//uint16_t rangeWidth = ((2100 - 900) / adjustmentState->config->data.selectConfig.switchPositions); TODO - cleanup
|
uint16_t rangeWidth = ((2100 - 900) / adjustmentState->config->data.selectConfig.switchPositions);
|
||||||
//uint8_t position = (constrain(rcData[channelIndex], 900, 2100 - 1) - 900) / rangeWidth; TODO - cleanup
|
uint8_t position = (constrain(rcData[channelIndex], 900, 2100 - 1) - 900) / rangeWidth;
|
||||||
|
|
||||||
// applySelectAdjustment(adjustmentFunction, position);
|
applySelectAdjustment(adjustmentFunction, position);
|
||||||
}
|
}
|
||||||
MARK_ADJUSTMENT_FUNCTION_AS_BUSY(adjustmentIndex);
|
MARK_ADJUSTMENT_FUNCTION_AS_BUSY(adjustmentIndex);
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,7 @@ static void cliFeature(char *cmdline);
|
||||||
static void cliMotor(char *cmdline);
|
static void cliMotor(char *cmdline);
|
||||||
static void cliPlaySound(char *cmdline);
|
static void cliPlaySound(char *cmdline);
|
||||||
static void cliProfile(char *cmdline);
|
static void cliProfile(char *cmdline);
|
||||||
|
static void cliRateProfile(char *cmdline);
|
||||||
static void cliReboot(void);
|
static void cliReboot(void);
|
||||||
static void cliSave(char *cmdline);
|
static void cliSave(char *cmdline);
|
||||||
static void cliSerial(char *cmdline);
|
static void cliSerial(char *cmdline);
|
||||||
|
@ -279,6 +280,7 @@ const clicmd_t cmdTable[] = {
|
||||||
"[<index>]\r\n", cliPlaySound),
|
"[<index>]\r\n", cliPlaySound),
|
||||||
CLI_COMMAND_DEF("profile", "change profile",
|
CLI_COMMAND_DEF("profile", "change profile",
|
||||||
"[<index>]", cliProfile),
|
"[<index>]", cliProfile),
|
||||||
|
CLI_COMMAND_DEF("rateprofile", "change rate profile", "[<index>]", cliRateProfile),
|
||||||
CLI_COMMAND_DEF("rxrange", "configure rx channel ranges", NULL, cliRxRange),
|
CLI_COMMAND_DEF("rxrange", "configure rx channel ranges", NULL, cliRxRange),
|
||||||
CLI_COMMAND_DEF("rxfail", "show/set rx failsafe settings", NULL, cliRxFail),
|
CLI_COMMAND_DEF("rxfail", "show/set rx failsafe settings", NULL, cliRxFail),
|
||||||
CLI_COMMAND_DEF("save", "save and reboot", NULL, cliSave),
|
CLI_COMMAND_DEF("save", "save and reboot", NULL, cliSave),
|
||||||
|
@ -470,7 +472,7 @@ typedef enum {
|
||||||
// value section
|
// value section
|
||||||
MASTER_VALUE = (0 << VALUE_SECTION_OFFSET),
|
MASTER_VALUE = (0 << VALUE_SECTION_OFFSET),
|
||||||
PROFILE_VALUE = (1 << VALUE_SECTION_OFFSET),
|
PROFILE_VALUE = (1 << VALUE_SECTION_OFFSET),
|
||||||
|
PROFILE_RATE_VALUE = (2 << VALUE_SECTION_OFFSET),
|
||||||
// value mode
|
// value mode
|
||||||
MODE_DIRECT = (0 << VALUE_MODE_OFFSET),
|
MODE_DIRECT = (0 << VALUE_MODE_OFFSET),
|
||||||
MODE_LOOKUP = (1 << VALUE_MODE_OFFSET)
|
MODE_LOOKUP = (1 << VALUE_MODE_OFFSET)
|
||||||
|
@ -623,16 +625,16 @@ const clivalue_t valueTable[] = {
|
||||||
{ "servo_lowpass_enable", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.mixerConfig.servo_lowpass_enable, .config.lookup = { TABLE_OFF_ON } },
|
{ "servo_lowpass_enable", VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.mixerConfig.servo_lowpass_enable, .config.lookup = { TABLE_OFF_ON } },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{ "rc_rate", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rcRate8, .config.minmax = { 0, 250 } },
|
{ "rc_rate", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rcRate8, .config.minmax = { 0, 250 } },
|
||||||
{ "rc_expo", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rcExpo8, .config.minmax = { 0, 100 } },
|
{ "rc_expo", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rcExpo8, .config.minmax = { 0, 100 } },
|
||||||
{ "rc_yaw_expo", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rcYawExpo8, .config.minmax = { 0, 100 } },
|
{ "rc_yaw_expo", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rcYawExpo8, .config.minmax = { 0, 100 } },
|
||||||
{ "thr_mid", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.thrMid8, .config.minmax = { 0, 100 } },
|
{ "thr_mid", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].thrMid8, .config.minmax = { 0, 100 } },
|
||||||
{ "thr_expo", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.thrExpo8, .config.minmax = { 0, 100 } },
|
{ "thr_expo", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].thrExpo8, .config.minmax = { 0, 100 } },
|
||||||
{ "roll_rate", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rates[FD_ROLL], .config.minmax = { 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX } },
|
{ "roll_rate", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rates[FD_ROLL], .config.minmax = { 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX } },
|
||||||
{ "pitch_rate", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rates[FD_PITCH], .config.minmax = { 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX } },
|
{ "pitch_rate", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rates[FD_PITCH], .config.minmax = { 0, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX } },
|
||||||
{ "yaw_rate", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.rates[FD_YAW], .config.minmax = { 0, CONTROL_RATE_CONFIG_YAW_RATE_MAX } },
|
{ "yaw_rate", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].rates[FD_YAW], .config.minmax = { 0, CONTROL_RATE_CONFIG_YAW_RATE_MAX } },
|
||||||
{ "tpa_rate", VAR_UINT8 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.dynThrPID, .config.minmax = { 0, CONTROL_RATE_CONFIG_TPA_MAX} },
|
{ "tpa_rate", VAR_UINT8 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].dynThrPID, .config.minmax = { 0, CONTROL_RATE_CONFIG_TPA_MAX} },
|
||||||
{ "tpa_breakpoint", VAR_UINT16 | PROFILE_VALUE, &masterConfig.profile[0].controlRateProfile.tpa_breakpoint, .config.minmax = { PWM_RANGE_MIN, PWM_RANGE_MAX} },
|
{ "tpa_breakpoint", VAR_UINT16 | PROFILE_RATE_VALUE, &masterConfig.profile[0].controlRateProfile[0].tpa_breakpoint, .config.minmax = { PWM_RANGE_MIN, PWM_RANGE_MAX} },
|
||||||
{ "acro_plus_factor", VAR_UINT8 | PROFILE_VALUE, &masterConfig.rxConfig.acroPlusFactor, .config.minmax = {1, 100 } },
|
{ "acro_plus_factor", VAR_UINT8 | PROFILE_VALUE, &masterConfig.rxConfig.acroPlusFactor, .config.minmax = {1, 100 } },
|
||||||
{ "acro_plus_offset", VAR_UINT8 | PROFILE_VALUE, &masterConfig.rxConfig.acroPlusOffset, .config.minmax = {1, 90 } },
|
{ "acro_plus_offset", VAR_UINT8 | PROFILE_VALUE, &masterConfig.rxConfig.acroPlusOffset, .config.minmax = {1, 90 } },
|
||||||
|
|
||||||
|
@ -1667,9 +1669,10 @@ static void dumpValues(uint16_t valueSection)
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DUMP_MASTER = (1 << 0),
|
DUMP_MASTER = (1 << 0),
|
||||||
DUMP_PROFILE = (1 << 1),
|
DUMP_PROFILE = (1 << 1),
|
||||||
|
DUMP_RATES = (1 << 2),
|
||||||
} dumpFlags_e;
|
} dumpFlags_e;
|
||||||
|
|
||||||
#define DUMP_ALL (DUMP_MASTER | DUMP_PROFILE)
|
#define DUMP_ALL (DUMP_MASTER | DUMP_PROFILE | DUMP_RATES)
|
||||||
|
|
||||||
|
|
||||||
static const char* const sectionBreak = "\r\n";
|
static const char* const sectionBreak = "\r\n";
|
||||||
|
@ -1693,6 +1696,9 @@ static void cliDump(char *cmdline)
|
||||||
if (strcasecmp(cmdline, "profile") == 0) {
|
if (strcasecmp(cmdline, "profile") == 0) {
|
||||||
dumpMask = DUMP_PROFILE; // only
|
dumpMask = DUMP_PROFILE; // only
|
||||||
}
|
}
|
||||||
|
if (strcasecmp(cmdline, "rates") == 0) {
|
||||||
|
dumpMask = DUMP_RATES;
|
||||||
|
}
|
||||||
|
|
||||||
if (dumpMask & DUMP_MASTER) {
|
if (dumpMask & DUMP_MASTER) {
|
||||||
|
|
||||||
|
@ -1831,7 +1837,19 @@ static void cliDump(char *cmdline)
|
||||||
printSectionBreak();
|
printSectionBreak();
|
||||||
|
|
||||||
dumpValues(PROFILE_VALUE);
|
dumpValues(PROFILE_VALUE);
|
||||||
|
dumpValues(PROFILE_RATE_VALUE);
|
||||||
}
|
}
|
||||||
|
if (dumpMask & DUMP_RATES) {
|
||||||
|
cliPrint("\r\n# dump rates\r\n");
|
||||||
|
|
||||||
|
cliPrint("\r\n# rateprofile\r\n");
|
||||||
|
cliRateProfile("");
|
||||||
|
|
||||||
|
printSectionBreak();
|
||||||
|
|
||||||
|
dumpValues(PROFILE_RATE_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cliEnter(serialPort_t *serialPort)
|
void cliEnter(serialPort_t *serialPort)
|
||||||
|
@ -2127,6 +2145,21 @@ static void cliProfile(char *cmdline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cliRateProfile(char *cmdline) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (isEmpty(cmdline)) {
|
||||||
|
cliPrintf("rateprofile %d\r\n", getCurrentControlRateProfile());
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
i = atoi(cmdline);
|
||||||
|
if (i >= 0 && i < MAX_RATEPROFILES) {
|
||||||
|
changeControlRateProfile(i);
|
||||||
|
cliRateProfile("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void cliReboot(void) {
|
static void cliReboot(void) {
|
||||||
cliPrint("\r\nRebooting");
|
cliPrint("\r\nRebooting");
|
||||||
bufWriterFlush(cliWriter);
|
bufWriterFlush(cliWriter);
|
||||||
|
@ -2189,6 +2222,10 @@ static void cliPrintVar(const clivalue_t *var, uint32_t full)
|
||||||
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index);
|
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((var->type & VALUE_SECTION_MASK) == PROFILE_RATE_VALUE) {
|
||||||
|
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index) + (sizeof(controlRateConfig_t) * getCurrentControlRateProfile());
|
||||||
|
}
|
||||||
|
|
||||||
switch (var->type & VALUE_TYPE_MASK) {
|
switch (var->type & VALUE_TYPE_MASK) {
|
||||||
case VAR_UINT8:
|
case VAR_UINT8:
|
||||||
value = *(uint8_t *)ptr;
|
value = *(uint8_t *)ptr;
|
||||||
|
@ -2238,6 +2275,9 @@ static void cliSetVar(const clivalue_t *var, const int_float_value_t value)
|
||||||
if ((var->type & VALUE_SECTION_MASK) == PROFILE_VALUE) {
|
if ((var->type & VALUE_SECTION_MASK) == PROFILE_VALUE) {
|
||||||
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index);
|
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index);
|
||||||
}
|
}
|
||||||
|
if ((var->type & VALUE_SECTION_MASK) == PROFILE_RATE_VALUE) {
|
||||||
|
ptr = ((uint8_t *)ptr) + (sizeof(profile_t) * masterConfig.current_profile_index) + (sizeof(controlRateConfig_t) * getCurrentControlRateProfile());
|
||||||
|
}
|
||||||
|
|
||||||
switch (var->type & VALUE_TYPE_MASK) {
|
switch (var->type & VALUE_TYPE_MASK) {
|
||||||
case VAR_UINT8:
|
case VAR_UINT8:
|
||||||
|
|
Loading…
Reference in New Issue