当前位置: 首页 > news >正文

福建工程建设网站网站建设亼仐团

福建工程建设网站,网站建设亼仐团,龙岩建设局升降机网站,二级网站免费建BetaFlight统一硬件配置文件研读之set命令 1. 源由2. 代码分析3. 实例分析4. 配置情况4.1 set4.2 set parameter_name4.3 set parameter_name value 5. 参考资料 统一硬件配置文件的设计是一种非常好的设计模式#xff0c;可以将硬件和软件的工作进行解耦。 1. 源由 cli命令… BetaFlight统一硬件配置文件研读之set命令 1. 源由2. 代码分析3. 实例分析4. 配置情况4.1 set4.2 set parameter_name4.3 set parameter_name value 5. 参考资料 统一硬件配置文件的设计是一种非常好的设计模式可以将硬件和软件的工作进行解耦。 1. 源由 cli命令中set是对BetaFlight系统内部参量进行变量赋值的主要命令主要可供设置的参数详见下面列表。 const clivalue_t valueTable[] { // PG_GYRO_CONFIG{ PARAM_NAME_GYRO_HARDWARE_LPF, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO_HARDWARE_LPF }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_hardware_lpf) },#if defined(USE_GYRO_SPI_ICM20649){ gyro_high_range, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_high_fsr) }, #endif{ PARAM_NAME_GYRO_LPF1_TYPE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO_LPF_TYPE }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf1_type) },{ PARAM_NAME_GYRO_LPF1_STATIC_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf1_static_hz) },{ PARAM_NAME_GYRO_LPF2_TYPE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO_LPF_TYPE }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf2_type) },{ PARAM_NAME_GYRO_LPF2_STATIC_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf2_static_hz) },{ gyro_notch1_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_soft_notch_hz_1) },{ gyro_notch1_cutoff, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_soft_notch_cutoff_1) },{ gyro_notch2_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_soft_notch_hz_2) },{ gyro_notch2_cutoff, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_soft_notch_cutoff_2) },{ gyro_calib_duration, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 50, 3000 }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyroCalibrationDuration) },{ gyro_calib_noise_limit, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyroMovementCalibrationThreshold) },{ gyro_offset_yaw, VAR_INT16 | MASTER_VALUE, .config.minmax { -1000, 1000 }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_offset_yaw) }, #ifdef USE_GYRO_OVERFLOW_CHECK{ gyro_overflow_detect, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO_OVERFLOW_CHECK }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, checkOverflow) }, #endif #ifdef USE_YAW_SPIN_RECOVERY{ yaw_spin_recovery, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON_AUTO }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, yaw_spin_recovery) },{ yaw_spin_threshold, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { YAW_SPIN_RECOVERY_THRESHOLD_MIN, YAW_SPIN_RECOVERY_THRESHOLD_MAX }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, yaw_spin_threshold) }, #endif#ifdef USE_MULTI_GYRO{ PARAM_NAME_GYRO_TO_USE, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_to_use) }, #endif #if defined(USE_DYN_NOTCH_FILTER){ PARAM_NAME_DYN_NOTCH_COUNT, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, DYN_NOTCH_COUNT_MAX }, PG_DYN_NOTCH_CONFIG, offsetof(dynNotchConfig_t, dyn_notch_count) },{ PARAM_NAME_DYN_NOTCH_Q, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1, 1000 }, PG_DYN_NOTCH_CONFIG, offsetof(dynNotchConfig_t, dyn_notch_q) },{ PARAM_NAME_DYN_NOTCH_MIN_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 20, 250 }, PG_DYN_NOTCH_CONFIG, offsetof(dynNotchConfig_t, dyn_notch_min_hz) },{ PARAM_NAME_DYN_NOTCH_MAX_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 200, 1000 }, PG_DYN_NOTCH_CONFIG, offsetof(dynNotchConfig_t, dyn_notch_max_hz) }, #endif #ifdef USE_DYN_LPF{ gyro_lpf1_dyn_min_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, DYN_LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf1_dyn_min_hz) },{ gyro_lpf1_dyn_max_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, DYN_LPF_MAX_HZ }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf1_dyn_max_hz) },{ gyro_lpf1_dyn_expo, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 10 }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_lpf1_dyn_expo) }, #endif{ gyro_filter_debug_axis, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GYRO_FILTER_DEBUG }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_filter_debug_axis) },// PG_ACCELEROMETER_CONFIG #if defined(USE_ACC){ PARAM_NAME_ACC_HARDWARE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ACC_HARDWARE }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, acc_hardware) }, #if defined(USE_GYRO_SPI_ICM20649){ acc_high_range, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, acc_high_fsr) }, #endif{ PARAM_NAME_ACC_LPF_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, acc_lpf_hz) },{ acc_trim_pitch, VAR_INT16 | MASTER_VALUE, .config.minmax { -300, 300 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accelerometerTrims.values.pitch) },{ acc_trim_roll, VAR_INT16 | MASTER_VALUE, .config.minmax { -300, 300 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accelerometerTrims.values.roll) },// 4 elements are output for the ACC calibration - The 3 axis values and the 4th representing whether calibration has been performed{ acc_calibration, VAR_INT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length 4, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accZero.raw) }, #endif// PG_COMPASS_CONFIG #ifdef USE_MAG{ align_mag, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ALIGNMENT }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_alignment) },{ mag_align_roll, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_customAlignment.roll) },{ mag_align_pitch, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_customAlignment.pitch) },{ mag_align_yaw, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_customAlignment.yaw) },{ mag_bustype, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BUS_TYPE }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_busType) },{ mag_i2c_device, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2CDEV_COUNT }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_i2c_device) },{ mag_i2c_address, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2C_ADDR7_MAX }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_i2c_address) },{ mag_spi_device, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_spi_device) },{ PARAM_NAME_MAG_HARDWARE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_MAG_HARDWARE }, PG_COMPASS_CONFIG, offsetof(compassConfig_t, mag_hardware) },{ mag_calibration, VAR_INT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length XYZ_AXIS_COUNT, PG_COMPASS_CONFIG, offsetof(compassConfig_t, magZero.raw) }, #endif// PG_BAROMETER_CONFIG #ifdef USE_BARO{ baro_bustype, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BUS_TYPE }, PG_BAROMETER_CONFIG, offsetof(barometerConfig_t, baro_busType) },{ baro_spi_device, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, 5 }, PG_BAROMETER_CONFIG, offsetof(barometerConfig_t, baro_spi_device) },{ baro_i2c_device, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, 5 }, PG_BAROMETER_CONFIG, offsetof(barometerConfig_t, baro_i2c_device) },{ baro_i2c_address, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2C_ADDR7_MAX }, PG_BAROMETER_CONFIG, offsetof(barometerConfig_t, baro_i2c_address) },{ PARAM_NAME_BARO_HARDWARE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BARO_HARDWARE }, PG_BAROMETER_CONFIG, offsetof(barometerConfig_t, baro_hardware) }, #endif// PG_RX_CONFIG{ mid_rc, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1200, 1700 }, PG_RX_CONFIG, offsetof(rxConfig_t, midrc) },{ min_check, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, mincheck) },{ max_check, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, maxcheck) },{ rssi_channel, VAR_INT8 | MASTER_VALUE, .config.minmax { 0, MAX_SUPPORTED_RC_CHANNEL_COUNT }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_channel) },{ rssi_src_frame_errors, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_src_frame_errors) },{ rssi_scale, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { RSSI_SCALE_MIN, RSSI_SCALE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_scale) },{ rssi_offset, VAR_INT8 | MASTER_VALUE, .config.minmax { -100, 100 }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_offset) },{ rssi_invert, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_invert) },{ rssi_src_frame_lpf_period, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_src_frame_lpf_period) },{ rssi_smoothing, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rssi_smoothing) },#ifdef USE_RC_SMOOTHING_FILTER{ PARAM_NAME_RC_SMOOTHING, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_mode) },{ PARAM_NAME_RC_SMOOTHING_AUTO_FACTOR, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { RC_SMOOTHING_AUTO_FACTOR_MIN, RC_SMOOTHING_AUTO_FACTOR_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_auto_factor_rpy) },{ PARAM_NAME_RC_SMOOTHING_AUTO_FACTOR_THROTTLE, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { RC_SMOOTHING_AUTO_FACTOR_MIN, RC_SMOOTHING_AUTO_FACTOR_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_auto_factor_throttle) },{ PARAM_NAME_RC_SMOOTHING_SETPOINT_CUTOFF, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_setpoint_cutoff) },{ PARAM_NAME_RC_SMOOTHING_FEEDFORWARD_CUTOFF, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_feedforward_cutoff) },{ PARAM_NAME_RC_SMOOTHING_THROTTLE_CUTOFF, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_throttle_cutoff) },{ PARAM_NAME_RC_SMOOTHING_DEBUG_AXIS, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RC_SMOOTHING_DEBUG }, PG_RX_CONFIG, offsetof(rxConfig_t, rc_smoothing_debug_axis) }, #endif // USE_RC_SMOOTHING_FILTER{ fpv_mix_degrees, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 90 }, PG_RX_CONFIG, offsetof(rxConfig_t, fpvCamAngleDegrees) },{ max_aux_channels, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, MAX_AUX_CHANNEL_COUNT }, PG_RX_CONFIG, offsetof(rxConfig_t, max_aux_channel) }, #ifdef USE_SERIALRX{ PARAM_NAME_SERIAL_RX_PROVIDER, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_SERIAL_RX }, PG_RX_CONFIG, offsetof(rxConfig_t, serialrx_provider) },{ serialrx_inverted, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, serialrx_inverted) }, #endif #ifdef USE_SPEKTRUM_BIND{ spektrum_sat_bind, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { SPEKTRUM_SAT_BIND_DISABLED, SPEKTRUM_SAT_BIND_MAX}, PG_RX_CONFIG, offsetof(rxConfig_t, spektrum_sat_bind) },{ spektrum_sat_bind_autoreset, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, spektrum_sat_bind_autoreset) }, #endif #ifdef USE_SERIALRX_SRXL2{ srxl2_unit_id, VAR_UINT8 | MASTER_VALUE, .config.minmax { 0, 0xf }, PG_RX_CONFIG, offsetof(rxConfig_t, srxl2_unit_id) },{ srxl2_baud_fast, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, srxl2_baud_fast) }, #endif #if defined(USE_SERIALRX_SBUS){ sbus_baud_fast, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, sbus_baud_fast) }, #endif #if defined(USE_CRSF_V3){ crsf_use_negotiated_baud, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, crsf_use_negotiated_baud) }, #endif{ airmode_start_throttle_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_RX_CONFIG, offsetof(rxConfig_t, airModeActivateThreshold) },{ rx_min_usec, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rx_min_usec) },{ rx_max_usec, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_RX_CONFIG, offsetof(rxConfig_t, rx_max_usec) },{ serialrx_halfduplex, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CONFIG, offsetof(rxConfig_t, halfDuplex) }, #if defined(USE_RX_MSP_OVERRIDE){ msp_override_channels_mask, VAR_UINT32 | MASTER_VALUE, .config.u32Max (1 MAX_SUPPORTED_RC_CHANNEL_COUNT) - 1, PG_RX_CONFIG, offsetof(rxConfig_t, msp_override_channels_mask)}, #endif #ifdef USE_RX_SPI{ rx_spi_protocol, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RX_SPI }, PG_RX_SPI_CONFIG, offsetof(rxSpiConfig_t, rx_spi_protocol) },{ rx_spi_bus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_RX_SPI_CONFIG, offsetof(rxSpiConfig_t, spibus) },{ rx_spi_led_inversion, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_SPI_CONFIG, offsetof(rxSpiConfig_t, ledInversion) }, #endif// PG_ADC_CONFIG #if defined(USE_ADC){ adc_device, VAR_INT8 | HARDWARE_VALUE, .config.minmax { 0, ADCDEV_COUNT }, PG_ADC_CONFIG, offsetof(adcConfig_t, device) },{ adc_vrefint_calibration, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 2000 }, PG_ADC_CONFIG, offsetof(adcConfig_t, vrefIntCalibration) },{ adc_tempsensor_calibration30, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 2000 }, PG_ADC_CONFIG, offsetof(adcConfig_t, tempSensorCalibration1) },{ adc_tempsensor_calibration110, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 2000 }, PG_ADC_CONFIG, offsetof(adcConfig_t, tempSensorCalibration2) }, #endif// PG_PWM_CONFIG #if defined(USE_RX_PWM){ input_filtering_mode, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PWM_CONFIG, offsetof(pwmConfig_t, inputFilteringMode) }, #endif// PG_BLACKBOX_CONFIG #ifdef USE_BLACKBOX{ blackbox_sample_rate, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BLACKBOX_SAMPLE_RATE }, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, sample_rate) },{ blackbox_device, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BLACKBOX_DEVICE }, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, device) },{ blackbox_disable_pids, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_PID, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) },{ blackbox_disable_rc, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_RC_COMMANDS, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) },{ blackbox_disable_setpoint, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_SETPOINT, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) },{ blackbox_disable_bat, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_BATTERY, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #ifdef USE_MAG{ blackbox_disable_mag, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_MAG, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #endif #if defined(USE_BARO) || defined(USE_RANGEFINDER){ blackbox_disable_alt, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_ALTITUDE, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #endif{ blackbox_disable_rssi, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_RSSI, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) },{ blackbox_disable_gyro, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_GYRO, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #if defined(USE_ACC){ blackbox_disable_acc, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_ACC, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #endif{ blackbox_disable_debug, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_DEBUG_LOG, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) },{ blackbox_disable_motors, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_MOTOR, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #ifdef USE_GPS{ blackbox_disable_gps, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos FLIGHT_LOG_FIELD_SELECT_GPS, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, fields_disabled_mask) }, #endif{ blackbox_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BLACKBOX_MODE }, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, mode) },{ blackbox_high_resolution, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BLACKBOX_CONFIG, offsetof(blackboxConfig_t, high_resolution) }, #endif// PG_MOTOR_CONFIG{ min_throttle, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, minthrottle) },{ max_throttle, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, maxthrottle) },{ min_command, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, mincommand) }, #ifdef USE_DSHOT{ PARAM_NAME_DSHOT_IDLE_VALUE, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 2000 }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, digitalIdleOffsetValue) }, #ifdef USE_DSHOT_DMAR{ dshot_burst, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON_AUTO }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useBurstDshot) }, #endif #ifdef USE_DSHOT_TELEMETRY{ PARAM_NAME_DSHOT_BIDIR, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useDshotTelemetry) },{ dshot_edt, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useDshotEdt) }, #endif #ifdef USE_DSHOT_BITBANG{ dshot_bitbang, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON_AUTO }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useDshotBitbang) },{ dshot_bitbang_timer, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_DSHOT_BITBANGED_TIMER }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useDshotBitbangedTimer) }, #endif #endif{ PARAM_NAME_USE_UNSYNCED_PWM, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.useUnsyncedPwm) },{ PARAM_NAME_MOTOR_PWM_PROTOCOL, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_MOTOR_PWM_PROTOCOL }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.motorPwmProtocol) },{ PARAM_NAME_MOTOR_PWM_RATE, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 200, 32000 }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.motorPwmRate) },{ motor_pwm_inversion, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.motorPwmInversion) },{ PARAM_NAME_MOTOR_POLES, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 4, UINT8_MAX }, PG_MOTOR_CONFIG, offsetof(motorConfig_t, motorPoleCount) },{ motor_output_reordering, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length MAX_SUPPORTED_MOTORS, PG_MOTOR_CONFIG, offsetof(motorConfig_t, dev.motorOutputReordering)},// PG_THROTTLE_CORRECTION_CONFIG{ thr_corr_value, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 150 }, PG_THROTTLE_CORRECTION_CONFIG, offsetof(throttleCorrectionConfig_t, throttle_correction_value) },{ thr_corr_angle, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1, 900 }, PG_THROTTLE_CORRECTION_CONFIG, offsetof(throttleCorrectionConfig_t, throttle_correction_angle) },// PG_FAILSAFE_CONFIG{ failsafe_delay, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { PERIOD_RXDATA_RECOVERY / MILLIS_PER_TENTH_SECOND, 200 }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_delay) },{ failsafe_off_delay, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_off_delay) },{ failsafe_throttle, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_throttle) },{ failsafe_switch_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_FAILSAFE_SWITCH_MODE }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_switch_mode) },{ failsafe_throttle_low_delay,VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 300 }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_throttle_low_delay) },{ failsafe_procedure, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_FAILSAFE }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_procedure) },{ failsafe_recovery_delay, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_recovery_delay) },{ failsafe_stick_threshold, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 50 }, PG_FAILSAFE_CONFIG, offsetof(failsafeConfig_t, failsafe_stick_threshold) },// PG_BOARDALIGNMENT_CONFIG{ align_board_roll, VAR_INT16 | MASTER_VALUE, .config.minmax { -180, 360 }, PG_BOARD_ALIGNMENT, offsetof(boardAlignment_t, rollDegrees) },{ align_board_pitch, VAR_INT16 | MASTER_VALUE, .config.minmax { -180, 360 }, PG_BOARD_ALIGNMENT, offsetof(boardAlignment_t, pitchDegrees) },{ align_board_yaw, VAR_INT16 | MASTER_VALUE, .config.minmax { -180, 360 }, PG_BOARD_ALIGNMENT, offsetof(boardAlignment_t, yawDegrees) },// PG_GIMBAL_CONFIG #ifdef USE_SERVOS{ gimbal_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GIMBAL_MODE }, PG_GIMBAL_CONFIG, offsetof(gimbalConfig_t, mode) }, #endif// PG_BATTERY_CONFIG{ bat_capacity, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 20000 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, batteryCapacity) },{ vbat_max_cell_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_CELL_VOTAGE_RANGE_MIN, VBAT_CELL_VOTAGE_RANGE_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatmaxcellvoltage) },{ vbat_full_cell_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_CELL_VOTAGE_RANGE_MIN, VBAT_CELL_VOTAGE_RANGE_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatfullcellvoltage) },{ vbat_min_cell_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_CELL_VOTAGE_RANGE_MIN, VBAT_CELL_VOTAGE_RANGE_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatmincellvoltage) },{ vbat_warning_cell_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_CELL_VOTAGE_RANGE_MIN, VBAT_CELL_VOTAGE_RANGE_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatwarningcellvoltage) },{ vbat_hysteresis, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 250 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbathysteresis) },{ current_meter, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_CURRENT_METER }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, currentMeterSource) },{ battery_meter, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_VOLTAGE_METER }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, voltageMeterSource) },{ vbat_detect_cell_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 2000 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatnotpresentcellvoltage) },{ use_vbat_alerts, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, useVBatAlerts) },{ use_cbat_alerts, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, useConsumptionAlerts) },{ cbat_alert_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, consumptionWarningPercentage) },{ vbat_cutoff_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, lvcPercentage) },{ force_battery_cell_count, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 24 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, forceBatteryCellCount) },{ vbat_display_lpf_period, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, UINT8_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatDisplayLpfPeriod) }, #if defined(USE_BATTERY_VOLTAGE_SAG_COMPENSATION){ vbat_sag_lpf_period, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, UINT8_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatSagLpfPeriod) }, #endif{ ibat_lpf_period, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, ibatLpfPeriod) },{ vbat_duration_for_warning, VAR_UINT8 | MASTER_VALUE, .config.minmax { 0, 150 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatDurationForWarning) },{ vbat_duration_for_critical, VAR_UINT8 | MASTER_VALUE, .config.minmax { 0, 150 }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, vbatDurationForCritical) },// PG_VOLTAGE_SENSOR_ADC_CONFIG{ vbat_scale, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { VBAT_SCALE_MIN, VBAT_SCALE_MAX }, PG_VOLTAGE_SENSOR_ADC_CONFIG, offsetof(voltageSensorADCConfig_t, vbatscale) },{ vbat_divider, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_DIVIDER_MIN, VBAT_DIVIDER_MAX }, PG_VOLTAGE_SENSOR_ADC_CONFIG, offsetof(voltageSensorADCConfig_t, vbatresdivval) },{ vbat_multiplier, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { VBAT_MULTIPLIER_MIN, VBAT_MULTIPLIER_MAX }, PG_VOLTAGE_SENSOR_ADC_CONFIG, offsetof(voltageSensorADCConfig_t, vbatresdivmultiplier) },// PG_CURRENT_SENSOR_ADC_CONFIG{ ibata_scale, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -16000, 16000 }, PG_CURRENT_SENSOR_ADC_CONFIG, offsetof(currentSensorADCConfig_t, scale) },{ ibata_offset, VAR_INT16 | MASTER_VALUE, .config.minmax { -32000, 32000 }, PG_CURRENT_SENSOR_ADC_CONFIG, offsetof(currentSensorADCConfig_t, offset) }, // PG_CURRENT_SENSOR_ADC_CONFIG #ifdef USE_VIRTUAL_CURRENT_METER{ ibatv_scale, VAR_INT16 | MASTER_VALUE, .config.minmax { -16000, 16000 }, PG_CURRENT_SENSOR_VIRTUAL_CONFIG, offsetof(currentSensorVirtualConfig_t, scale) },{ ibatv_offset, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 16000 }, PG_CURRENT_SENSOR_VIRTUAL_CONFIG, offsetof(currentSensorVirtualConfig_t, offset) }, #endif #ifdef USE_BATTERY_CONTINUE{ battery_continue, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BATTERY_CONFIG, offsetof(batteryConfig_t, isBatteryContinueEnabled) }, #endif#ifdef USE_BEEPER // PG_BEEPER_DEV_CONFIG{ beeper_inversion, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BEEPER_DEV_CONFIG, offsetof(beeperDevConfig_t, isInverted) },{ beeper_od, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_BEEPER_DEV_CONFIG, offsetof(beeperDevConfig_t, isOpenDrain) },{ beeper_frequency, VAR_INT16 | HARDWARE_VALUE, .config.minmax { 0, 16000 }, PG_BEEPER_DEV_CONFIG, offsetof(beeperDevConfig_t, frequency) },// PG_BEEPER_CONFIG #ifdef USE_DSHOT{ beeper_dshot_beacon_tone, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned {1, DSHOT_CMD_BEACON5 }, PG_BEEPER_CONFIG, offsetof(beeperConfig_t, dshotBeaconTone) }, #endif #endif // USE_BEEPER// PG_MIXER_CONFIG{ yaw_motors_reversed, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, yaw_motors_reversed) },{ mixer_type, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_MIXER_TYPE }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, mixer_type) },{ crashflip_motor_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, crashflip_motor_percent) },{ crashflip_expo, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_MIXER_CONFIG, offsetof(mixerConfig_t, crashflip_expo) },// PG_MOTOR_3D_CONFIG{ 3d_deadband_low, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_RANGE_MIDDLE }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_low) },{ 3d_deadband_high, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_RANGE_MIDDLE, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_high) },{ 3d_neutral, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, neutral3d) },{ 3d_deadband_throttle, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1, 100 }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_throttle) },{ 3d_limit_low, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_RANGE_MIDDLE }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, limit3d_low) },{ 3d_limit_high, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_RANGE_MIDDLE, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, limit3d_high) },{ 3d_switched_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, switched_mode3d) },// PG_SERVO_CONFIG #ifdef USE_SERVOS{ servo_center_pulse, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_SERVO_CONFIG, offsetof(servoConfig_t, dev.servoCenterPulse) },{ servo_pwm_rate, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 50, 498 }, PG_SERVO_CONFIG, offsetof(servoConfig_t, dev.servoPwmRate) },{ servo_lowpass_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 400}, PG_SERVO_CONFIG, offsetof(servoConfig_t, servo_lowpass_freq) },{ tri_unarmed_servo, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SERVO_CONFIG, offsetof(servoConfig_t, tri_unarmed_servo) },{ channel_forwarding_start, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { AUX1, MAX_SUPPORTED_RC_CHANNEL_COUNT }, PG_SERVO_CONFIG, offsetof(servoConfig_t, channelForwardingStartChannel) }, #endif// PG_CONTROLRATE_PROFILES #ifdef USE_PROFILE_NAMES{ rateprofile_name, VAR_UINT8 | PROFILE_RATE_VALUE | MODE_STRING, .config.string { 1, MAX_RATE_PROFILE_NAME_LENGTH, STRING_FLAGS_NONE }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, profileName) }, #endif{ PARAM_NAME_THR_MID, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, thrMid8) },{ PARAM_NAME_THR_EXPO, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, thrExpo8) },{ PARAM_NAME_RATES_TYPE, VAR_UINT8 | PROFILE_RATE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RATES_TYPE }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates_type) },{ quickrates_rc_expo, VAR_UINT8 | PROFILE_RATE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, quickRatesRcExpo) },{ roll_rc_rate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 1, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_ROLL]) },{ pitch_rc_rate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 1, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_PITCH]) },{ yaw_rc_rate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 1, CONTROL_RATE_CONFIG_RC_RATES_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcRates[FD_YAW]) },{ roll_expo, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RC_EXPO_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcExpo[FD_ROLL]) },{ pitch_expo, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RC_EXPO_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcExpo[FD_PITCH]) },{ yaw_expo, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RC_EXPO_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rcExpo[FD_YAW]) },{ roll_srate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RATE_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates[FD_ROLL]) },{ pitch_srate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RATE_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates[FD_PITCH]) },{ yaw_srate, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 0, CONTROL_RATE_CONFIG_RATE_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rates[FD_YAW]) },{ PARAM_NAME_THROTTLE_LIMIT_TYPE, VAR_UINT8 | PROFILE_RATE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_THROTTLE_LIMIT_TYPE }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, throttle_limit_type) },{ PARAM_NAME_THROTTLE_LIMIT_PERCENT, VAR_UINT8 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { 25, 100 }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, throttle_limit_percent) },{ roll_rate_limit, VAR_UINT16 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { CONTROL_RATE_CONFIG_RATE_LIMIT_MIN, CONTROL_RATE_CONFIG_RATE_LIMIT_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rate_limit[FD_ROLL]) },{ pitch_rate_limit, VAR_UINT16 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { CONTROL_RATE_CONFIG_RATE_LIMIT_MIN, CONTROL_RATE_CONFIG_RATE_LIMIT_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rate_limit[FD_PITCH]) },{ yaw_rate_limit, VAR_UINT16 | PROFILE_RATE_VALUE, .config.minmaxUnsigned { CONTROL_RATE_CONFIG_RATE_LIMIT_MIN, CONTROL_RATE_CONFIG_RATE_LIMIT_MAX }, PG_CONTROL_RATE_PROFILES, offsetof(controlRateConfig_t, rate_limit[FD_YAW]) },// PG_SERIAL_CONFIG{ reboot_character, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 48, 126 }, PG_SERIAL_CONFIG, offsetof(serialConfig_t, reboot_character) },{ serial_update_rate_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 100, 2000 }, PG_SERIAL_CONFIG, offsetof(serialConfig_t, serial_update_rate_hz) },// PG_IMU_CONFIG{ imu_dcm_kp, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 32000 }, PG_IMU_CONFIG, offsetof(imuConfig_t, dcm_kp) },{ imu_dcm_ki, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 32000 }, PG_IMU_CONFIG, offsetof(imuConfig_t, dcm_ki) },{ small_angle, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 180 }, PG_IMU_CONFIG, offsetof(imuConfig_t, small_angle) },{ imu_process_denom, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, 4 }, PG_IMU_CONFIG, offsetof(imuConfig_t, imu_process_denom) },// PG_ARMING_CONFIG{ auto_disarm_delay, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 60 }, PG_ARMING_CONFIG, offsetof(armingConfig_t, auto_disarm_delay) },{ PARAM_NAME_GYRO_CAL_ON_FIRST_ARM, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_ARMING_CONFIG, offsetof(armingConfig_t, gyro_cal_on_first_arm) },// PG_GPS_CONFIG #ifdef USE_GPS{ PARAM_NAME_GPS_PROVIDER, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_PROVIDER }, PG_GPS_CONFIG, offsetof(gpsConfig_t, provider) },{ PARAM_NAME_GPS_SBAS_MODE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_SBAS_MODE }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbasMode) },{ PARAM_NAME_GPS_AUTO_CONFIG, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoConfig) },{ PARAM_NAME_GPS_AUTO_BAUD, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoBaud) },{ PARAM_NAME_GPS_UBLOX_ACQUIRE_MODEL, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_UBLOX_MODELS }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_acquire_model) },{ PARAM_NAME_GPS_UBLOX_FLIGHT_MODEL, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_UBLOX_MODELS }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_flight_model) },{ PARAM_NAME_GPS_UBLOX_USE_GALILEO, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_use_galileo) },{ PARAM_NAME_GPS_UBLOX_FULL_POWER, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_full_power) },{ PARAM_NAME_GPS_SET_HOME_POINT_ONCE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_set_home_point_once) },{ PARAM_NAME_GPS_USE_3D_SPEED, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_use_3d_speed) },{ PARAM_NAME_GPS_SBAS_INTEGRITY, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbas_integrity) },#ifdef USE_GPS_RESCUE// PG_GPS_RESCUE{ PARAM_NAME_GPS_RESCUE_MIN_START_DIST, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 20, 1000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, minRescueDth) },{ PARAM_NAME_GPS_RESCUE_ALT_MODE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_RESCUE_ALT_MODE }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, altitudeMode) },{ PARAM_NAME_GPS_RESCUE_INITIAL_CLIMB, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, rescueAltitudeBufferM) },{ PARAM_NAME_GPS_RESCUE_ASCEND_RATE, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 50, 2500 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, ascendRate) },{ PARAM_NAME_GPS_RESCUE_RETURN_ALT, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 2, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, initialAltitudeM) },{ PARAM_NAME_GPS_RESCUE_RETURN_SPEED, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 3000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, rescueGroundspeed) },{ PARAM_NAME_GPS_RESCUE_MAX_RESCUE_ANGLE, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 80 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, maxRescueAngle) },{ PARAM_NAME_GPS_RESCUE_ROLL_MIX, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 250 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, rollMix) },{ PARAM_NAME_GPS_RESCUE_PITCH_CUTOFF, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 10, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, pitchCutoffHz) },{ PARAM_NAME_GPS_RESCUE_DESCENT_DIST, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 5, 500 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, descentDistanceM) },{ PARAM_NAME_GPS_RESCUE_DESCEND_RATE, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 25, 500 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, descendRate) },{ PARAM_NAME_GPS_RESCUE_LANDING_ALT, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, 15 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, targetLandingAltitudeM) },{ PARAM_NAME_GPS_RESCUE_DISARM_THRESHOLD, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, 250 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, disarmThreshold) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_MIN, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1000, 2000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleMin) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_MAX, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1000, 2000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleMax) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_HOVER, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1000, 2000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleHover) },{ PARAM_NAME_GPS_RESCUE_SANITY_CHECKS, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_GPS_RESCUE_SANITY_CHECK }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, sanityChecks) },{ PARAM_NAME_GPS_RESCUE_MIN_SATS, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 5, 50 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, minSats) },{ PARAM_NAME_GPS_RESCUE_ALLOW_ARMING_WITHOUT_FIX, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, allowArmingWithoutFix) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_P, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleP) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_I, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleI) },{ PARAM_NAME_GPS_RESCUE_THROTTLE_D, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, throttleD) },{ PARAM_NAME_GPS_RESCUE_VELOCITY_P, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, velP) },{ PARAM_NAME_GPS_RESCUE_VELOCITY_I, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, velI) },{ PARAM_NAME_GPS_RESCUE_VELOCITY_D, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, velD) },{ PARAM_NAME_GPS_RESCUE_YAW_P, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, yawP) },#ifdef USE_MAG{ PARAM_NAME_GPS_RESCUE_USE_MAG, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, useMag) }, #endif // USE_MAG #endif // USE_GPS_RESCUE #endif // USE_GPS{ PARAM_NAME_DEADBAND, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 32 }, PG_RC_CONTROLS_CONFIG, offsetof(rcControlsConfig_t, deadband) },{ PARAM_NAME_YAW_DEADBAND, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_RC_CONTROLS_CONFIG, offsetof(rcControlsConfig_t, yaw_deadband) },{ yaw_control_reversed, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RC_CONTROLS_CONFIG, offsetof(rcControlsConfig_t, yaw_control_reversed) },// PG_PID_CONFIG{ PARAM_NAME_PID_PROCESS_DENOM, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, MAX_PID_PROCESS_DENOM }, PG_PID_CONFIG, offsetof(pidConfig_t, pid_process_denom) }, #ifdef USE_RUNAWAY_TAKEOFF{ runaway_takeoff_prevention, VAR_UINT8 | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_CONFIG, offsetof(pidConfig_t, runaway_takeoff_prevention) }, // enables/disables runaway takeoff prevention{ runaway_takeoff_deactivate_delay, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 100, 1000 }, PG_PID_CONFIG, offsetof(pidConfig_t, runaway_takeoff_deactivate_delay) }, // deactivate time in ms{ runaway_takeoff_deactivate_throttle_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_CONFIG, offsetof(pidConfig_t, runaway_takeoff_deactivate_throttle) }, // minimum throttle percentage during deactivation phase #endif// PG_PID_PROFILE #ifdef USE_PROFILE_NAMES{ profile_name, VAR_UINT8 | PROFILE_VALUE | MODE_STRING, .config.string { 1, MAX_PROFILE_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PID_PROFILE, offsetof(pidProfile_t, profileName) }, #endif #ifdef USE_DYN_LPF{ dterm_lpf1_dyn_min_hz, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, DYN_LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf1_dyn_min_hz) },{ dterm_lpf1_dyn_max_hz, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, DYN_LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf1_dyn_max_hz) },{ dterm_lpf1_dyn_expo, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 10 }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf1_dyn_expo) }, #endif{ PARAM_NAME_DTERM_LPF1_TYPE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_DTERM_LPF_TYPE }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf1_type) },{ PARAM_NAME_DTERM_LPF1_STATIC_HZ, VAR_INT16 | PROFILE_VALUE, .config.minmax { 0, LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf1_static_hz) },{ PARAM_NAME_DTERM_LPF2_TYPE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_DTERM_LPF_TYPE }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf2_type) },{ PARAM_NAME_DTERM_LPF2_STATIC_HZ, VAR_INT16 | PROFILE_VALUE, .config.minmax { 0, LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_lpf2_static_hz) },{ PARAM_NAME_DTERM_NOTCH_HZ, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_notch_hz) },{ PARAM_NAME_DTERM_NOTCH_CUTOFF, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, LPF_MAX_HZ }, PG_PID_PROFILE, offsetof(pidProfile_t, dterm_notch_cutoff) }, #if defined(USE_BATTERY_VOLTAGE_SAG_COMPENSATION){ PARAM_NAME_VBAT_SAG_COMPENSATION, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 150 }, PG_PID_PROFILE, offsetof(pidProfile_t, vbat_sag_compensation) }, #endif{ PARAM_NAME_PID_AT_MIN_THROTTLE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, pidAtMinThrottle) },{ PARAM_NAME_ANTI_GRAVITY_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { ITERM_ACCELERATOR_GAIN_OFF, ITERM_ACCELERATOR_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, anti_gravity_gain) },{ PARAM_NAME_ANTI_GRAVITY_CUTOFF_HZ, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 2, 50 }, PG_PID_PROFILE, offsetof(pidProfile_t, anti_gravity_cutoff_hz) },{ PARAM_NAME_ANTI_GRAVITY_P_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, anti_gravity_p_gain) },{ PARAM_NAME_ACC_LIMIT_YAW, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_PID_PROFILE, offsetof(pidProfile_t, yawRateAccelLimit) },{ PARAM_NAME_ACC_LIMIT, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_PID_PROFILE, offsetof(pidProfile_t, rateAccelLimit) },{ crash_dthreshold, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 2000 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_dthreshold) },{ crash_gthreshold, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 100, 2000 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_gthreshold) },{ crash_setpoint_threshold, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 50, 2000 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_setpoint_threshold) },{ crash_time, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 100, 5000 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_time) },{ crash_delay, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_delay) },{ crash_recovery_angle, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 5, 30 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_recovery_angle) },{ crash_recovery_rate, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 50, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_recovery_rate) },{ crash_limit_yaw, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 1000 }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_limit_yaw) },{ crash_recovery, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_CRASH_RECOVERY }, PG_PID_PROFILE, offsetof(pidProfile_t, crash_recovery) },{ iterm_rotation, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, iterm_rotation) }, #if defined(USE_ITERM_RELAX){ PARAM_NAME_ITERM_RELAX, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ITERM_RELAX }, PG_PID_PROFILE, offsetof(pidProfile_t, iterm_relax) },{ PARAM_NAME_ITERM_RELAX_TYPE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ITERM_RELAX_TYPE }, PG_PID_PROFILE, offsetof(pidProfile_t, iterm_relax_type) },{ PARAM_NAME_ITERM_RELAX_CUTOFF, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 1, 50 }, PG_PID_PROFILE, offsetof(pidProfile_t, iterm_relax_cutoff) }, #endif{ PARAM_NAME_ITERM_WINDUP, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 30, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, itermWindupPointPercent) },{ iterm_limit, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_PID_PROFILE, offsetof(pidProfile_t, itermLimit) },{ PARAM_NAME_PIDSUM_LIMIT, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { PIDSUM_LIMIT_MIN, PIDSUM_LIMIT_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pidSumLimit) },{ PARAM_NAME_PIDSUM_LIMIT_YAW, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { PIDSUM_LIMIT_MIN, PIDSUM_LIMIT_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pidSumLimitYaw) },{ PARAM_NAME_YAW_LOWPASS_HZ, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_PID_PROFILE, offsetof(pidProfile_t, yaw_lowpass_hz) },#if defined(USE_THROTTLE_BOOST){ PARAM_NAME_THROTTLE_BOOST, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, throttle_boost) },{ PARAM_NAME_THROTTLE_BOOST_CUTOFF, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 5, 50 }, PG_PID_PROFILE, offsetof(pidProfile_t, throttle_boost_cutoff) }, #endif#ifdef USE_ACRO_TRAINER{ acro_trainer_angle_limit, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 80 }, PG_PID_PROFILE, offsetof(pidProfile_t, acro_trainer_angle_limit) },{ acro_trainer_lookahead_ms, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, acro_trainer_lookahead_ms) },{ acro_trainer_debug_axis, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ACRO_TRAINER_DEBUG }, PG_PID_PROFILE, offsetof(pidProfile_t, acro_trainer_debug_axis) },{ acro_trainer_gain, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 25, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, acro_trainer_gain) }, #endif // USE_ACRO_TRAINER{ p_pitch, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_PITCH].P) },{ i_pitch, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_PITCH].I) },{ d_pitch, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_PITCH].D) },{ f_pitch, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, F_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_PITCH].F) },{ p_roll, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_ROLL].P) },{ i_roll, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_ROLL].I) },{ d_roll, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_ROLL].D) },{ f_roll, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, F_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_ROLL].F) },{ p_yaw, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_YAW].P) },{ i_yaw, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_YAW].I) },{ d_yaw, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, PID_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_YAW].D) },{ f_yaw, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 0, F_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_YAW].F) },{ PARAM_NAME_ANGLE_P_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_LEVEL].P) },{ PARAM_NAME_ANGLE_FEEDFORWARD, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_LEVEL].F) },{ PARAM_NAME_ANGLE_FF_SMOOTHING_MS, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, angle_feedforward_smoothing_ms) },{ PARAM_NAME_ANGLE_LIMIT, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 85 }, PG_PID_PROFILE, offsetof(pidProfile_t, angle_limit) },{ PARAM_NAME_ANGLE_EARTH_REF, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, angle_earth_ref) },{ PARAM_NAME_HORIZON_LEVEL_STRENGTH, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_LEVEL].I) },{ PARAM_NAME_HORIZON_LIMIT_STICKS, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, pid[PID_LEVEL].D) },{ PARAM_NAME_HORIZON_LIMIT_DEGREES, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, horizon_limit_degrees) },{ PARAM_NAME_HORIZON_IGNORE_STICKS, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, horizon_ignore_sticks) },{ PARAM_NAME_HORIZON_DELAY_MS, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 5000 }, PG_PID_PROFILE, offsetof(pidProfile_t, horizon_delay_ms) }, #if defined(USE_ABSOLUTE_CONTROL){ PARAM_NAME_ABS_CONTROL_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 20 }, PG_PID_PROFILE, offsetof(pidProfile_t, abs_control_gain) },{ abs_control_limit, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, abs_control_limit) },{ abs_control_error_limit, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 1, 45 }, PG_PID_PROFILE, offsetof(pidProfile_t, abs_control_error_limit) },{ abs_control_cutoff, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 1, 45 }, PG_PID_PROFILE, offsetof(pidProfile_t, abs_control_cutoff) }, #endif#ifdef USE_INTEGRATED_YAW_CONTROL{ PARAM_NAME_USE_INTEGRATED_YAW, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, use_integrated_yaw) },{ integrated_yaw_relax, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, integrated_yaw_relax) }, #endif#ifdef USE_D_MIN{ d_min_roll, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, D_MIN_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, d_min[FD_ROLL]) },{ d_min_pitch, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, D_MIN_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, d_min[FD_PITCH]) },{ d_min_yaw, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, D_MIN_GAIN_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, d_min[FD_YAW]) },{ PARAM_NAME_D_MAX_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, d_min_gain) },{ PARAM_NAME_D_MAX_ADVANCE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, d_min_advance) }, #endif{ PARAM_NAME_MOTOR_OUTPUT_LIMIT, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { MOTOR_OUTPUT_LIMIT_PERCENT_MIN, MOTOR_OUTPUT_LIMIT_PERCENT_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, motor_output_limit) },{ auto_profile_cell_count, VAR_INT8 | PROFILE_VALUE, .config.minmax { AUTO_PROFILE_CELL_COUNT_CHANGE, MAX_AUTO_DETECT_CELL_COUNT }, PG_PID_PROFILE, offsetof(pidProfile_t, auto_profile_cell_count) },#ifdef USE_LAUNCH_CONTROL{ launch_control_mode, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_LAUNCH_CONTROL_MODE }, PG_PID_PROFILE, offsetof(pidProfile_t, launchControlMode) },{ launch_trigger_allow_reset, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, launchControlAllowTriggerReset) },{ launch_trigger_throttle_percent, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, LAUNCH_CONTROL_THROTTLE_TRIGGER_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, launchControlThrottlePercent) },{ launch_angle_limit, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 80 }, PG_PID_PROFILE, offsetof(pidProfile_t, launchControlAngleLimit) },{ launch_control_gain, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, launchControlGain) }, #endif#ifdef USE_THRUST_LINEARIZATION{ thrust_linear, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 150 }, PG_PID_PROFILE, offsetof(pidProfile_t, thrustLinearization) }, #endif#ifdef USE_AIRMODE_LPF{ transient_throttle_limit, VAR_UINT8 | PROFILE_VALUE, .config.minmax { 0, 30 }, PG_PID_PROFILE, offsetof(pidProfile_t, transient_throttle_limit) }, #endif#ifdef USE_FEEDFORWARD{ PARAM_NAME_FEEDFORWARD_TRANSITION, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_transition) },{ PARAM_NAME_FEEDFORWARD_AVERAGING, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_FEEDFORWARD_AVERAGING }, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_averaging) },{ PARAM_NAME_FEEDFORWARD_SMOOTH_FACTOR, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned {0, 95}, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_smooth_factor) },{ PARAM_NAME_FEEDFORWARD_JITTER_FACTOR, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned {0, 20}, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_jitter_factor) },{ PARAM_NAME_FEEDFORWARD_BOOST, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 50 }, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_boost) },{ PARAM_NAME_FEEDFORWARD_MAX_RATE_LIMIT, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned {0, 200}, PG_PID_PROFILE, offsetof(pidProfile_t, feedforward_max_rate_limit) }, #endif#ifdef USE_DYN_IDLE{ PARAM_NAME_DYN_IDLE_MIN_RPM, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 200 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_min_rpm) },{ PARAM_NAME_DYN_IDLE_P_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 1, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_p_gain) },{ PARAM_NAME_DYN_IDLE_I_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 1, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_i_gain) },{ PARAM_NAME_DYN_IDLE_D_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, 250 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_d_gain) },{ PARAM_NAME_DYN_IDLE_MAX_INCREASE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_max_increase) },{ PARAM_NAME_DYN_IDLE_START_INCREASE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 10, 255 }, PG_PID_PROFILE, offsetof(pidProfile_t, dyn_idle_start_increase) }, #endif{ level_race_mode, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, level_race_mode) },#ifdef USE_SIMPLIFIED_TUNING{ PARAM_NAME_SIMPLIFIED_PIDS_MODE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_SIMPLIFIED_TUNING_PIDS_MODE }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pids_mode) },{ PARAM_NAME_SIMPLIFIED_MASTER_MULTIPLIER, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_master_multiplier) },{ PARAM_NAME_SIMPLIFIED_I_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_i_gain) },{ PARAM_NAME_SIMPLIFIED_D_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_d_gain) },{ PARAM_NAME_SIMPLIFIED_PI_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pi_gain) },{ PARAM_NAME_SIMPLIFIED_DMAX_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dmin_ratio) },{ PARAM_NAME_SIMPLIFIED_FEEDFORWARD_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_feedforward_gain) },{ PARAM_NAME_SIMPLIFIED_PITCH_D_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_roll_pitch_ratio) },{ PARAM_NAME_SIMPLIFIED_PITCH_PI_GAIN, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_PIDS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_pitch_pi_gain) },{ PARAM_NAME_SIMPLIFIED_DTERM_FILTER, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dterm_filter) },{ PARAM_NAME_SIMPLIFIED_DTERM_FILTER_MULTIPLIER, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_FILTERS_MIN, SIMPLIFIED_TUNING_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, simplified_dterm_filter_multiplier) },{ PARAM_NAME_SIMPLIFIED_GYRO_FILTER, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, simplified_gyro_filter) },{ PARAM_NAME_SIMPLIFIED_GYRO_FILTER_MULTIPLIER, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { SIMPLIFIED_TUNING_FILTERS_MIN, SIMPLIFIED_TUNING_MAX }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, simplified_gyro_filter_multiplier) }, #endif #ifdef USE_TPA_MODE{ PARAM_NAME_TPA_MODE, VAR_UINT8 | PROFILE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_TPA_MODE }, PG_PID_PROFILE, offsetof(pidProfile_t, tpa_mode) }, #endif{ PARAM_NAME_TPA_RATE, VAR_UINT8 | PROFILE_VALUE, .config.minmaxUnsigned { 0, TPA_MAX}, PG_PID_PROFILE, offsetof(pidProfile_t, tpa_rate) },{ PARAM_NAME_TPA_BREAKPOINT, VAR_UINT16 | PROFILE_VALUE, .config.minmaxUnsigned { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_PID_PROFILE, offsetof(pidProfile_t, tpa_breakpoint) },// PG_TELEMETRY_CONFIG #ifdef USE_TELEMETRY{ tlm_inverted, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, telemetry_inverted) },{ tlm_halfduplex, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, halfDuplex) }, #if defined(USE_TELEMETRY_FRSKY_HUB) #if defined(USE_GPS){ frsky_default_lat, VAR_INT16 | MASTER_VALUE, .config.minmax { -9000, 9000 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, gpsNoFixLatitude) },{ frsky_default_long, VAR_INT16 | MASTER_VALUE, .config.minmax { -18000, 18000 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, gpsNoFixLongitude) },{ frsky_gps_format, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, FRSKY_FORMAT_NMEA }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, frsky_coordinate_format) },{ frsky_unit, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_UNIT }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, frsky_unit) }, #endif{ frsky_vfas_precision, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { FRSKY_VFAS_PRECISION_LOW, FRSKY_VFAS_PRECISION_HIGH }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, frsky_vfas_precision) }, #endif // USE_TELEMETRY_FRSKY_HUB{ hott_alarm_int, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 120 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, hottAlarmSoundInterval) },{ pid_in_tlm, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, pidValuesAsTelemetry) },{ report_cell_voltage, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, report_cell_voltage) }, #if defined(USE_TELEMETRY_IBUS){ ibus_sensor, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length IBUS_SENSOR_COUNT, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, flysky_sensors)}, #endif #ifdef USE_TELEMETRY_MAVLINK// Support for misusing the heading field in MAVlink to indicate mAh drawn for Connex Prosight OSD// Set to 10 to show a tenth of your capacity drawn.// Set to $size_of_battery to get a percentage of battery used.{ mavlink_mah_as_heading_divisor, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 30000 }, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, mavlink_mah_as_heading_divisor) }, #endif #ifdef USE_TELEMETRY_SENSORS_DISABLED_DETAILS{ telemetry_disabled_voltage, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_VOLTAGE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_current, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_CURRENT), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_fuel, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_FUEL), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_mode, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_MODE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_acc_x, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_ACC_X), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_acc_y, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_ACC_Y), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_acc_z, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_ACC_Z), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_pitch, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_PITCH), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_roll, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_ROLL), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_heading, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_HEADING), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_altitude, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_ALTITUDE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_vario, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_VARIO), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_lat_long, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_LAT_LONG), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_ground_speed, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_GROUND_SPEED), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_distance, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_DISTANCE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_esc_current, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(ESC_SENSOR_CURRENT), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_esc_voltage, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(ESC_SENSOR_VOLTAGE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_esc_rpm, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(ESC_SENSOR_RPM), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_esc_temperature, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(ESC_SENSOR_TEMPERATURE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_temperature, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_TEMPERATURE), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)},{ telemetry_disabled_cap_used, VAR_UINT32 | MASTER_VALUE | MODE_BITSET, .config.bitpos LOG2(SENSOR_CAP_USED), PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)}, #else{ telemetry_disabled_sensors, VAR_UINT32 | MASTER_VALUE, .config.u32Max SENSOR_ALL, PG_TELEMETRY_CONFIG, offsetof(telemetryConfig_t, disabledSensors)}, #endif #endif // USE_TELEMETRY// PG_LED_STRIP_CONFIG #ifdef USE_LED_STRIP{ ledstrip_visual_beeper, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_visual_beeper) },{ ledstrip_visual_beeper_color,VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_LEDSTRIP_COLOR }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_visual_beeper_color) },{ ledstrip_grb_rgb, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RGB_GRB }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_grb_rgb) },{ ledstrip_profile, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_LED_PROFILE }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_profile) },{ ledstrip_race_color, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_LEDSTRIP_COLOR }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_race_color) },{ ledstrip_beacon_color, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_LEDSTRIP_COLOR }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_beacon_color) },{ ledstrip_beacon_period_ms, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 50, 10000 }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_beacon_period_ms) },{ ledstrip_beacon_percent, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_beacon_percent) },{ ledstrip_beacon_armed_only, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_beacon_armed_only) },{ ledstrip_brightness, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 5, 100 }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_brightness) },{ ledstrip_rainbow_delta, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, HSV_HUE_MAX }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_rainbow_delta) },{ ledstrip_rainbow_freq, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, 200 }, PG_LED_STRIP_CONFIG, offsetof(ledStripConfig_t, ledstrip_rainbow_freq) }, #endif// PG_SDCARD_CONFIG #ifdef USE_SDCARD{ sdcard_detect_inverted, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SDCARD_CONFIG, offsetof(sdcardConfig_t, cardDetectInverted) },{ sdcard_mode, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_SDCARD_MODE }, PG_SDCARD_CONFIG, offsetof(sdcardConfig_t, mode) }, #endif #ifdef USE_SDCARD_SPI{ sdcard_spi_bus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_SDCARD_CONFIG, offsetof(sdcardConfig_t, device) }, #endif #ifdef USE_SDCARD_SDIO{ sdio_clk_bypass, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SDIO_CONFIG, offsetof(sdioConfig_t, clockBypass) },{ sdio_use_cache, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SDIO_CONFIG, offsetof(sdioConfig_t, useCache) },{ sdio_use_4bit_width, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SDIO_CONFIG, offsetof(sdioConfig_t, use4BitWidth) }, #ifdef STM32H7{ sdio_device, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SDIODEV_COUNT }, PG_SDIO_CONFIG, offsetof(sdioConfig_t, device) }, #endif #endif// PG_OSD_CONFIG #ifdef USE_OSD{ osd_units, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_UNIT }, PG_OSD_CONFIG, offsetof(osdConfig_t, units) },// Enabled OSD warning flags are stored as bitmapped values inside a 32bit parameter{ osd_warn_bitmask, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_OSD_CONFIG, offsetof(osdConfig_t, enabledWarnings)},{ osd_rssi_alarm, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_OSD_CONFIG, offsetof(osdConfig_t, rssi_alarm) }, #ifdef USE_RX_LINK_QUALITY_INFO{ osd_link_quality_alarm, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_OSD_CONFIG, offsetof(osdConfig_t, link_quality_alarm) }, #endif #ifdef USE_RX_RSSI_DBM{ osd_rssi_dbm_alarm, VAR_INT16 | MASTER_VALUE, .config.minmax { CRSF_RSSI_MIN, CRSF_RSSI_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, rssi_dbm_alarm) }, #endif #ifdef USE_RX_RSNR{ osd_rsnr_alarm, VAR_INT16 | MASTER_VALUE, .config.minmax { CRSF_SNR_MIN, CRSF_SNR_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, rsnr_alarm) }, #endif{ osd_cap_alarm, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 20000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, cap_alarm) },{ osd_alt_alarm, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 10000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, alt_alarm) },{ osd_distance_alarm, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, distance_alarm) },{ osd_esc_temp_alarm, VAR_UINT8 | MASTER_VALUE, .config.minmax { 0, UINT8_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, esc_temp_alarm) },{ osd_esc_rpm_alarm, VAR_INT16 | MASTER_VALUE, .config.minmax { ESC_RPM_ALARM_OFF, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, esc_rpm_alarm) },{ osd_esc_current_alarm, VAR_INT16 | MASTER_VALUE, .config.minmax { ESC_CURRENT_ALARM_OFF, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, esc_current_alarm) }, #ifdef USE_ADC_INTERNAL{ osd_core_temp_alarm, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, core_temp_alarm) }, #endif{ osd_ah_max_pit, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 90 }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahMaxPitch) },{ osd_ah_max_rol, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 90 }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahMaxRoll) },{ osd_ah_invert, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, ahInvert) },{ osd_logo_on_arming, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OSD_LOGO_ON_ARMING }, PG_OSD_CONFIG, offsetof(osdConfig_t, logo_on_arming) },{ osd_logo_on_arming_duration,VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 5, 50 }, PG_OSD_CONFIG, offsetof(osdConfig_t, logo_on_arming_duration) },{ osd_tim1, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_1]) },{ osd_tim2, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, INT16_MAX }, PG_OSD_CONFIG, offsetof(osdConfig_t, timers[OSD_TIMER_2]) },{ osd_vbat_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_MAIN_BATT_VOLTAGE]) },{ osd_rssi_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RSSI_VALUE]) }, #ifdef USE_RX_LINK_QUALITY_INFO{ osd_link_quality_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_LINK_QUALITY]) }, #endif #ifdef USE_RX_LINK_UPLINK_POWER{ osd_link_tx_power_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_TX_UPLINK_POWER]) }, #endif #ifdef USE_RX_RSSI_DBM{ osd_rssi_dbm_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RSSI_DBM_VALUE]) }, #endif #ifdef USE_RX_RSNR{ osd_rsnr_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RSNR_VALUE]) }, #endif{ osd_tim_1_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ITEM_TIMER_1]) },{ osd_tim_2_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ITEM_TIMER_2]) },{ osd_remaining_time_estimate_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_REMAINING_TIME_ESTIMATE]) },{ osd_flymode_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_FLYMODE]) },{ osd_anti_gravity_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ANTI_GRAVITY]) },{ osd_g_force_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_G_FORCE]) },{ osd_throttle_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_THROTTLE_POS]) },{ osd_vtx_channel_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_VTX_CHANNEL]) },{ osd_crosshairs_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CROSSHAIRS]) },{ osd_ah_sbar_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_HORIZON_SIDEBARS]) },{ osd_ah_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ARTIFICIAL_HORIZON]) },{ osd_current_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CURRENT_DRAW]) },{ osd_mah_drawn_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_MAH_DRAWN]) },{ osd_wh_drawn_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_WATT_HOURS_DRAWN]) },{ osd_motor_diag_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_MOTOR_DIAG]) },{ osd_craft_name_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CRAFT_NAME]) },{ osd_pilot_name_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PILOT_NAME]) },{ osd_gps_speed_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_SPEED]) },{ osd_gps_lon_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_LON]) },{ osd_gps_lat_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_LAT]) },{ osd_gps_sats_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_SATS]) },{ osd_home_dir_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_HOME_DIR]) },{ osd_home_dist_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_HOME_DIST]) },{ osd_flight_dist_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_FLIGHT_DIST]) },{ osd_compass_bar_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_COMPASS_BAR]) },{ osd_altitude_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ALTITUDE]) },{ osd_pid_roll_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ROLL_PIDS]) },{ osd_pid_pitch_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PITCH_PIDS]) },{ osd_pid_yaw_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_YAW_PIDS]) },{ osd_debug_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_DEBUG]) },{ osd_power_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_POWER]) },{ osd_pidrate_profile_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PIDRATE_PROFILE]) },{ osd_warnings_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_WARNINGS]) },{ osd_avg_cell_voltage_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_AVG_CELL_VOLTAGE]) },{ osd_pit_ang_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PITCH_ANGLE]) },{ osd_rol_ang_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ROLL_ANGLE]) },{ osd_battery_usage_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_MAIN_BATT_USAGE]) },{ osd_disarmed_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_DISARMED]) },{ osd_nheading_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_NUMERICAL_HEADING]) },{ osd_up_down_reference_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_UP_DOWN_REFERENCE]) },{ osd_ready_mode_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_READY_MODE]) }, #ifdef USE_VARIO{ osd_nvario_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_NUMERICAL_VARIO]) }, #endif{ osd_esc_tmp_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ESC_TMP]) },{ osd_esc_rpm_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ESC_RPM]) },{ osd_esc_rpm_freq_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ESC_RPM_FREQ]) },{ osd_rtc_date_time_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RTC_DATETIME]) },{ osd_adjustment_range_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_ADJUSTMENT_RANGE]) },{ osd_flip_arrow_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_FLIP_ARROW]) }, #ifdef USE_ADC_INTERNAL{ osd_core_temp_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CORE_TEMPERATURE]) }, #endif #ifdef USE_BLACKBOX{ osd_log_status_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_LOG_STATUS]) }, #endif#ifdef USE_OSD_STICK_OVERLAY{ osd_stick_overlay_left_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_STICK_OVERLAY_LEFT]) },{ osd_stick_overlay_right_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_STICK_OVERLAY_RIGHT]) },{ osd_stick_overlay_radio_mode, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, 4 }, PG_OSD_CONFIG, offsetof(osdConfig_t, overlay_radio_mode) }, #endif#ifdef USE_PROFILE_NAMES{ osd_rate_profile_name_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RATE_PROFILE_NAME]) },{ osd_pid_profile_name_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PID_PROFILE_NAME]) }, #endif#ifdef USE_OSD_PROFILES{ osd_profile_name_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PROFILE_NAME]) }, #endif{ osd_rcchannels_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_RC_CHANNELS]) },{ osd_camera_frame_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CAMERA_FRAME]) },{ osd_efficiency_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_EFFICIENCY]) },{ osd_total_flights_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_TOTAL_FLIGHTS]) },{ osd_aux_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_AUX_VALUE]) },#ifdef USE_MSP_DISPLAYPORT{ osd_sys_goggle_voltage_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_GOGGLE_VOLTAGE]) },{ osd_sys_vtx_voltage_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_VTX_VOLTAGE]) },{ osd_sys_bitrate_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_BITRATE]) },{ osd_sys_delay_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_DELAY]) },{ osd_sys_distance_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_DISTANCE]) },{ osd_sys_lq_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_LQ]) },{ osd_sys_goggle_dvr_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_GOGGLE_DVR]) },{ osd_sys_vtx_dvr_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_VTX_DVR]) },{ osd_sys_warnings_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_WARNINGS]) },{ osd_sys_vtx_temp_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_VTX_TEMP]) },{ osd_sys_fan_speed_pos, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_SYS_FAN_SPEED]) }, #endif// OSD stats enabled flags are stored as bitmapped values inside a 32bit parameter{ osd_stat_bitmask, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_OSD_CONFIG, offsetof(osdConfig_t, enabled_stats)},#ifdef USE_OSD_PROFILES{ osd_profile, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, OSD_PROFILE_COUNT }, PG_OSD_CONFIG, offsetof(osdConfig_t, osdProfileIndex) },{ osd_profile_1_name, VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string { 1, OSD_PROFILE_NAME_LENGTH, STRING_FLAGS_NONE }, PG_OSD_CONFIG, offsetof(osdConfig_t, profile[0]) },{ osd_profile_2_name, VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string { 1, OSD_PROFILE_NAME_LENGTH, STRING_FLAGS_NONE }, PG_OSD_CONFIG, offsetof(osdConfig_t, profile[1]) },{ osd_profile_3_name, VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string { 1, OSD_PROFILE_NAME_LENGTH, STRING_FLAGS_NONE }, PG_OSD_CONFIG, offsetof(osdConfig_t, profile[2]) }, #endif{ osd_gps_sats_show_hdop, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, gps_sats_show_hdop) },{ osd_displayport_device, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OSD_DISPLAYPORT_DEVICE }, PG_OSD_CONFIG, offsetof(osdConfig_t, displayPortDevice) },{ osd_rcchannels, VAR_INT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length OSD_RCCHANNELS_COUNT, PG_OSD_CONFIG, offsetof(osdConfig_t, rcChannels) },{ osd_camera_frame_width, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { OSD_CAMERA_FRAME_MIN_WIDTH, OSD_CAMERA_FRAME_MAX_WIDTH }, PG_OSD_CONFIG, offsetof(osdConfig_t, camera_frame_width) },{ osd_camera_frame_height, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { OSD_CAMERA_FRAME_MIN_HEIGHT, OSD_CAMERA_FRAME_MAX_HEIGHT }, PG_OSD_CONFIG, offsetof(osdConfig_t, camera_frame_height) },{ osd_stat_avg_cell_value, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, stat_show_cell_value) },{ osd_framerate_hz, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { OSD_FRAMERATE_MIN_HZ, OSD_FRAMERATE_MAX_HZ }, PG_OSD_CONFIG, offsetof(osdConfig_t, framerate_hz) },{ osd_menu_background, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_CMS_BACKGROUND }, PG_OSD_CONFIG, offsetof(osdConfig_t, cms_background_type) },{ osd_aux_channel, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 1, MAX_SUPPORTED_RC_CHANNEL_COUNT }, PG_OSD_CONFIG, offsetof(osdConfig_t, aux_channel) },{ osd_aux_scale, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 1, 1000 }, PG_OSD_CONFIG, offsetof(osdConfig_t, aux_scale) },{ osd_aux_symbol, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 255 }, PG_OSD_CONFIG, offsetof(osdConfig_t, aux_symbol) },{ osd_canvas_width, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 63 }, PG_OSD_CONFIG, offsetof(osdConfig_t, canvas_cols) },{ osd_canvas_height, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 31 }, PG_OSD_CONFIG, offsetof(osdConfig_t, canvas_rows) }, #ifdef USE_CRAFTNAME_MSGS{ osd_craftname_msgs, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_OSD_CONFIG, offsetof(osdConfig_t, osd_craftname_msgs) }, #endif //USE_CRAFTNAME_MSGS #endif // end of #ifdef USE_OSD// PG_SYSTEM_CONFIG #if defined(STM32F4) || defined(STM32G4){ system_hse_mhz, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, 30 }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, hseMhz) }, #endif{ task_statistics, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, task_statistics) },{ PARAM_NAME_DEBUG_MODE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_DEBUG }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, debug_mode) },{ rate_6pos_switch, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, rateProfile6PosSwitch) }, #ifdef USE_OVERCLOCK{ cpu_overclock, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OVERCLOCK }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, cpu_overclock) }, #endif{ pwr_on_arm_grace, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 30 }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, powerOnArmingGraceTime) },{ enable_stick_arming, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_SYSTEM_CONFIG, offsetof(systemConfig_t, enableStickArming) },// PG_VTX_CONFIG #ifdef USE_VTX_COMMON{ vtx_band, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, VTX_TABLE_MAX_BANDS }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, band) },{ vtx_channel, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, VTX_TABLE_MAX_CHANNELS }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, channel) },{ vtx_power, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, VTX_TABLE_MAX_POWER_LEVELS - 1 }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, power) },{ vtx_low_power_disarm, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_VTX_LOW_POWER_DISARM }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, lowPowerDisarm) },{ vtx_softserial_alt, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, softserialAlt) }, #ifdef VTX_SETTINGS_FREQCMD{ vtx_freq, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, VTX_SETTINGS_MAX_FREQUENCY_MHZ }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, freq) },{ vtx_pit_mode_freq, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, VTX_SETTINGS_MAX_FREQUENCY_MHZ }, PG_VTX_SETTINGS_CONFIG, offsetof(vtxSettingsConfig_t, pitModeFreq) }, #endif #endif// PG_VTX_CONFIG #if defined(USE_VTX_CONTROL) defined(USE_VTX_COMMON){ vtx_halfduplex, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_VTX_CONFIG, offsetof(vtxConfig_t, halfDuplex) }, #endif// PG_VTX_IO #ifdef USE_VTX_RTC6705{ vtx_spi_bus, VAR_UINT8 | HARDWARE_VALUE | MASTER_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_VTX_IO_CONFIG, offsetof(vtxIOConfig_t, spiDevice) }, #endif// PG_VCD_CONFIG #if defined(USE_VIDEO_SYSTEM){ vcd_video_system, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_VIDEO_SYSTEM }, PG_VCD_CONFIG, offsetof(vcdProfile_t, video_system) }, #endif #if defined(USE_MAX7456){ vcd_h_offset, VAR_INT8 | MASTER_VALUE, .config.minmax { -32, 31 }, PG_VCD_CONFIG, offsetof(vcdProfile_t, h_offset) },{ vcd_v_offset, VAR_INT8 | MASTER_VALUE, .config.minmax { -15, 16 }, PG_VCD_CONFIG, offsetof(vcdProfile_t, v_offset) }, #endif// PG_MAX7456_CONFIG #ifdef USE_MAX7456{ max7456_clock, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_MAX7456_CLOCK }, PG_MAX7456_CONFIG, offsetof(max7456Config_t, clockConfig) },{ max7456_spi_bus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_MAX7456_CONFIG, offsetof(max7456Config_t, spiDevice) },{ max7456_preinit_opu, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MAX7456_CONFIG, offsetof(max7456Config_t, preInitOPU) }, #endif// PG_DISPLAY_PORT_MSP_CONFIG #ifdef USE_MSP_DISPLAYPORT{ displayport_msp_col_adjust, VAR_INT8 | MASTER_VALUE, .config.minmax { -6, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, colAdjust) },{ displayport_msp_row_adjust, VAR_INT8 | MASTER_VALUE, .config.minmax { -3, 0 }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, rowAdjust) },{ displayport_msp_fonts, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 4, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, fontSelection) },{ displayport_msp_use_device_blink, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_DISPLAY_PORT_MSP_CONFIG, offsetof(displayPortProfile_t, useDeviceBlink) }, #endif// PG_DISPLAY_PORT_MSP_CONFIG #ifdef USE_MAX7456{ displayport_max7456_col_adjust, VAR_INT8| MASTER_VALUE, .config.minmax { -6, 0 }, PG_DISPLAY_PORT_MAX7456_CONFIG, offsetof(displayPortProfile_t, colAdjust) },{ displayport_max7456_row_adjust, VAR_INT8| MASTER_VALUE, .config.minmax { -3, 0 }, PG_DISPLAY_PORT_MAX7456_CONFIG, offsetof(displayPortProfile_t, rowAdjust) },{ displayport_max7456_inv, VAR_UINT8| MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_DISPLAY_PORT_MAX7456_CONFIG, offsetof(displayPortProfile_t, invert) },{ displayport_max7456_blk, VAR_UINT8| MASTER_VALUE, .config.minmaxUnsigned { 0, 3 }, PG_DISPLAY_PORT_MAX7456_CONFIG, offsetof(displayPortProfile_t, blackBrightness) },{ displayport_max7456_wht, VAR_UINT8| MASTER_VALUE, .config.minmaxUnsigned { 0, 3 }, PG_DISPLAY_PORT_MAX7456_CONFIG, offsetof(displayPortProfile_t, whiteBrightness) }, #endif#ifdef USE_ESC_SENSOR{ esc_sensor_halfduplex, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_ESC_SENSOR_CONFIG, offsetof(escSensorConfig_t, halfDuplex) },{ esc_sensor_current_offset, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 16000 }, PG_ESC_SENSOR_CONFIG, offsetof(escSensorConfig_t, offset) }, #endif#ifdef USE_RX_FRSKY_SPI{ frsky_spi_autobind, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, autoBind) },{ frsky_spi_tx_id, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 3, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, bindTxId) },{ frsky_spi_offset, VAR_INT8 | MASTER_VALUE, .config.minmax { -127, 127 }, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, bindOffset) },{ frsky_spi_bind_hop_data, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 50, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, bindHopData) },{ frsky_x_rx_num, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, rxNum) },{ frsky_spi_a1_source, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RX_FRSKY_SPI_A1_SOURCE }, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, a1Source) },{ cc2500_spi_chip_detect, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_RX_CC2500_SPI_CONFIG, offsetof(rxCc2500SpiConfig_t, chipDetectEnabled) }, #endif{ led_inversion, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, ((1 STATUS_LED_NUMBER) - 1) }, PG_STATUS_LED_CONFIG, offsetof(statusLedConfig_t, inversion) }, #ifdef USE_DASHBOARD{ dashboard_i2c_bus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2CDEV_COUNT }, PG_DASHBOARD_CONFIG, offsetof(dashboardConfig_t, device) },{ dashboard_i2c_addr, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { I2C_ADDR7_MIN, I2C_ADDR7_MAX }, PG_DASHBOARD_CONFIG, offsetof(dashboardConfig_t, address) }, #endif// PG_CAMERA_CONTROL_CONFIG #ifdef USE_CAMERA_CONTROL{ camera_control_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_CAMERA_CONTROL_MODE }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, mode) },{ camera_control_ref_voltage, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 200, 400 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, refVoltage) },{ camera_control_key_delay, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 100, 500 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, keyDelayMs) },{ camera_control_internal_resistance, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 10, 1000 }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, internalResistance) },{ camera_control_button_resistance, VAR_UINT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length CAMERA_CONTROL_KEYS_COUNT, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, buttonResistanceValues) },{ camera_control_inverted, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_CAMERA_CONTROL_CONFIG, offsetof(cameraControlConfig_t, inverted) }, #endif// PG_RANGEFINDER_CONFIG #ifdef USE_RANGEFINDER{ rangefinder_hardware, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_RANGEFINDER_HARDWARE }, PG_RANGEFINDER_CONFIG, offsetof(rangefinderConfig_t, rangefinder_hardware) }, #endif// PG_PINIO_CONFIG #ifdef USE_PINIO{ pinio_config, VAR_UINT8 | HARDWARE_VALUE | MODE_ARRAY, .config.array.length PINIO_COUNT, PG_PINIO_CONFIG, offsetof(pinioConfig_t, config) }, #ifdef USE_PINIOBOX{ pinio_box, VAR_UINT8 | HARDWARE_VALUE | MODE_ARRAY, .config.array.length PINIO_COUNT, PG_PINIOBOX_CONFIG, offsetof(pinioBoxConfig_t, permanentId) }, #endif #endif//PG USB #ifdef USE_USB_CDC_HID{ usb_hid_cdc, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_USB_CONFIG, offsetof(usbDev_t, type) }, #endif #ifdef USE_USB_MSC{ usb_msc_pin_pullup, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_USB_CONFIG, offsetof(usbDev_t, mscButtonUsePullup) }, #endif // PG_FLASH_CONFIG #ifdef USE_FLASH_SPI{ flash_spi_bus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_FLASH_CONFIG, offsetof(flashConfig_t, spiDevice) }, #endif // RCDEVICE #ifdef USE_RCDEVICE{ rcdevice_init_dev_attempts, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 10 }, PG_RCDEVICE_CONFIG, offsetof(rcdeviceConfig_t, initDeviceAttempts) },{ rcdevice_init_dev_attempt_interval, VAR_UINT32 | MASTER_VALUE, .config.u32Max 5000, PG_RCDEVICE_CONFIG, offsetof(rcdeviceConfig_t, initDeviceAttemptInterval) },{ rcdevice_protocol_version, VAR_UINT8 | MASTER_VALUE, .config.minmax { 0, 1 }, PG_RCDEVICE_CONFIG, offsetof(rcdeviceConfig_t, protocolVersion) },{ rcdevice_feature, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned {0, 65535}, PG_RCDEVICE_CONFIG, offsetof(rcdeviceConfig_t, feature) }, #endif// PG_GYRO_DEVICE_CONFIG{ gyro_1_bustype, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BUS_TYPE }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, busType) },{ gyro_1_spibus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, spiBus) },{ gyro_1_i2cBus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2CDEV_COUNT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, i2cBus) },{ gyro_1_i2c_address, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2C_ADDR7_MAX }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, i2cAddress) },{ gyro_1_sensor_align, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ALIGNMENT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, alignment) },{ gyro_1_align_roll, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, customAlignment.roll) },{ gyro_1_align_pitch, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, customAlignment.pitch) },{ gyro_1_align_yaw, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 0, customAlignment.yaw) }, #ifdef USE_MULTI_GYRO{ gyro_2_bustype, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_BUS_TYPE }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, busType) },{ gyro_2_spibus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, SPIDEV_COUNT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, spiBus) },{ gyro_2_i2cBus, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2CDEV_COUNT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, i2cBus) },{ gyro_2_i2c_address, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, I2C_ADDR7_MAX }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, i2cAddress) },{ gyro_2_sensor_align, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_ALIGNMENT }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, alignment) },{ gyro_2_align_roll, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, customAlignment.roll) },{ gyro_2_align_pitch, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, customAlignment.pitch) },{ gyro_2_align_yaw, VAR_INT16 | HARDWARE_VALUE, .config.minmax { -3600, 3600 }, PG_GYRO_DEVICE_CONFIG, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t, 1, customAlignment.yaw) }, #endif #ifdef I2C_FULL_RECONFIGURABILITY #ifdef USE_I2C_DEVICE_1{ i2c1_pullup, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 0, pullUp) },{ i2c1_clockspeed_khz, VAR_UINT16 | HARDWARE_VALUE, .config.minmax { I2C_CLOCKSPEED_MIN_KHZ, I2C_CLOCKSPEED_MAX_KHZ }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 0, clockSpeed) }, #endif #ifdef USE_I2C_DEVICE_2{ i2c2_pullup, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 1, pullUp) },{ i2c2_clockspeed_khz, VAR_UINT16 | HARDWARE_VALUE, .config.minmax { I2C_CLOCKSPEED_MIN_KHZ, I2C_CLOCKSPEED_MAX_KHZ }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 1, clockSpeed) }, #endif #ifdef USE_I2C_DEVICE_3{ i2c3_pullup, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 2, pullUp) },{ i2c3_clockspeed_khz, VAR_UINT16 | HARDWARE_VALUE, .config.minmax { I2C_CLOCKSPEED_MIN_KHZ, I2C_CLOCKSPEED_MAX_KHZ }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 2, clockSpeed) }, #endif #ifdef USE_I2C_DEVICE_4{ i2c4_pullup, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 3, pullUp) },{ i2c4_clockspeed_khz, VAR_UINT16 | HARDWARE_VALUE, .config.minmax { I2C_CLOCKSPEED_MIN_KHZ, I2C_CLOCKSPEED_MAX_KHZ }, PG_I2C_CONFIG, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t, 3, clockSpeed) }, #endif #endif #ifdef USE_MCO #ifdef STM32G4{ mco_on_pa8, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MCO_CONFIG, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t, 0, enabled) },{ mco_source, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, MCO_SOURCE_COUNT - 1 }, PG_MCO_CONFIG, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t, 0, source) },{ mco_divider, VAR_UINT8 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, MCO_DIVIDER_COUNT - 1 }, PG_MCO_CONFIG, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t, 0, divider) }, #else{ mco2_on_pc9, VAR_UINT8 | HARDWARE_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MCO_CONFIG, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t, 1, enabled) }, #endif #endif #ifdef USE_RX_SPEKTRUM{ spektrum_spi_protocol, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_SPEKTRUM_SPI_CONFIG, offsetof(spektrumConfig_t, protocol) },{ spektrum_spi_mfg_id, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 4, PG_RX_SPEKTRUM_SPI_CONFIG, offsetof(spektrumConfig_t, mfgId) },{ spektrum_spi_num_channels, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, DSM_MAX_CHANNEL_COUNT }, PG_RX_SPEKTRUM_SPI_CONFIG, offsetof(spektrumConfig_t, numChannels) }, #endif #ifdef USE_RX_EXPRESSLRS{ expresslrs_uid, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 6, PG_RX_EXPRESSLRS_SPI_CONFIG, offsetof(rxExpressLrsSpiConfig_t, UID) },{ expresslrs_domain, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_FREQ_DOMAIN }, PG_RX_EXPRESSLRS_SPI_CONFIG, offsetof(rxExpressLrsSpiConfig_t, domain) },{ expresslrs_rate_index, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 3 }, PG_RX_EXPRESSLRS_SPI_CONFIG, offsetof(rxExpressLrsSpiConfig_t, rateIndex) },{ expresslrs_switch_mode, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_SWITCH_MODE }, PG_RX_EXPRESSLRS_SPI_CONFIG, offsetof(rxExpressLrsSpiConfig_t, switchMode) },{ expresslrs_model_id, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, UINT8_MAX }, PG_RX_EXPRESSLRS_SPI_CONFIG, offsetof(rxExpressLrsSpiConfig_t, modelId) }, #endif{ scheduler_relax_rx, VAR_UINT16 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_SCHEDULER_CONFIG, PG_ARRAY_ELEMENT_OFFSET(schedulerConfig_t, 0, rxRelaxDeterminism) },{ scheduler_relax_osd, VAR_UINT16 | HARDWARE_VALUE, .config.minmaxUnsigned { 0, 500 }, PG_SCHEDULER_CONFIG, PG_ARRAY_ELEMENT_OFFSET(schedulerConfig_t, 0, osdRelaxDeterminism) },{ serialmsp_halfduplex, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_OFF_ON }, PG_MSP_CONFIG, offsetof(mspConfig_t, halfDuplex) },// PG_TIMECONFIG #ifdef USE_RTC_TIME{ timezone_offset_minutes, VAR_INT16 | MASTER_VALUE, .config.minmax { TIMEZONE_OFFSET_MINUTES_MIN, TIMEZONE_OFFSET_MINUTES_MAX }, PG_TIME_CONFIG, offsetof(timeConfig_t, tz_offsetMinutes) }, #endif#ifdef USE_RPM_FILTER{ PARAM_NAME_RPM_FILTER_HARMONICS, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 3 }, PG_RPM_FILTER_CONFIG, offsetof(rpmFilterConfig_t, rpm_filter_harmonics) },{ PARAM_NAME_RPM_FILTER_Q, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 250, 3000 }, PG_RPM_FILTER_CONFIG, offsetof(rpmFilterConfig_t, rpm_filter_q) },{ PARAM_NAME_RPM_FILTER_MIN_HZ, VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned { 30, 200 }, PG_RPM_FILTER_CONFIG, offsetof(rpmFilterConfig_t, rpm_filter_min_hz) },{ PARAM_NAME_RPM_FILTER_FADE_RANGE_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 0, 1000 }, PG_RPM_FILTER_CONFIG, offsetof(rpmFilterConfig_t, rpm_filter_fade_range_hz) },{ PARAM_NAME_RPM_FILTER_LPF_HZ, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 100, 500 }, PG_RPM_FILTER_CONFIG, offsetof(rpmFilterConfig_t, rpm_filter_lpf_hz) }, #endif#ifdef USE_RX_FLYSKY{ flysky_spi_tx_id, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_FLYSKY_CONFIG, offsetof(flySkyConfig_t, txId) },{ flysky_spi_rf_channels, VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length 16, PG_FLYSKY_CONFIG, offsetof(flySkyConfig_t, rfChannelMap) }, #endif#ifdef USE_PERSISTENT_STATS{ stats_min_armed_time_s, VAR_INT8 | MASTER_VALUE, .config.minmax { STATS_OFF, INT8_MAX }, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_min_armed_time_s) },{ stats_total_flights, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_total_flights) },{ stats_total_time_s, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_total_time_s) },{ stats_total_dist_m, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_total_dist_m) },#ifdef USE_BATTERY_CONTINUE{ stats_mah_used, VAR_UINT32 | MASTER_VALUE, .config.u32Max UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_mah_used) }, #endif #endif{ craft_name, VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, craftName) }, #ifdef USE_OSD{ pilot_name, VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, pilotName) }, #endif// PG_POSITION{ altitude_source, VAR_INT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup { TABLE_POSITION_ALT_SOURCE }, PG_POSITION, offsetof(positionConfig_t, altitude_source) },{ altitude_prefer_baro, VAR_INT8 | MASTER_VALUE, .config.minmaxUnsigned { 0, 100 }, PG_POSITION, offsetof(positionConfig_t, altitude_prefer_baro) },{ altitude_lpf, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 10, 1000 }, PG_POSITION, offsetof(positionConfig_t, altitude_lpf) },{ altitude_d_lpf, VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned { 10, 1000 }, PG_POSITION, offsetof(positionConfig_t, altitude_d_lpf) },// PG_MODE_ACTIVATION_CONFIG #if defined(USE_CUSTOM_BOX_NAMES){ box_user_1_name, VAR_UINT8 | HARDWARE_VALUE | MODE_STRING, .config.string { 1, MAX_BOX_USER_NAME_LENGTH, STRING_FLAGS_NONE }, PG_MODE_ACTIVATION_CONFIG, offsetof(modeActivationConfig_t, box_user_1_name) },{ box_user_2_name, VAR_UINT8 | HARDWARE_VALUE | MODE_STRING, .config.string { 1, MAX_BOX_USER_NAME_LENGTH, STRING_FLAGS_NONE }, PG_MODE_ACTIVATION_CONFIG, offsetof(modeActivationConfig_t, box_user_2_name) },{ box_user_3_name, VAR_UINT8 | HARDWARE_VALUE | MODE_STRING, .config.string { 1, MAX_BOX_USER_NAME_LENGTH, STRING_FLAGS_NONE }, PG_MODE_ACTIVATION_CONFIG, offsetof(modeActivationConfig_t, box_user_3_name) },{ box_user_4_name, VAR_UINT8 | HARDWARE_VALUE | MODE_STRING, .config.string { 1, MAX_BOX_USER_NAME_LENGTH, STRING_FLAGS_NONE }, PG_MODE_ACTIVATION_CONFIG, offsetof(modeActivationConfig_t, box_user_4_name) }, #endif };const uint16_t valueTableEntryCount ARRAYLEN(valueTable);按照变量定义可以分为以下几大类 MODE_DIRECTMODE_LOOKUP/MODE_BITSETMODE_ARRAY (VAR_UINT8/VAR_INT8/VAR_UINT16/VAR_INT16/VAR_UINT32/)MODE_STRING 至于每个参量的含义这里就不展开随着对系统的深入理解慢慢就会一点点了解起来的。“着急吃不了热豆腐”还是很有哲学深度的。不过这里我们可以先整体上有个概念。 2. 代码分析 cliSet├── len 0 || (len 1 cmdline[0] *) [Print all parameters in valueTable]├── (eqptr strstr(cmdline, )) ! NULL //赋值命令│ ├── [get parameter name and index in valueTable] error return│ ├── [get original parameter value]│ │ ├── MODE_DIRECT (VALUE_TYPE_MASK: VAR_UINT32)│ │ │ └── [Validation check] cliSetVar(val, value)│ │ ├── MODE_LOOKUP/MODE_BITSET (VALUE_TYPE_MASK: MODE_BITSET)│ │ │ └── [Validation check] cliSetVar(val, value)│ │ ├── MODE_ARRAY (VALUE_TYPE_MASK: VAR_UINT8/VAR_INT8/VAR_UINT16/VAR_INT16/VAR_UINT32/)│ │ │ └── [Validation check] cliSetVar(val, value)│ │ └── MODE_STRING│ │ └── [Validation check] strncpy((char *)cliGetValuePointer(val), valPtr, len);│ ├── valueChanged cliPrintf(%s set to , val-name);cliPrintVar(cmdName, val, 0);│ └── !valueChanged cliPrintErrorLinef(cmdName, INVALID VALUE);cliPrintVarRange(val);└── (eqptr strstr(cmdline, )) NULL //非赋值命令└── cliGet(cmdName, cmdline);3. 实例分析 厂商主要设置的变量针对板级硬件配置应用级参数将需要用户自行定义或者配置。 set gyro_to_use BOTH set mag_bustype I2C set mag_i2c_device 1 set baro_bustype I2C set baro_i2c_device 2 set blackbox_device SPIFLASH set current_meter ADC set battery_meter ADC set ibata_scale 500 set beeper_inversion ON set beeper_od OFF set max7456_spi_bus 2 set pinio_config 129,1,1,1 set pinio_box 39,40,255,255 set flash_spi_bus 3 set gyro_1_bustype SPI set gyro_1_spibus 1 set gyro_1_sensor_align CW90 set gyro_1_align_yaw 900 set gyro_2_spibus 4 set gyro_2_sensor_align CW180 set gyro_2_align_yaw 18004. 配置情况 # help set set - change setting[namevalue]4.1 set # set Current settings: gyro_hardware_lpf NORMAL gyro_lpf1_type PT1 gyro_lpf1_static_hz 250 gyro_lpf2_type PT1 gyro_lpf2_static_hz 500 gyro_notch1_hz 0 gyro_notch1_cutoff 0 gyro_notch2_hz 0 gyro_notch2_cutoff 0 gyro_calib_duration 125 gyro_calib_noise_limit 48 gyro_offset_yaw 0 gyro_overflow_detect ALL yaw_spin_recovery AUTO yaw_spin_threshold 1950 gyro_to_use BOTH dyn_notch_count 3 dyn_notch_q 300 dyn_notch_min_hz 150 dyn_notch_max_hz 600 gyro_lpf1_dyn_min_hz 250 gyro_lpf1_dyn_max_hz 500 gyro_lpf1_dyn_expo 5 gyro_filter_debug_axis ROLL acc_hardware AUTO acc_lpf_hz 10 acc_trim_pitch 0 acc_trim_roll 0 acc_calibration 22,-6,40,1 align_mag DEFAULT mag_align_roll 0 mag_align_pitch 0 mag_align_yaw 0 mag_bustype I2C mag_i2c_device 1 mag_i2c_address 0 mag_spi_device 0 mag_hardware AUTO mag_calibration 0,0,0 baro_bustype I2C baro_spi_device 0 baro_i2c_device 2 baro_i2c_address 0 baro_hardware AUTO baro_tab_size 21 baro_noise_lpf 600 baro_cf_vel 985 mid_rc 1500 min_check 1050 max_check 1900 rssi_channel 0 rssi_src_frame_errors OFF rssi_scale 100 rssi_offset 0 rssi_invert OFF rssi_src_frame_lpf_period 30 rc_smoothing ON rc_smoothing_auto_factor 30 rc_smoothing_auto_factor_throttle 30 rc_smoothing_setpoint_cutoff 0 rc_smoothing_feedforward_cutoff 0 rc_smoothing_throttle_cutoff 0 rc_smoothing_debug_axis ROLL fpv_mix_degrees 0 max_aux_channels 14 serialrx_provider SBUS serialrx_inverted OFF spektrum_sat_bind 0 spektrum_sat_bind_autoreset ON srxl2_unit_id 1 srxl2_baud_fast ON sbus_baud_fast OFF crsf_use_rx_snr OFF airmode_start_throttle_percent 25 rx_min_usec 885 rx_max_usec 2115 serialrx_halfduplex OFF msp_override_channels_mask 0 rx_spi_protocol V202_250K rx_spi_bus 0 rx_spi_led_inversion OFF adc_device 1 adc_vrefint_calibration 0 adc_tempsensor_calibration30 0 adc_tempsensor_calibration110 0 input_filtering_mode OFF blackbox_sample_rate 1/4 blackbox_device SPIFLASH blackbox_disable_pids OFF blackbox_disable_rc OFF blackbox_disable_setpoint OFF blackbox_disable_bat OFF blackbox_disable_mag OFF blackbox_disable_alt OFF blackbox_disable_rssi OFF blackbox_disable_gyro OFF blackbox_disable_acc OFF blackbox_disable_debug OFF blackbox_disable_motors OFF blackbox_disable_gps OFF blackbox_mode NORMAL min_throttle 1070 max_throttle 2000 min_command 1000 dshot_idle_value 550 dshot_burst OFF dshot_bidir OFF dshot_bitbang AUTO dshot_bitbang_timer AUTO use_unsynced_pwm OFF motor_pwm_protocol DSHOT600 motor_pwm_rate 480 motor_pwm_inversion OFF motor_poles 14 motor_output_reordering 0,1,2,3,4,5,6,7 thr_corr_value 0 thr_corr_angle 800 failsafe_delay 4 failsafe_off_delay 10 failsafe_throttle 1000 failsafe_switch_mode STAGE1 failsafe_throttle_low_delay 100 failsafe_procedure DROP failsafe_recovery_delay 20 failsafe_stick_threshold 30 align_board_roll 0 align_board_pitch 0 align_board_yaw 0 gimbal_mode NORMAL bat_capacity 0 vbat_max_cell_voltage 430 vbat_full_cell_voltage 410 vbat_min_cell_voltage 330 vbat_warning_cell_voltage 350 vbat_hysteresis 1 current_meter ADC battery_meter ADC vbat_detect_cell_voltage 300 use_vbat_alerts ON use_cbat_alerts OFF cbat_alert_percent 10 vbat_cutoff_percent 100 force_battery_cell_count 0 vbat_display_lpf_period 30 vbat_sag_lpf_period 2 ibat_lpf_period 10 vbat_duration_for_warning 0 vbat_duration_for_critical 0 vbat_scale 110 vbat_divider 10 vbat_multiplier 1 ibata_scale 500 ibata_offset 0 ibatv_scale 0 ibatv_offset 0 beeper_inversion ON beeper_od OFF beeper_frequency 0 beeper_dshot_beacon_tone 1 yaw_motors_reversed OFF mixer_type LEGACY crashflip_motor_percent 0 crashflip_expo 35 3d_deadband_low 1406 3d_deadband_high 1514 3d_neutral 1460 3d_deadband_throttle 50 3d_limit_low 1000 3d_limit_high 2000 3d_switched_mode OFF servo_center_pulse 1500 servo_pwm_rate 50 servo_lowpass_hz 0 tri_unarmed_servo ON channel_forwarding_start 4 rateprofile_name - thr_mid 50 thr_expo 0 rates_type ACTUAL quickrates_rc_expo OFF roll_rc_rate 7 pitch_rc_rate 7 yaw_rc_rate 7 roll_expo 0 pitch_expo 0 yaw_expo 0 roll_srate 67 pitch_srate 67 yaw_srate 67 tpa_rate 65 tpa_breakpoint 1350 tpa_mode D throttle_limit_type OFF throttle_limit_percent 100 roll_rate_limit 1998 pitch_rate_limit 1998 yaw_rate_limit 1998 roll_level_expo 0 pitch_level_expo 0 reboot_character 82 serial_update_rate_hz 100 imu_dcm_kp 2500 imu_dcm_ki 0 small_angle 25 auto_disarm_delay 5 gyro_cal_on_first_arm OFF gps_provider NMEA gps_sbas_mode NONE gps_sbas_integrity OFF gps_auto_config ON gps_auto_baud OFF gps_ublox_use_galileo OFF gps_ublox_mode AIRBORNE gps_set_home_point_once OFF gps_use_3d_speed OFF gps_rescue_angle 32 gps_rescue_alt_buffer 15 gps_rescue_initial_alt 50 gps_rescue_descent_dist 200 gps_rescue_landing_alt 5 gps_rescue_landing_dist 10 gps_rescue_ground_speed 2000 gps_rescue_throttle_p 150 gps_rescue_throttle_i 20 gps_rescue_throttle_d 50 gps_rescue_velocity_p 80 gps_rescue_velocity_i 20 gps_rescue_velocity_d 15 gps_rescue_yaw_p 40 gps_rescue_throttle_min 1100 gps_rescue_throttle_max 1600 gps_rescue_ascend_rate 500 gps_rescue_descend_rate 150 gps_rescue_throttle_hover 1280 gps_rescue_sanity_checks RESCUE_SANITY_ON gps_rescue_min_sats 8 gps_rescue_min_dth 100 gps_rescue_allow_arming_without_fix OFF gps_rescue_alt_mode MAX_ALT gps_rescue_use_mag ON deadband 0 yaw_deadband 0 yaw_control_reversed OFF pid_process_denom 1 runaway_takeoff_prevention ON runaway_takeoff_deactivate_delay 500 runaway_takeoff_deactivate_throttle_percent 20 profile_name - dterm_lpf1_dyn_min_hz 75 dterm_lpf1_dyn_max_hz 150 dterm_lpf1_dyn_expo 5 dterm_lpf1_type PT1 dterm_lpf1_static_hz 75 dterm_lpf2_type PT1 dterm_lpf2_static_hz 150 dterm_notch_hz 0 dterm_notch_cutoff 0 vbat_sag_compensation 0 pid_at_min_throttle ON anti_gravity_mode SMOOTH anti_gravity_threshold 250 anti_gravity_gain 3500 acc_limit_yaw 0 acc_limit 0 crash_dthreshold 50 crash_gthreshold 400 crash_setpoint_threshold 350 crash_time 500 crash_delay 0 crash_recovery_angle 10 crash_recovery_rate 100 crash_limit_yaw 200 crash_recovery OFF iterm_rotation OFF iterm_relax RP iterm_relax_type SETPOINT iterm_relax_cutoff 15 iterm_windup 85 iterm_limit 400 pidsum_limit 500 pidsum_limit_yaw 400 yaw_lowpass_hz 100 throttle_boost 5 throttle_boost_cutoff 15 acro_trainer_angle_limit 20 acro_trainer_lookahead_ms 50 acro_trainer_debug_axis ROLL acro_trainer_gain 75 p_pitch 47 i_pitch 84 d_pitch 46 f_pitch 125 p_roll 45 i_roll 80 d_roll 40 f_roll 120 p_yaw 45 i_yaw 80 d_yaw 0 f_yaw 120 angle_level_strength 50 horizon_level_strength 50 horizon_transition 75 level_limit 55 horizon_tilt_effect 75 horizon_tilt_expert_mode OFF abs_control_gain 0 abs_control_limit 90 abs_control_error_limit 20 abs_control_cutoff 11 use_integrated_yaw OFF integrated_yaw_relax 200 d_min_roll 30 d_min_pitch 34 d_min_yaw 0 d_max_gain 37 d_max_advance 20 motor_output_limit 100 auto_profile_cell_count 0 launch_control_mode NORMAL launch_trigger_allow_reset ON launch_trigger_throttle_percent 20 launch_angle_limit 0 launch_control_gain 40 thrust_linear 0 transient_throttle_limit 0 feedforward_transition 0 feedforward_averaging OFF feedforward_smooth_factor 25 feedforward_jitter_factor 7 feedforward_boost 15 feedforward_max_rate_limit 90 dyn_idle_min_rpm 0 dyn_idle_p_gain 50 dyn_idle_i_gain 50 dyn_idle_d_gain 50 dyn_idle_max_increase 150 level_race_mode OFF simplified_pids_mode RPY simplified_master_multiplier 100 simplified_i_gain 100 simplified_d_gain 100 simplified_pi_gain 100 simplified_dmax_gain 100 simplified_feedforward_gain 100 simplified_pitch_d_gain 100 simplified_pitch_pi_gain 100 simplified_dterm_filter ON simplified_dterm_filter_multiplier 100 simplified_gyro_filter ON simplified_gyro_filter_multiplier 100 tlm_inverted OFF tlm_halfduplex ON frsky_default_lat 0 frsky_default_long 0 frsky_gps_format 0 frsky_unit METRIC frsky_vfas_precision 0 hott_alarm_int 5 pid_in_tlm OFF report_cell_voltage OFF ibus_sensor 1,2,3,0,0,0,0,0,0,0,0,0,0,0,0 mavlink_mah_as_heading_divisor 0 telemetry_disabled_voltage OFF telemetry_disabled_current OFF telemetry_disabled_fuel OFF telemetry_disabled_mode OFF telemetry_disabled_acc_x OFF telemetry_disabled_acc_y OFF telemetry_disabled_acc_z OFF telemetry_disabled_pitch OFF telemetry_disabled_roll OFF telemetry_disabled_heading OFF telemetry_disabled_altitude OFF telemetry_disabled_vario OFF telemetry_disabled_lat_long OFF telemetry_disabled_ground_speed OFF telemetry_disabled_distance OFF telemetry_disabled_esc_current ON telemetry_disabled_esc_voltage ON telemetry_disabled_esc_rpm ON telemetry_disabled_esc_temperature ON telemetry_disabled_temperature OFF telemetry_disabled_cap_used ON ledstrip_visual_beeper OFF ledstrip_visual_beeper_color WHITE ledstrip_grb_rgb GRB ledstrip_profile STATUS ledstrip_race_color ORANGE ledstrip_beacon_color WHITE ledstrip_beacon_period_ms 500 ledstrip_beacon_percent 50 ledstrip_beacon_armed_only OFF ledstrip_brightness 100 sdcard_detect_inverted OFF sdcard_mode SDIO sdcard_spi_bus 0 sdio_clk_bypass OFF sdio_use_cache OFF sdio_use_4bit_width OFF sdio_device 0 osd_units METRIC osd_warn_arming_disable ON osd_warn_batt_not_full ON osd_warn_batt_warning ON osd_warn_batt_critical ON osd_warn_visual_beeper ON osd_warn_crash_flip ON osd_warn_esc_fail ON osd_warn_core_temp ON osd_warn_rc_smoothing ON osd_warn_fail_safe ON osd_warn_launch_control ON osd_warn_no_gps_rescue ON osd_warn_gps_rescue_disabled ON osd_warn_rssi OFF osd_warn_link_quality OFF osd_warn_rssi_dbm OFF osd_warn_over_cap OFF osd_rssi_alarm 20 osd_link_quality_alarm 80 osd_rssi_dbm_alarm -60 osd_cap_alarm 2200 osd_alt_alarm 100 osd_distance_alarm 0 osd_esc_temp_alarm -128 osd_esc_rpm_alarm -1 osd_esc_current_alarm -1 osd_core_temp_alarm 70 osd_ah_max_pit 20 osd_ah_max_rol 40 osd_ah_invert OFF osd_logo_on_arming OFF osd_logo_on_arming_duration 5 osd_tim1 2560 osd_tim2 2561 osd_vbat_pos 234 osd_rssi_pos 234 osd_link_quality_pos 234 osd_link_tx_power_pos 234 osd_rssi_dbm_pos 234 osd_tim_1_pos 234 osd_tim_2_pos 234 osd_remaining_time_estimate_pos 234 osd_flymode_pos 234 osd_anti_gravity_pos 234 osd_g_force_pos 234 osd_throttle_pos 234 osd_vtx_channel_pos 234 osd_crosshairs_pos 205 osd_ah_sbar_pos 206 osd_ah_pos 78 osd_current_pos 234 osd_mah_drawn_pos 234 osd_motor_diag_pos 234 osd_craft_name_pos 234 osd_display_name_pos 234 osd_gps_speed_pos 234 osd_gps_lon_pos 234 osd_gps_lat_pos 234 osd_gps_sats_pos 234 osd_home_dir_pos 234 osd_home_dist_pos 234 osd_flight_dist_pos 234 osd_compass_bar_pos 234 osd_altitude_pos 234 osd_pid_roll_pos 234 osd_pid_pitch_pos 234 osd_pid_yaw_pos 234 osd_debug_pos 234 osd_power_pos 234 osd_pidrate_profile_pos 234 osd_warnings_pos 14665 osd_avg_cell_voltage_pos 234 osd_pit_ang_pos 234 osd_rol_ang_pos 234 osd_battery_usage_pos 234 osd_disarmed_pos 234 osd_nheading_pos 234 osd_up_down_reference_pos 205 osd_nvario_pos 234 osd_esc_tmp_pos 234 osd_esc_rpm_pos 234 osd_esc_rpm_freq_pos 234 osd_rtc_date_time_pos 234 osd_adjustment_range_pos 234 osd_flip_arrow_pos 234 osd_core_temp_pos 234 osd_log_status_pos 234 osd_stick_overlay_left_pos 234 osd_stick_overlay_right_pos 234 osd_stick_overlay_radio_mode 2 osd_rate_profile_name_pos 234 osd_pid_profile_name_pos 234 osd_profile_name_pos 234 osd_rcchannels_pos 234 osd_camera_frame_pos 35 osd_efficiency_pos 234 osd_total_flights_pos 234 osd_stat_rtc_date_time OFF osd_stat_tim_1 OFF osd_stat_tim_2 ON osd_stat_max_spd ON osd_stat_max_dist OFF osd_stat_min_batt ON osd_stat_endbatt OFF osd_stat_battery OFF osd_stat_min_rssi ON osd_stat_max_curr ON osd_stat_used_mah ON osd_stat_max_alt OFF osd_stat_bbox ON osd_stat_bb_no ON osd_stat_max_g_force OFF osd_stat_max_esc_temp OFF osd_stat_max_esc_rpm OFF osd_stat_min_link_quality OFF osd_stat_flight_dist OFF osd_stat_max_fft OFF osd_stat_total_flights OFF osd_stat_total_time OFF osd_stat_total_dist OFF osd_stat_min_rssi_dbm OFF osd_profile 1 osd_profile_1_name - osd_profile_2_name - osd_profile_3_name - osd_gps_sats_show_hdop OFF osd_displayport_device AUTO osd_rcchannels -1,-1,-1,-1 osd_camera_frame_width 24 osd_camera_frame_height 11 osd_stat_avg_cell_value OFF osd_framerate_hz 12 osd_menu_background TRANSPARENT task_statistics ON debug_mode NONE rate_6pos_switch OFF pwr_on_arm_grace 5 enable_stick_arming OFF vtx_band 0 vtx_channel 0 vtx_power 0 vtx_low_power_disarm OFF vtx_softserial_alt OFF vtx_freq 0 vtx_pit_mode_freq 0 vtx_halfduplex ON vtx_spi_bus 0 vcd_video_system AUTO vcd_h_offset 0 vcd_v_offset 0 max7456_clock NOMINAL max7456_spi_bus 2 max7456_preinit_opu OFF displayport_msp_col_adjust 0 displayport_msp_row_adjust 0 displayport_msp_serial -1 displayport_msp_attrs 0,0,0,0 displayport_msp_use_device_blink OFF displayport_max7456_col_adjust 0 displayport_max7456_row_adjust 0 displayport_max7456_inv OFF displayport_max7456_blk 0 displayport_max7456_wht 2 esc_sensor_halfduplex OFF esc_sensor_current_offset 0 frsky_spi_autobind OFF frsky_spi_tx_id 0,0,0 frsky_spi_offset 0 frsky_spi_bind_hop_data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 frsky_x_rx_num 0 frsky_spi_a1_source VBAT cc2500_spi_chip_detect ON led_inversion 0 dashboard_i2c_bus 0 dashboard_i2c_addr 60 camera_control_mode HARDWARE_PWM camera_control_ref_voltage 330 camera_control_key_delay 180 camera_control_internal_resistance 470 camera_control_button_resistance 450,270,150,68,0 camera_control_inverted OFF rangefinder_hardware NONE pinio_config 1,1,1,1 pinio_box 40,41,255,255 usb_hid_cdc OFF usb_msc_pin_pullup ON flash_spi_bus 3 rcdevice_init_dev_attempts 6 rcdevice_init_dev_attempt_interval 1000 rcdevice_protocol_version 0 rcdevice_feature 0 gyro_1_bustype SPI gyro_1_spibus 1 gyro_1_i2cBus 0 gyro_1_i2c_address 0 gyro_1_sensor_align CW90 gyro_1_align_roll 0 gyro_1_align_pitch 0 gyro_1_align_yaw 900 gyro_2_bustype SPI gyro_2_spibus 4 gyro_2_i2cBus 0 gyro_2_i2c_address 0 gyro_2_sensor_align CW180 gyro_2_align_roll 0 gyro_2_align_pitch 0 gyro_2_align_yaw 1800 i2c1_pullup OFF i2c1_clockspeed_khz 800 i2c2_pullup OFF i2c2_clockspeed_khz 800 i2c3_pullup OFF i2c3_clockspeed_khz 800 i2c4_pullup OFF i2c4_clockspeed_khz 800 spektrum_spi_protocol 0 spektrum_spi_mfg_id 0,0,0,0 spektrum_spi_num_channels 0 expresslrs_uid 0,0,0,0,0,0 expresslrs_domain AU433 expresslrs_rate_index 0 expresslrs_switch_mode HYBRID expresslrs_model_id 255 scheduler_relax_rx 25 scheduler_relax_osd 25 timezone_offset_minutes 0 rpm_filter_harmonics 3 rpm_filter_q 500 rpm_filter_min_hz 100 rpm_filter_fade_range_hz 50 rpm_filter_lpf_hz 150 flysky_spi_tx_id 0 flysky_spi_rf_channels 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 stats_min_armed_time_s -1 stats_total_flights 0 stats_total_time_s 0 stats_total_dist_m 0 name - display_name - position_alt_source DEFAULT position_alt_gps_min_sats 10 position_alt_baro_fallback_sats 7 box_user_1_name - box_user_2_name - box_user_3_name - box_user_4_name -4.2 set parameter_name # set pinio_box ###WARNING: NO CUSTOM DEFAULTS FOUND### pinio_box 40,41,255,255 Array length: 4 Default value: 255,255,255,2554.3 set parameter_name value # set pinio_box 39,40,255,255 pinio_box set to 39,40,255,255. 参考资料 【1】BetaFlight开源代码框架简介 【2】BetaFlight统一硬件资源简单配置修改 【3】BetaFlight统一硬件配置文件研读
http://www.tj-hxxt.cn/news/134470.html

相关文章:

  • 中小企业网站制作费用是多少?给别人做网站赚钱吗
  • 建设网站建设什么挣钱市场调研报告ppt
  • 官方网站建设账务处理网页升级访问永久360
  • 阿里巴巴企业网站怎么做百度信息流是什么
  • 南宁住房建设部网站公司的网站建设哪家比较好
  • 网站文风17模板网网页
  • 宁波 做网站网站怎么做搜索栏
  • 球队排名榜实时排名泰安seo推广
  • 营销型企业网站功能柳州哪家网站建设专业
  • 室内设计网站模板app搭建要多少钱
  • 山东省建设厅电工证查询网站qq互联网站备案号
  • 专业中山建网站公司做网站的名字大全
  • 徐州发布最新消息seo提升排名技巧
  • 给小孩子做网站手机助手
  • 瑜伽 网站模板网站建设简洁
  • ssh精品课程网站开发wordpress数据库压力
  • pc网站建设怎么做清远哪里有网页设计培训学费
  • 网站建设应该注意的设计要点微网站模板源代码
  • 网站免费广告湖南常德通报1例复阳病例
  • 网站建设的网络做网站后期维护工资贴吧
  • 深圳网站设计兴田德润放心石家庄网站建设蓝龙
  • 网站推广途径和方案腾讯企业邮箱忘记密码
  • 电子商务网站数据库怎么做霸县网站建设
  • 做qq主题的网站设计之路 网站
  • 石家庄建行网站wordpress 片刻主题
  • 如何制作网站教程视频讲解新乡专业网站制作
  • 百度怎么不收录我的网站最新新闻事件今天300字
  • 直播网站开发源码下载中国家具网
  • 职高网站建设例题上海知名网站制作公司
  • 网站内容有什么特点图片设计制作软件下载