1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-26 17:55:28 +03:00

CLI interface to set async modes

This commit is contained in:
Pawel Spychalski (DzikuVx) 2016-09-04 19:19:05 +02:00
parent 68536c62b4
commit 0dc1c21365
5 changed files with 78 additions and 0 deletions

View file

@ -381,6 +381,32 @@ static void resetServoMixerConfig(servoMixerConfig_t *servoMixerConfig)
}
#endif
#ifdef ASYNC_GYRO_PROCESSING
uint32_t getLooptime(void) {
return masterConfig.looptime;
}
uint16_t getAccUpdateFrequency(void) {
if (masterConfig.asyncMode == ASYNC_MODE_ALL) {
return masterConfig.accTaskFrequency;
} else {
return 1000000 / getLooptime();
}
}
uint16_t getAttiUpdateFrequency(void) {
if (masterConfig.asyncMode == ASYNC_MODE_ALL) {
return masterConfig.attiTaskFrequency;
} else {
return 1000000 / getLooptime();
}
}
uint8_t getAsyncMode(void) {
return masterConfig.asyncMode;
}
#endif
uint8_t getCurrentProfile(void)
{
return masterConfig.current_profile_index;
@ -522,6 +548,12 @@ static void resetConf(void)
masterConfig.gyroSync = 0;
masterConfig.gyroSyncDenominator = 2;
#ifdef ASYNC_GYRO_PROCESSING
masterConfig.accTaskFrequency = ACC_TASK_FREQUENCY_DEFAULT;
masterConfig.attiTaskFrequency = ATTI_TASK_FREQUENCY_DEFAULT;
masterConfig.asyncMode = ASYNC_MODE_NONE;
#endif
resetPidProfile(&currentProfile->pidProfile);
resetControlRateConfig(&masterConfig.controlRateProfiles[0]);

View file

@ -28,6 +28,20 @@
#define MAX_CONTROL_RATE_PROFILE_COUNT 3
#define ONESHOT_FEATURE_CHANGED_DELAY_ON_BOOT_MS 1500
#define ACC_TASK_FREQUENCY_DEFAULT 500
#define ACC_TASK_FREQUENCY_MIN 15
#define ACC_TASK_FREQUENCY_MAX 1000
#define ATTI_TASK_FREQUENCY_DEFAULT 1000
#define ATTI_TASK_FREQUENCY_MIN 15
#define ATTI_TASK_FREQUENCY_MAX 1000
#ifdef ASYNC_GYRO_PROCESSING
typedef enum {
ASYNC_MODE_NONE,
ASYNC_MODE_GYRO,
ASYNC_MODE_ALL
} asyncMode_e;
#endif
typedef enum {
FEATURE_RX_PPM = 1 << 0,
@ -105,3 +119,9 @@ uint16_t getCurrentMinthrottle(void);
struct master_s;
void targetConfiguration(struct master_s *config);
#ifdef ASYNC_GYRO_PROCESSING
uint32_t getLooptime(void);
uint16_t getAccUpdateFrequency(void);
uint16_t getAttiUpdateFrequency(void);
uint8_t getAsyncMode(void);
#endif

View file

@ -74,6 +74,12 @@ typedef struct master_s {
uint8_t gyroSync; // Enable interrupt based loop
uint8_t gyroSyncDenominator; // Gyro sync Denominator
#ifdef ASYNC_GYRO_PROCESSING
uint16_t accTaskFrequency;
uint16_t attiTaskFrequency;
uint8_t asyncMode;
#endif
motorMixer_t customMotorMixer[MAX_SUPPORTED_MOTORS];
#ifdef USE_SERVOS
servoMixer_t customServoMixer[MAX_SERVO_RULES];

View file

@ -468,6 +468,12 @@ static const char * const lookupTablePwmProtocol[] = {
"STANDARD", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED"
};
#ifdef ASYNC_GYRO_PROCESSING
static const char * const lookupTableAsyncMode[] = {
"NONE", "GYRO", "ALL"
};
#endif
typedef struct lookupTableEntry_s {
const char * const *values;
const uint8_t valueCount;
@ -503,6 +509,9 @@ typedef enum {
#endif
TABLE_AUX_OPERATOR,
TABLE_MOTOR_PWM_PROTOCOL,
#ifdef ASYNC_GYRO_PROCESSING
TABLE_ASYNC_MODE,
#endif
} lookupTableIndex_e;
static const lookupTableEntry_t lookupTables[] = {
@ -535,6 +544,9 @@ static const lookupTableEntry_t lookupTables[] = {
#endif
{ lookupTableAuxOperator, sizeof(lookupTableAuxOperator) / sizeof(char *) },
{ lookupTablePwmProtocol, sizeof(lookupTablePwmProtocol) / sizeof(char *) },
#ifdef ASYNC_GYRO_PROCESSING
{ lookupTableAsyncMode, sizeof(lookupTableAsyncMode) / sizeof(char *) },
#endif
};
#define VALUE_TYPE_OFFSET 0
@ -592,6 +604,12 @@ const clivalue_t valueTable[] = {
{ "gyro_sync", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.gyroSync, .config.lookup = { TABLE_OFF_ON } },
{ "gyro_sync_denom", VAR_UINT8 | MASTER_VALUE, &masterConfig.gyroSyncDenominator, .config.minmax = { 1, 32 } },
#ifdef ASYNC_GYRO_PROCESSING
{ "acc_task_frequency", VAR_UINT16 | MASTER_VALUE, &masterConfig.accTaskFrequency, .config.minmax = { ACC_TASK_FREQUENCY_MIN, ACC_TASK_FREQUENCY_MAX } },
{ "atti_task_frequency", VAR_UINT16 | MASTER_VALUE, &masterConfig.attiTaskFrequency, .config.minmax = { ATTI_TASK_FREQUENCY_MIN, ATTI_TASK_FREQUENCY_MAX } },
{ "async_mode", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.asyncMode, .config.lookup = { TABLE_ASYNC_MODE } },
#endif
{ "mid_rc", VAR_UINT16 | MASTER_VALUE, &masterConfig.rxConfig.midrc, .config.minmax = { 1200, 1700 }, 0 },
{ "min_check", VAR_UINT16 | MASTER_VALUE, &masterConfig.rxConfig.mincheck, .config.minmax = { PWM_RANGE_ZERO, PWM_RANGE_MAX }, 0 },
{ "max_check", VAR_UINT16 | MASTER_VALUE, &masterConfig.rxConfig.maxcheck, .config.minmax = { PWM_RANGE_ZERO, PWM_RANGE_MAX }, 0 },

View file

@ -25,6 +25,8 @@
#define SERIAL_RX
#define USE_CLI
#define ASYNC_GYRO_PROCESSING
#if (FLASH_SIZE <= 64)
#define SKIP_TASK_STATISTICS
#define SKIP_CLI_COMMAND_HELP