2 * This file is part of Cleanflight and Betaflight.
4 * Cleanflight and Betaflight are free software. You can redistribute
5 * this software and/or modify this software under the terms of the
6 * GNU General Public License as published by the Free Software
7 * Foundation, either version 3 of the License, or (at your option)
10 * Cleanflight and Betaflight are distributed in the hope that they
11 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this software.
18 * If not, see <http://www.gnu.org/licenses/>.
26 #include "build/debug.h"
28 #include "blackbox/blackbox.h"
29 #include "blackbox/blackbox_fielddefs.h"
33 #include "common/utils.h"
34 #include "common/time.h"
36 #include "config/simplified_tuning.h"
38 #include "drivers/adc.h"
39 #include "drivers/bus_i2c.h"
40 #include "drivers/bus_spi.h"
41 #include "drivers/dshot_command.h"
42 #include "drivers/camera_control_impl.h"
43 #include "drivers/light_led.h"
44 #include "drivers/mco.h"
45 #include "drivers/pinio.h"
46 #include "drivers/sdio.h"
47 #include "drivers/vtx_common.h"
48 #include "drivers/vtx_table.h"
50 #include "config/config.h"
51 #include "fc/controlrate_profile.h"
53 #include "fc/gps_lap_timer.h"
54 #include "fc/parameter_names.h"
56 #include "fc/rc_adjustments.h"
57 #include "fc/rc_controls.h"
59 #include "flight/failsafe.h"
60 #include "flight/gps_rescue.h"
61 #include "flight/imu.h"
62 #include "flight/mixer.h"
63 #include "flight/pid.h"
64 #include "flight/position.h"
65 #include "flight/rpm_filter.h"
66 #include "flight/servos.h"
68 #include "io/beeper.h"
69 #include "io/dashboard.h"
70 #include "io/gimbal.h"
72 #include "io/ledstrip.h"
73 #include "io/serial.h"
75 #include "io/vtx_control.h"
76 #include "io/vtx_rtc6705.h"
81 #include "pg/beeper.h"
82 #include "pg/beeper_dev.h"
83 #include "pg/bus_i2c.h"
84 #include "pg/dashboard.h"
85 #include "pg/displayport_profiles.h"
86 #include "pg/dyn_notch.h"
88 #include "pg/gyrodev.h"
89 #include "pg/max7456.h"
94 #include "pg/pg_ids.h"
96 #include "pg/piniobox.h"
98 #include "pg/rx_pwm.h"
99 #include "pg/rx_spi.h"
100 #include "pg/rx_spi_cc2500.h"
101 #include "pg/rx_spi_expresslrs.h"
102 #include "pg/sdcard.h"
104 #include "pg/vtx_io.h"
106 #include "pg/scheduler.h"
108 #include "pg/rcdevice.h"
109 #include "pg/stats.h"
110 #include "pg/board.h"
112 #include "rx/a7105_flysky.h"
113 #include "rx/cc2500_frsky_common.h"
114 #include "rx/cc2500_sfhss.h"
116 #include "rx/cyrf6936_spektrum.h"
118 #include "rx/spektrum.h"
120 #include "sensors/acceleration.h"
121 #include "sensors/barometer.h"
122 #include "sensors/battery.h"
123 #include "sensors/boardalignment.h"
124 #include "sensors/compass.h"
125 #include "sensors/esc_sensor.h"
126 #include "sensors/gyro.h"
127 #include "sensors/rangefinder.h"
129 #include "telemetry/frsky_hub.h"
130 #include "telemetry/ibus_shared.h"
131 #include "telemetry/telemetry.h"
133 #include "settings.h"
136 // Sensor names (used in lookup tables for *_hardware settings and in status command output)
137 // sync with accelerationSensor_e
138 const char * const lookupTableAccHardware
[] = {
139 "AUTO", "NONE", "ADXL345", "MPU6050", "MMA8452", "BMA280", "LSM303DLHC",
140 "MPU6000", "MPU6500", "MPU9250", "ICM20601", "ICM20602", "ICM20608G", "ICM20649", "ICM20689", "ICM42605", "ICM42688P",
141 "BMI160", "BMI270", "LSM6DSO", "LSM6DSV16X", "VIRTUAL"
144 // sync with gyroHardware_e
145 const char * const lookupTableGyroHardware
[] = {
146 "AUTO", "NONE", "MPU6050", "L3G4200D", "MPU3050", "L3GD20",
147 "MPU6000", "MPU6500", "MPU9250", "ICM20601", "ICM20602", "ICM20608G", "ICM20649", "ICM20689", "ICM42605", "ICM42688P",
148 "BMI160", "BMI270", "LSM6DSO", "LSM6DSV16X", "VIRTUAL"
151 #if defined(USE_SENSOR_NAMES) || defined(USE_BARO)
152 // sync with baroSensor_e
153 const char * const lookupTableBaroHardware
[] = {
154 "AUTO", "NONE", "BMP085", "MS5611", "BMP280", "LPS", "QMP6988", "BMP388", "DPS310", "2SMPB_02B", "LPS22DF", "VIRTUAL"
157 #if defined(USE_SENSOR_NAMES) || defined(USE_MAG)
158 // sync with magSensor_e
159 const char * const lookupTableMagHardware
[] = {
160 "AUTO", "NONE", "HMC5883", "AK8975", "AK8963", "QMC5883", "LIS2MDL", "LIS3MDL", "MPU925X_AK8963", "IST8310"
163 #if defined(USE_SENSOR_NAMES) || defined(USE_RANGEFINDER)
164 const char * const lookupTableRangefinderHardware
[] = {
165 "NONE", "HCSR04", "TFMINI", "TF02"
169 const char * const lookupTableOffOn
[] = {
173 static const char * const lookupTableCrashRecovery
[] = {
174 "OFF", "ON" ,"BEEP", "DISARM"
177 static const char * const lookupTableUnit
[] = {
178 "IMPERIAL", "METRIC", "BRITISH"
181 static const char * const lookupTableAlignment
[] = {
194 #ifdef USE_MULTI_GYRO
195 static const char * const lookupTableGyro
[] = {
196 "FIRST", "SECOND", "BOTH"
201 static const char * const lookupTableGpsProvider
[] = {
202 "NMEA", "UBLOX", "MSP"
205 static const char * const lookupTableGpsSbasMode
[] = {
206 "AUTO", "EGNOS", "WAAS", "MSAS", "GAGAN", "NONE"
209 static const char * const lookupTableGpsUbloxModels
[] = {
210 "PORTABLE", "STATIONARY", "PEDESTRIAN", "AUTOMOTIVE", "AT_SEA", "AIRBORNE_1G", "AIRBORNE_2G", "AIRBORNE_4G"
213 static const char * const lookupTableGpsUbloxUtcStandard
[] = {
214 "AUTO", "USNO", "EU", "SU", "NTSC"
219 static const char * const lookupTableGimbalMode
[] = {
225 static const char * const lookupTableBlackboxDevice
[] = {
226 "NONE", "SPIFLASH", "SDCARD", "SERIAL"
229 static const char * const lookupTableBlackboxMode
[] = {
230 "NORMAL", "MOTOR_TEST", "ALWAYS"
233 static const char * const lookupTableBlackboxSampleRate
[] = {
234 "1/1", "1/2", "1/4", "1/8", "1/16"
239 static const char * const lookupTableSerialRX
[] = {
260 // sync with rx_spi_protocol_e
261 static const char * const lookupTableRxSpi
[] = {
285 static const char * const lookupTableGyroHardwareLpf
[] = {
289 #ifdef USE_GYRO_DLPF_EXPERIMENTAL
294 #ifdef USE_CAMERA_CONTROL
295 static const char * const lookupTableCameraControlMode
[] = {
302 static const char * const lookupTablePwmProtocol
[] = {
303 "PWM", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED",
304 "DSHOT150", "DSHOT300", "DSHOT600", "PROSHOT1000",
308 static const char * const lookupTableLowpassType
[] = {
315 static const char * const lookupTableDtermLowpassType
[] = {
322 static const char * const lookupTableFailsafe
[] = {
323 "AUTO-LAND", "DROP", "GPS-RESCUE"
326 static const char * const lookupTableFailsafeSwitchMode
[] = {
327 "STAGE1", "KILL", "STAGE2"
330 static const char * const lookupTableBusType
[] = {
331 "NONE", "I2C", "SPI", "SLAVE",
332 #if defined(USE_SPI_GYRO) && defined(USE_I2C_GYRO)
338 static const char * const lookupTableMax7456Clock
[] = {
339 "HALF", "NOMINAL", "DOUBLE"
343 #ifdef USE_RX_FRSKY_SPI
344 static const char * const lookupTableFrskySpiA1Source
[] = {
345 "VBAT", "EXTADC", "CONST"
349 #ifdef USE_GYRO_OVERFLOW_CHECK
350 static const char * const lookupTableGyroOverflowCheck
[] = {
355 static const char * const lookupTableRatesType
[] = {
356 "BETAFLIGHT", "RACEFLIGHT", "KISS", "ACTUAL", "QUICK"
360 static const char * const lookupOverclock
[] = {
362 #if defined(STM32F40_41xxx) || defined(STM32G4)
363 "192MHZ", "216MHZ", "240MHZ"
364 #elif defined(STM32F411xE)
366 #elif defined(STM32F7)
373 static const char * const lookupLedStripFormatRGB
[] = {
378 static const char * const lookupTableThrottleLimitType
[] = {
379 "OFF", "SCALE", "CLIP"
383 #ifdef USE_GPS_RESCUE
384 static const char * const lookupTableRescueSanityType
[] = {
385 "RESCUE_SANITY_OFF", "RESCUE_SANITY_ON", "RESCUE_SANITY_FS_ONLY"
387 const char * const lookupTableRescueAltitudeMode
[] = {
388 "MAX_ALT", "FIXED_ALT", "CURRENT_ALT"
392 #if defined(USE_VIDEO_SYSTEM)
393 static const char * const lookupTableVideoSystem
[] = {
394 "AUTO", "PAL", "NTSC", "HD"
398 #if defined(USE_ITERM_RELAX)
399 const char * const lookupTableItermRelax
[] = {
400 "OFF", "RP", "RPY", "RP_INC", "RPY_INC"
402 const char * const lookupTableItermRelaxType
[] = {
407 #ifdef USE_ACRO_TRAINER
408 static const char * const lookupTableAcroTrainerDebug
[] = {
411 #endif // USE_ACRO_TRAINER
413 #ifdef USE_RC_SMOOTHING_FILTER
414 static const char * const lookupTableRcSmoothingDebug
[] = {
415 "ROLL", "PITCH", "YAW", "THROTTLE"
417 #endif // USE_RC_SMOOTHING_FILTER
419 #ifdef USE_VTX_COMMON
420 static const char * const lookupTableVtxLowPowerDisarm
[] = {
421 "OFF", "ON", "UNTIL_FIRST_ARM"
426 static const char * const lookupTableSdcardMode
[] = {
431 #ifdef USE_LAUNCH_CONTROL
432 static const char * const lookupTableLaunchControlMode
[] = {
433 "NORMAL", "PITCHONLY", "FULL"
438 static const char * const lookupTableTpaMode
[] = {
444 #ifdef USE_LED_STRIP_STATUS_MODE
445 static const char * const lookupTableLEDProfile
[] = {
446 "RACE", "BEACON", "STATUS"
449 static const char * const lookupTableLEDProfile
[] = {
455 const char * const lookupTableLedstripColors
[COLOR_COUNT
] = {
472 static const char * const lookupTableGyroFilterDebug
[] = {
473 "ROLL", "PITCH", "YAW"
476 static const char * const lookupTablePositionAltitudeSource
[] = {
477 "DEFAULT", "BARO_ONLY", "GPS_ONLY"
480 static const char * const lookupTableOffOnAuto
[] = {
484 const char* const lookupTableFeedforwardAveraging
[] = {
485 "OFF", "2_POINT", "3_POINT", "4_POINT"
488 static const char* const lookupTableDshotBitbangedTimer
[] = {
489 "AUTO", "TIM1", "TIM8"
492 const char * const lookupTableOsdDisplayPortDevice
[] = {
493 "NONE", "AUTO", "MAX7456", "MSP", "FRSKYOSD"
497 static const char * const lookupTableOsdLogoOnArming
[] = {
498 "OFF", "ON", "FIRST_ARMING",
501 const char * const lookupTableSimplifiedTuningPidsMode
[] = {
505 static const char* const lookupTableMixerType
[] = {
506 "LEGACY", "LINEAR", "DYNAMIC",
510 const char * const lookupTableCMSMenuBackgroundType
[] = {
511 "TRANSPARENT", "BLACK", "GRAY", "LIGHT_GRAY"
515 #ifdef USE_RX_EXPRESSLRS
516 static const char* const lookupTableFreqDomain
[] = {
518 "AU433", "AU915", "EU433", "EU868", "IN866", "FCC915",
523 #if !defined(USE_RX_SX127X) && !defined(USE_RX_SX1280)
528 static const char* const lookupTableSwitchMode
[] = {
533 #define LOOKUP_TABLE_ENTRY(name) { name, ARRAYLEN(name) }
535 const lookupTableEntry_t lookupTables
[] = {
536 LOOKUP_TABLE_ENTRY(lookupTableOffOn
),
537 LOOKUP_TABLE_ENTRY(lookupTableUnit
),
538 LOOKUP_TABLE_ENTRY(lookupTableAlignment
),
540 LOOKUP_TABLE_ENTRY(lookupTableGpsProvider
),
541 LOOKUP_TABLE_ENTRY(lookupTableGpsSbasMode
),
542 LOOKUP_TABLE_ENTRY(lookupTableGpsUbloxModels
),
543 LOOKUP_TABLE_ENTRY(lookupTableGpsUbloxUtcStandard
),
544 #ifdef USE_GPS_RESCUE
545 LOOKUP_TABLE_ENTRY(lookupTableRescueSanityType
),
546 LOOKUP_TABLE_ENTRY(lookupTableRescueAltitudeMode
),
550 LOOKUP_TABLE_ENTRY(lookupTableBlackboxDevice
),
551 LOOKUP_TABLE_ENTRY(lookupTableBlackboxMode
),
552 LOOKUP_TABLE_ENTRY(lookupTableBlackboxSampleRate
),
554 LOOKUP_TABLE_ENTRY(currentMeterSourceNames
),
555 LOOKUP_TABLE_ENTRY(voltageMeterSourceNames
),
557 LOOKUP_TABLE_ENTRY(lookupTableGimbalMode
),
560 LOOKUP_TABLE_ENTRY(lookupTableSerialRX
),
563 LOOKUP_TABLE_ENTRY(lookupTableRxSpi
),
565 LOOKUP_TABLE_ENTRY(lookupTableGyroHardwareLpf
),
566 LOOKUP_TABLE_ENTRY(lookupTableAccHardware
),
568 LOOKUP_TABLE_ENTRY(lookupTableBaroHardware
),
571 LOOKUP_TABLE_ENTRY(lookupTableMagHardware
),
573 LOOKUP_TABLE_ENTRY(debugModeNames
),
574 LOOKUP_TABLE_ENTRY(lookupTablePwmProtocol
),
575 LOOKUP_TABLE_ENTRY(lookupTableLowpassType
),
576 LOOKUP_TABLE_ENTRY(lookupTableDtermLowpassType
),
577 LOOKUP_TABLE_ENTRY(lookupTableFailsafe
),
578 LOOKUP_TABLE_ENTRY(lookupTableFailsafeSwitchMode
),
579 LOOKUP_TABLE_ENTRY(lookupTableCrashRecovery
),
580 #ifdef USE_CAMERA_CONTROL
581 LOOKUP_TABLE_ENTRY(lookupTableCameraControlMode
),
583 LOOKUP_TABLE_ENTRY(lookupTableBusType
),
585 LOOKUP_TABLE_ENTRY(lookupTableMax7456Clock
),
587 #ifdef USE_RX_FRSKY_SPI
588 LOOKUP_TABLE_ENTRY(lookupTableFrskySpiA1Source
),
590 #ifdef USE_RANGEFINDER
591 LOOKUP_TABLE_ENTRY(lookupTableRangefinderHardware
),
593 #ifdef USE_GYRO_OVERFLOW_CHECK
594 LOOKUP_TABLE_ENTRY(lookupTableGyroOverflowCheck
),
596 LOOKUP_TABLE_ENTRY(lookupTableRatesType
),
598 LOOKUP_TABLE_ENTRY(lookupOverclock
),
601 LOOKUP_TABLE_ENTRY(lookupLedStripFormatRGB
),
603 #ifdef USE_MULTI_GYRO
604 LOOKUP_TABLE_ENTRY(lookupTableGyro
),
606 LOOKUP_TABLE_ENTRY(lookupTableThrottleLimitType
),
607 #if defined(USE_VIDEO_SYSTEM)
608 LOOKUP_TABLE_ENTRY(lookupTableVideoSystem
),
610 #if defined(USE_ITERM_RELAX)
611 LOOKUP_TABLE_ENTRY(lookupTableItermRelax
),
612 LOOKUP_TABLE_ENTRY(lookupTableItermRelaxType
),
614 #ifdef USE_ACRO_TRAINER
615 LOOKUP_TABLE_ENTRY(lookupTableAcroTrainerDebug
),
616 #endif // USE_ACRO_TRAINER
617 #ifdef USE_RC_SMOOTHING_FILTER
618 LOOKUP_TABLE_ENTRY(lookupTableRcSmoothingDebug
),
619 #endif // USE_RC_SMOOTHING_FILTER
620 #ifdef USE_VTX_COMMON
621 LOOKUP_TABLE_ENTRY(lookupTableVtxLowPowerDisarm
),
623 LOOKUP_TABLE_ENTRY(lookupTableGyroHardware
),
625 LOOKUP_TABLE_ENTRY(lookupTableSdcardMode
),
627 #ifdef USE_LAUNCH_CONTROL
628 LOOKUP_TABLE_ENTRY(lookupTableLaunchControlMode
),
631 LOOKUP_TABLE_ENTRY(lookupTableTpaMode
),
634 LOOKUP_TABLE_ENTRY(lookupTableLEDProfile
),
635 LOOKUP_TABLE_ENTRY(lookupTableLedstripColors
),
638 LOOKUP_TABLE_ENTRY(lookupTableGyroFilterDebug
),
640 LOOKUP_TABLE_ENTRY(lookupTablePositionAltitudeSource
),
641 LOOKUP_TABLE_ENTRY(lookupTableOffOnAuto
),
642 LOOKUP_TABLE_ENTRY(lookupTableFeedforwardAveraging
),
643 LOOKUP_TABLE_ENTRY(lookupTableDshotBitbangedTimer
),
644 LOOKUP_TABLE_ENTRY(lookupTableOsdDisplayPortDevice
),
647 LOOKUP_TABLE_ENTRY(lookupTableOsdLogoOnArming
),
649 LOOKUP_TABLE_ENTRY(lookupTableMixerType
),
650 LOOKUP_TABLE_ENTRY(lookupTableSimplifiedTuningPidsMode
),
652 LOOKUP_TABLE_ENTRY(lookupTableCMSMenuBackgroundType
),
654 #ifdef USE_RX_EXPRESSLRS
655 LOOKUP_TABLE_ENTRY(lookupTableFreqDomain
),
656 LOOKUP_TABLE_ENTRY(lookupTableSwitchMode
),
660 #undef LOOKUP_TABLE_ENTRY
662 const clivalue_t valueTable
[] = {
664 { 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
) },
666 #if defined(USE_GYRO_SPI_ICM20649)
667 { "gyro_high_range", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_high_fsr
) },
670 { 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
) },
671 { 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
) },
673 { 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
) },
674 { 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
) },
676 { "gyro_notch1_hz", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_soft_notch_hz_1
) },
677 { "gyro_notch1_cutoff", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_soft_notch_cutoff_1
) },
678 { "gyro_notch2_hz", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_soft_notch_hz_2
) },
679 { "gyro_notch2_cutoff", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_soft_notch_cutoff_2
) },
681 { "gyro_calib_duration", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 50, 3000 }, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyroCalibrationDuration
) },
682 { "gyro_calib_noise_limit", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyroMovementCalibrationThreshold
) },
683 { "gyro_offset_yaw", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -1000, 1000 }, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_offset_yaw
) },
684 #ifdef USE_GYRO_OVERFLOW_CHECK
685 { "gyro_overflow_detect", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GYRO_OVERFLOW_CHECK
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, checkOverflow
) },
687 #ifdef USE_YAW_SPIN_RECOVERY
688 { "yaw_spin_recovery", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON_AUTO
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, yaw_spin_recovery
) },
689 { "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
) },
692 #ifdef USE_MULTI_GYRO
693 { PARAM_NAME_GYRO_TO_USE
, VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GYRO
}, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_to_use
) },
695 #if defined(USE_DYN_NOTCH_FILTER)
696 { 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
) },
697 { PARAM_NAME_DYN_NOTCH_Q
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 1000 }, PG_DYN_NOTCH_CONFIG
, offsetof(dynNotchConfig_t
, dyn_notch_q
) },
698 { 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
) },
699 { 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
) },
702 { "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
) },
703 { "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
) },
704 { "gyro_lpf1_dyn_expo", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 10 }, PG_GYRO_CONFIG
, offsetof(gyroConfig_t
, gyro_lpf1_dyn_expo
) },
706 { "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
) },
708 // PG_ACCELEROMETER_CONFIG
710 { PARAM_NAME_ACC_HARDWARE
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_ACC_HARDWARE
}, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, acc_hardware
) },
711 #if defined(USE_GYRO_SPI_ICM20649)
712 { "acc_high_range", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, acc_high_fsr
) },
714 { PARAM_NAME_ACC_LPF_HZ
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, acc_lpf_hz
) },
715 { "acc_trim_pitch", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -300, 300 }, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, accelerometerTrims
.values
.pitch
) },
716 { "acc_trim_roll", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -300, 300 }, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, accelerometerTrims
.values
.roll
) },
718 // 4 elements are output for the ACC calibration - The 3 axis values and the 4th representing whether calibration has been performed
719 { "acc_calibration", VAR_INT16
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 4, PG_ACCELEROMETER_CONFIG
, offsetof(accelerometerConfig_t
, accZero
.raw
) },
724 { "align_mag", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_ALIGNMENT
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_alignment
) },
725 { "mag_align_roll", VAR_INT16
| HARDWARE_VALUE
, .config
.minmax
= { -3600, 3600 }, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_customAlignment
.roll
) },
726 { "mag_align_pitch", VAR_INT16
| HARDWARE_VALUE
, .config
.minmax
= { -3600, 3600 }, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_customAlignment
.pitch
) },
727 { "mag_align_yaw", VAR_INT16
| HARDWARE_VALUE
, .config
.minmax
= { -3600, 3600 }, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_customAlignment
.yaw
) },
728 { "mag_bustype", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BUS_TYPE
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_busType
) },
729 { "mag_i2c_device", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2CDEV_COUNT
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_i2c_device
) },
730 { "mag_i2c_address", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2C_ADDR7_MAX
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_i2c_address
) },
731 { "mag_spi_device", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_spi_device
) },
732 { PARAM_NAME_MAG_HARDWARE
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_MAG_HARDWARE
}, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, mag_hardware
) },
733 { "mag_calibration", VAR_INT16
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= XYZ_AXIS_COUNT
, PG_COMPASS_CONFIG
, offsetof(compassConfig_t
, magZero
.raw
) },
736 // PG_BAROMETER_CONFIG
738 { "baro_bustype", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BUS_TYPE
}, PG_BAROMETER_CONFIG
, offsetof(barometerConfig_t
, baro_busType
) },
739 { "baro_spi_device", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, 5 }, PG_BAROMETER_CONFIG
, offsetof(barometerConfig_t
, baro_spi_device
) },
740 { "baro_i2c_device", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, 5 }, PG_BAROMETER_CONFIG
, offsetof(barometerConfig_t
, baro_i2c_device
) },
741 { "baro_i2c_address", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2C_ADDR7_MAX
}, PG_BAROMETER_CONFIG
, offsetof(barometerConfig_t
, baro_i2c_address
) },
742 { PARAM_NAME_BARO_HARDWARE
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BARO_HARDWARE
}, PG_BAROMETER_CONFIG
, offsetof(barometerConfig_t
, baro_hardware
) },
746 { "mid_rc", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1200, 1700 }, PG_RX_CONFIG
, offsetof(rxConfig_t
, midrc
) },
747 { "min_check", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, mincheck
) },
748 { "max_check", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, maxcheck
) },
749 { "rssi_channel", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { 0, MAX_SUPPORTED_RC_CHANNEL_COUNT
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rssi_channel
) },
750 { "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
) },
751 { "rssi_scale", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { RSSI_SCALE_MIN
, RSSI_SCALE_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rssi_scale
) },
752 { "rssi_offset", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -100, 100 }, PG_RX_CONFIG
, offsetof(rxConfig_t
, rssi_offset
) },
753 { "rssi_invert", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rssi_invert
) },
754 { "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
) },
755 { "rssi_smoothing", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rssi_smoothing
) },
757 #ifdef USE_RC_SMOOTHING_FILTER
758 { PARAM_NAME_RC_SMOOTHING
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rc_smoothing_mode
) },
759 { 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
) },
760 { 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
) },
761 { 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
) },
762 { 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
) },
763 { 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
) },
764 { 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
) },
765 #endif // USE_RC_SMOOTHING_FILTER
767 { "fpv_mix_degrees", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 90 }, PG_RX_CONFIG
, offsetof(rxConfig_t
, fpvCamAngleDegrees
) },
768 { "max_aux_channels", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, MAX_AUX_CHANNEL_COUNT
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, max_aux_channel
) },
770 { PARAM_NAME_SERIAL_RX_PROVIDER
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_SERIAL_RX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, serialrx_provider
) },
771 { "serialrx_inverted", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, serialrx_inverted
) },
773 #ifdef USE_SPEKTRUM_BIND
774 { "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
) },
775 { "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
) },
777 #ifdef USE_SERIALRX_SRXL2
778 { "srxl2_unit_id", VAR_UINT8
| MASTER_VALUE
, .config
.minmax
= { 0, 0xf }, PG_RX_CONFIG
, offsetof(rxConfig_t
, srxl2_unit_id
) },
779 { "srxl2_baud_fast", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, srxl2_baud_fast
) },
781 #if defined(USE_SERIALRX_SBUS)
782 { "sbus_baud_fast", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, sbus_baud_fast
) },
784 #if defined(USE_CRSF_V3)
785 { "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
) },
787 { "airmode_start_throttle_percent", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_RX_CONFIG
, offsetof(rxConfig_t
, airModeActivateThreshold
) },
788 { "rx_min_usec", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rx_min_usec
) },
789 { "rx_max_usec", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, rx_max_usec
) },
790 { "serialrx_halfduplex", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CONFIG
, offsetof(rxConfig_t
, halfDuplex
) },
791 #if defined(USE_RX_MSP_OVERRIDE)
792 { "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
)},
795 { "rx_spi_protocol", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_RX_SPI
}, PG_RX_SPI_CONFIG
, offsetof(rxSpiConfig_t
, rx_spi_protocol
) },
796 { "rx_spi_bus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_RX_SPI_CONFIG
, offsetof(rxSpiConfig_t
, spibus
) },
797 { "rx_spi_led_inversion", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_SPI_CONFIG
, offsetof(rxSpiConfig_t
, ledInversion
) },
802 { "adc_device", VAR_INT8
| HARDWARE_VALUE
, .config
.minmax
= { 0, ADCDEV_COUNT
}, PG_ADC_CONFIG
, offsetof(adcConfig_t
, device
) },
803 { "adc_vrefint_calibration", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 2000 }, PG_ADC_CONFIG
, offsetof(adcConfig_t
, vrefIntCalibration
) },
804 { "adc_tempsensor_calibration30", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 2000 }, PG_ADC_CONFIG
, offsetof(adcConfig_t
, tempSensorCalibration1
) },
805 { "adc_tempsensor_calibration110", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 2000 }, PG_ADC_CONFIG
, offsetof(adcConfig_t
, tempSensorCalibration2
) },
809 #if defined(USE_RX_PWM)
810 { "input_filtering_mode", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PWM_CONFIG
, offsetof(pwmConfig_t
, inputFilteringMode
) },
813 // PG_BLACKBOX_CONFIG
815 { "blackbox_sample_rate", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BLACKBOX_SAMPLE_RATE
}, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, sample_rate
) },
816 { "blackbox_device", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BLACKBOX_DEVICE
}, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, device
) },
817 { "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
) },
818 { "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
) },
819 { "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
) },
820 { "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
) },
822 { "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
) },
824 #if defined(USE_BARO) || defined(USE_RANGEFINDER)
825 { "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
) },
827 { "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
) },
828 { "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
) },
829 { "blackbox_disable_gyrounfilt",VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= FLIGHT_LOG_FIELD_SELECT_GYROUNFILT
, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, fields_disabled_mask
) },
831 { "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
) },
833 { "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
) },
834 { "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
) },
835 #ifdef USE_DSHOT_TELEMETRY
836 { "blackbox_disable_rpm", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= FLIGHT_LOG_FIELD_SELECT_RPM
, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, fields_disabled_mask
) },
839 { "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
) },
841 { "blackbox_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_BLACKBOX_MODE
}, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, mode
) },
842 { "blackbox_high_resolution", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BLACKBOX_CONFIG
, offsetof(blackboxConfig_t
, high_resolution
) },
846 { "min_throttle", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, minthrottle
) },
847 { "max_throttle", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, maxthrottle
) },
848 { "min_command", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, mincommand
) },
849 { "motor_kv", VAR_UINT16
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 1, 40000 }, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, kv
) },
851 { PARAM_NAME_DSHOT_IDLE_VALUE
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 2000 }, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, digitalIdleOffsetValue
) },
852 #ifdef USE_DSHOT_DMAR
853 { "dshot_burst", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON_AUTO
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useBurstDshot
) },
855 #ifdef USE_DSHOT_TELEMETRY
856 { PARAM_NAME_DSHOT_BIDIR
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useDshotTelemetry
) },
857 { "dshot_edt", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useDshotEdt
) },
859 #ifdef USE_DSHOT_BITBANG
860 { "dshot_bitbang", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON_AUTO
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useDshotBitbang
) },
861 { "dshot_bitbang_timer", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_DSHOT_BITBANGED_TIMER
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useDshotBitbangedTimer
) },
864 { PARAM_NAME_USE_UNSYNCED_PWM
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.useUnsyncedPwm
) },
865 { 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
) },
866 { PARAM_NAME_MOTOR_PWM_RATE
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 200, 32000 }, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.motorPwmRate
) },
867 { "motor_pwm_inversion", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.motorPwmInversion
) },
868 { PARAM_NAME_MOTOR_POLES
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 4, UINT8_MAX
}, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, motorPoleCount
) },
869 { "motor_output_reordering", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= MAX_SUPPORTED_MOTORS
, PG_MOTOR_CONFIG
, offsetof(motorConfig_t
, dev
.motorOutputReordering
)},
871 // PG_THROTTLE_CORRECTION_CONFIG
872 { "thr_corr_value", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 150 }, PG_THROTTLE_CORRECTION_CONFIG
, offsetof(throttleCorrectionConfig_t
, throttle_correction_value
) },
873 { "thr_corr_angle", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 900 }, PG_THROTTLE_CORRECTION_CONFIG
, offsetof(throttleCorrectionConfig_t
, throttle_correction_angle
) },
875 // PG_FAILSAFE_CONFIG
876 { "failsafe_delay", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PERIOD_RXDATA_RECOVERY
/ MILLIS_PER_TENTH_SECOND
, 200 }, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_delay
) },
877 { "failsafe_off_delay", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_off_delay
) },
878 { "failsafe_throttle", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_throttle
) },
879 { "failsafe_switch_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_FAILSAFE_SWITCH_MODE
}, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_switch_mode
) },
880 { "failsafe_throttle_low_delay",VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 300 }, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_throttle_low_delay
) },
881 { "failsafe_procedure", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_FAILSAFE
}, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_procedure
) },
882 { "failsafe_recovery_delay", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 200 }, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_recovery_delay
) },
883 { "failsafe_stick_threshold", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 50 }, PG_FAILSAFE_CONFIG
, offsetof(failsafeConfig_t
, failsafe_stick_threshold
) },
885 // PG_BOARDALIGNMENT_CONFIG
886 { "align_board_roll", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -180, 360 }, PG_BOARD_ALIGNMENT
, offsetof(boardAlignment_t
, rollDegrees
) },
887 { "align_board_pitch", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -180, 360 }, PG_BOARD_ALIGNMENT
, offsetof(boardAlignment_t
, pitchDegrees
) },
888 { "align_board_yaw", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -180, 360 }, PG_BOARD_ALIGNMENT
, offsetof(boardAlignment_t
, yawDegrees
) },
892 { "gimbal_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GIMBAL_MODE
}, PG_GIMBAL_CONFIG
, offsetof(gimbalConfig_t
, mode
) },
896 { "bat_capacity", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 20000 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, batteryCapacity
) },
897 { "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
) },
898 { "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
) },
899 { "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
) },
900 { "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
) },
901 { "vbat_hysteresis", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 250 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbathysteresis
) },
902 { "current_meter", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_CURRENT_METER
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, currentMeterSource
) },
903 { "battery_meter", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_VOLTAGE_METER
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, voltageMeterSource
) },
904 { "vbat_detect_cell_voltage", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 2000 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbatnotpresentcellvoltage
) },
905 { "use_vbat_alerts", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, useVBatAlerts
) },
906 { "use_cbat_alerts", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, useConsumptionAlerts
) },
907 { "cbat_alert_percent", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, consumptionWarningPercentage
) },
908 { "vbat_cutoff_percent", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, lvcPercentage
) },
909 { "force_battery_cell_count", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 24 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, forceBatteryCellCount
) },
910 { "vbat_display_lpf_period", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, UINT8_MAX
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbatDisplayLpfPeriod
) },
911 #if defined(USE_BATTERY_VOLTAGE_SAG_COMPENSATION)
912 { "vbat_sag_lpf_period", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, UINT8_MAX
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbatSagLpfPeriod
) },
914 { "ibat_lpf_period", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, ibatLpfPeriod
) },
915 { "vbat_duration_for_warning", VAR_UINT8
| MASTER_VALUE
, .config
.minmax
= { 0, 150 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbatDurationForWarning
) },
916 { "vbat_duration_for_critical", VAR_UINT8
| MASTER_VALUE
, .config
.minmax
= { 0, 150 }, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, vbatDurationForCritical
) },
918 // PG_VOLTAGE_SENSOR_ADC_CONFIG
919 { "vbat_scale", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { VBAT_SCALE_MIN
, VBAT_SCALE_MAX
}, PG_VOLTAGE_SENSOR_ADC_CONFIG
, offsetof(voltageSensorADCConfig_t
, vbatscale
) },
920 { "vbat_divider", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { VBAT_DIVIDER_MIN
, VBAT_DIVIDER_MAX
}, PG_VOLTAGE_SENSOR_ADC_CONFIG
, offsetof(voltageSensorADCConfig_t
, vbatresdivval
) },
921 { "vbat_multiplier", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { VBAT_MULTIPLIER_MIN
, VBAT_MULTIPLIER_MAX
}, PG_VOLTAGE_SENSOR_ADC_CONFIG
, offsetof(voltageSensorADCConfig_t
, vbatresdivmultiplier
) },
923 // PG_CURRENT_SENSOR_ADC_CONFIG
924 { "ibata_scale", VAR_INT16
| HARDWARE_VALUE
, .config
.minmax
= { -16000, 16000 }, PG_CURRENT_SENSOR_ADC_CONFIG
, offsetof(currentSensorADCConfig_t
, scale
) },
925 { "ibata_offset", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -32000, 32000 }, PG_CURRENT_SENSOR_ADC_CONFIG
, offsetof(currentSensorADCConfig_t
, offset
) },
926 // PG_CURRENT_SENSOR_ADC_CONFIG
927 #ifdef USE_VIRTUAL_CURRENT_METER
928 { "ibatv_scale", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -16000, 16000 }, PG_CURRENT_SENSOR_VIRTUAL_CONFIG
, offsetof(currentSensorVirtualConfig_t
, scale
) },
929 { "ibatv_offset", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 16000 }, PG_CURRENT_SENSOR_VIRTUAL_CONFIG
, offsetof(currentSensorVirtualConfig_t
, offset
) },
931 #ifdef USE_BATTERY_CONTINUE
932 { "battery_continue", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BATTERY_CONFIG
, offsetof(batteryConfig_t
, isBatteryContinueEnabled
) },
936 // PG_BEEPER_DEV_CONFIG
937 { "beeper_inversion", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BEEPER_DEV_CONFIG
, offsetof(beeperDevConfig_t
, isInverted
) },
938 { "beeper_od", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_BEEPER_DEV_CONFIG
, offsetof(beeperDevConfig_t
, isOpenDrain
) },
939 { "beeper_frequency", VAR_INT16
| HARDWARE_VALUE
, .config
.minmax
= { 0, 16000 }, PG_BEEPER_DEV_CONFIG
, offsetof(beeperDevConfig_t
, frequency
) },
943 { "beeper_dshot_beacon_tone", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= {1, DSHOT_CMD_BEACON5
}, PG_BEEPER_CONFIG
, offsetof(beeperConfig_t
, dshotBeaconTone
) },
948 { "yaw_motors_reversed", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, yaw_motors_reversed
) },
949 { "mixer_type", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_MIXER_TYPE
}, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, mixer_type
) },
950 { "crashflip_motor_percent", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, crashflip_motor_percent
) },
951 { "crashflip_expo", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, crashflip_expo
) },
953 { "rpm_limit", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, rpm_limit
) },
954 { "rpm_limit_p", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, rpm_limit_p
) },
955 { "rpm_limit_i", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 1000 }, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, rpm_limit_i
) },
956 { "rpm_limit_d", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, rpm_limit_d
) },
957 { "rpm_limit_value", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, UINT16_MAX
}, PG_MIXER_CONFIG
, offsetof(mixerConfig_t
, rpm_limit_value
) },
960 // PG_MOTOR_3D_CONFIG
961 { "3d_deadband_low", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_RANGE_MIDDLE
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, deadband3d_low
) },
962 { "3d_deadband_high", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_RANGE_MIDDLE
, PWM_PULSE_MAX
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, deadband3d_high
) },
963 { "3d_neutral", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, neutral3d
) },
964 { "3d_deadband_throttle", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 100 }, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, deadband3d_throttle
) },
965 { "3d_limit_low", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_RANGE_MIDDLE
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, limit3d_low
) },
966 { "3d_limit_high", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_RANGE_MIDDLE
, PWM_PULSE_MAX
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, limit3d_high
) },
967 { "3d_switched_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MOTOR_3D_CONFIG
, offsetof(flight3DConfig_t
, switched_mode3d
) },
971 { "servo_center_pulse", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { PWM_PULSE_MIN
, PWM_PULSE_MAX
}, PG_SERVO_CONFIG
, offsetof(servoConfig_t
, dev
.servoCenterPulse
) },
972 { "servo_pwm_rate", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 50, 498 }, PG_SERVO_CONFIG
, offsetof(servoConfig_t
, dev
.servoPwmRate
) },
973 { "servo_lowpass_hz", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 400}, PG_SERVO_CONFIG
, offsetof(servoConfig_t
, servo_lowpass_freq
) },
974 { "tri_unarmed_servo", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SERVO_CONFIG
, offsetof(servoConfig_t
, tri_unarmed_servo
) },
975 { "channel_forwarding_start", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { AUX1
, MAX_SUPPORTED_RC_CHANNEL_COUNT
}, PG_SERVO_CONFIG
, offsetof(servoConfig_t
, channelForwardingStartChannel
) },
978 // PG_CONTROLRATE_PROFILES
979 #ifdef USE_PROFILE_NAMES
980 { "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
) },
982 { PARAM_NAME_THR_MID
, VAR_UINT8
| PROFILE_RATE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_CONTROL_RATE_PROFILES
, offsetof(controlRateConfig_t
, thrMid8
) },
983 { PARAM_NAME_THR_EXPO
, VAR_UINT8
| PROFILE_RATE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_CONTROL_RATE_PROFILES
, offsetof(controlRateConfig_t
, thrExpo8
) },
984 { 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
) },
985 { "quickrates_rc_expo", VAR_UINT8
| PROFILE_RATE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_CONTROL_RATE_PROFILES
, offsetof(controlRateConfig_t
, quickRatesRcExpo
) },
986 { "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
]) },
987 { "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
]) },
988 { "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
]) },
989 { "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
]) },
990 { "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
]) },
991 { "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
]) },
992 { "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
]) },
993 { "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
]) },
994 { "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
]) },
995 { 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
) },
996 { PARAM_NAME_THROTTLE_LIMIT_PERCENT
, VAR_UINT8
| PROFILE_RATE_VALUE
, .config
.minmaxUnsigned
= { 25, 100 }, PG_CONTROL_RATE_PROFILES
, offsetof(controlRateConfig_t
, throttle_limit_percent
) },
997 { "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
]) },
998 { "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
]) },
999 { "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
]) },
1002 { "reboot_character", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 48, 126 }, PG_SERIAL_CONFIG
, offsetof(serialConfig_t
, reboot_character
) },
1003 { "serial_update_rate_hz", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 100, 2000 }, PG_SERIAL_CONFIG
, offsetof(serialConfig_t
, serial_update_rate_hz
) },
1006 { PARAM_NAME_IMU_DCM_KP
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 32000 }, PG_IMU_CONFIG
, offsetof(imuConfig_t
, imu_dcm_kp
) },
1007 { PARAM_NAME_IMU_DCM_KI
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 32000 }, PG_IMU_CONFIG
, offsetof(imuConfig_t
, imu_dcm_ki
) },
1008 { PARAM_NAME_IMU_SMALL_ANGLE
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 180 }, PG_IMU_CONFIG
, offsetof(imuConfig_t
, small_angle
) },
1009 { PARAM_NAME_IMU_PROCESS_DENOM
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 4 }, PG_IMU_CONFIG
, offsetof(imuConfig_t
, imu_process_denom
) },
1011 { PARAM_NAME_IMU_MAG_DECLINATION
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3599 }, PG_IMU_CONFIG
, offsetof(imuConfig_t
, mag_declination
) },
1015 { "auto_disarm_delay", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 60 }, PG_ARMING_CONFIG
, offsetof(armingConfig_t
, auto_disarm_delay
) },
1016 { 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
) },
1020 { PARAM_NAME_GPS_PROVIDER
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GPS_PROVIDER
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, provider
) },
1021 { PARAM_NAME_GPS_SBAS_MODE
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GPS_SBAS_MODE
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, sbasMode
) },
1022 { PARAM_NAME_GPS_AUTO_CONFIG
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, autoConfig
) },
1023 { PARAM_NAME_GPS_AUTO_BAUD
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, autoBaud
) },
1024 { 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
) },
1025 { 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
) },
1026 { PARAM_NAME_GPS_UPDATE_RATE_HZ
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= {1, 20}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, gps_update_rate_hz
) },
1027 { PARAM_NAME_GPS_UBLOX_UTC_STANDARD
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_GPS_UBLOX_UTC_STANDARD
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, gps_ublox_utc_standard
) },
1028 { 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
) },
1029 { 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
) },
1030 { 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
) },
1031 { PARAM_NAME_GPS_SBAS_INTEGRITY
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, sbas_integrity
) },
1032 { PARAM_NAME_GPS_NMEA_CUSTOM_COMMANDS
, VAR_UINT8
| MASTER_VALUE
| MODE_STRING
, .config
.string
= { 1, NMEA_CUSTOM_COMMANDS_MAX_LENGTH
, STRING_FLAGS_NONE
}, PG_GPS_CONFIG
, offsetof(gpsConfig_t
, nmeaCustomCommands
) },
1034 #ifdef USE_GPS_RESCUE
1036 { PARAM_NAME_GPS_RESCUE_MIN_START_DIST
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 30 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, minStartDistM
) },
1037 { 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
) },
1038 { PARAM_NAME_GPS_RESCUE_INITIAL_CLIMB
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, initialClimbM
) },
1039 { PARAM_NAME_GPS_RESCUE_ASCEND_RATE
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 50, 2500 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, ascendRate
) },
1041 { PARAM_NAME_GPS_RESCUE_RETURN_ALT
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 5, 1000 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, returnAltitudeM
) },
1042 { PARAM_NAME_GPS_RESCUE_GROUND_SPEED
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3000 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, groundSpeedCmS
) },
1043 { PARAM_NAME_GPS_RESCUE_MAX_RESCUE_ANGLE
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 30, 60 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, maxRescueAngle
) },
1044 { PARAM_NAME_GPS_RESCUE_ROLL_MIX
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 250 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, rollMix
) },
1045 { PARAM_NAME_GPS_RESCUE_PITCH_CUTOFF
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, pitchCutoffHz
) },
1046 { PARAM_NAME_GPS_RESCUE_IMU_YAW_GAIN
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 5, 20 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, imuYawGain
) },
1048 { PARAM_NAME_GPS_RESCUE_DESCENT_DIST
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 500 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, descentDistanceM
) },
1049 { PARAM_NAME_GPS_RESCUE_DESCEND_RATE
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 25, 500 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, descendRate
) },
1050 { PARAM_NAME_GPS_RESCUE_LANDING_ALT
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 15 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, targetLandingAltitudeM
) },
1051 { PARAM_NAME_GPS_RESCUE_DISARM_THRESHOLD
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 250 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, disarmThreshold
) },
1053 { PARAM_NAME_GPS_RESCUE_THROTTLE_MIN
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1000, 2000 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleMin
) },
1054 { PARAM_NAME_GPS_RESCUE_THROTTLE_MAX
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1000, 2000 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleMax
) },
1055 { PARAM_NAME_GPS_RESCUE_THROTTLE_HOVER
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1000, 2000 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleHover
) },
1057 { 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
) },
1058 { PARAM_NAME_GPS_RESCUE_MIN_SATS
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 5, 50 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, minSats
) },
1059 { 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
) },
1061 { PARAM_NAME_GPS_RESCUE_THROTTLE_P
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleP
) },
1062 { PARAM_NAME_GPS_RESCUE_THROTTLE_I
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleI
) },
1063 { PARAM_NAME_GPS_RESCUE_THROTTLE_D
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, throttleD
) },
1064 { PARAM_NAME_GPS_RESCUE_VELOCITY_P
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, velP
) },
1065 { PARAM_NAME_GPS_RESCUE_VELOCITY_I
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, velI
) },
1066 { PARAM_NAME_GPS_RESCUE_VELOCITY_D
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, velD
) },
1067 { PARAM_NAME_GPS_RESCUE_YAW_P
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, yawP
) },
1070 { PARAM_NAME_GPS_RESCUE_USE_MAG
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_GPS_RESCUE
, offsetof(gpsRescueConfig_t
, useMag
) },
1072 #endif // USE_GPS_RESCUE
1074 #ifdef USE_GPS_LAP_TIMER
1075 { PARAM_NAME_GPS_LAP_TIMER_GATE_LAT
, VAR_INT32
| MASTER_VALUE
, .config
.d32Max
= 900000000, PG_GPS_LAP_TIMER
, offsetof(gpsLapTimerConfig_t
, gateLat
) },
1076 { PARAM_NAME_GPS_LAP_TIMER_GATE_LON
, VAR_INT32
| MASTER_VALUE
, .config
.d32Max
= 1800000000, PG_GPS_LAP_TIMER
, offsetof(gpsLapTimerConfig_t
, gateLon
) },
1077 { PARAM_NAME_GPS_LAP_TIMER_MIN_LAP_TIME
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3000 }, PG_GPS_LAP_TIMER
, offsetof(gpsLapTimerConfig_t
, minimumLapTimeSeconds
) },
1078 { PARAM_NAME_GPS_LAP_TIMER_GATE_TOLERANCE
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 100 }, PG_GPS_LAP_TIMER
, offsetof(gpsLapTimerConfig_t
, gateToleranceM
) },
1079 #endif // USE_GPS_LAP_TIMER
1083 { PARAM_NAME_DEADBAND
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 32 }, PG_RC_CONTROLS_CONFIG
, offsetof(rcControlsConfig_t
, deadband
) },
1084 { PARAM_NAME_YAW_DEADBAND
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_RC_CONTROLS_CONFIG
, offsetof(rcControlsConfig_t
, yaw_deadband
) },
1085 { "yaw_control_reversed", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RC_CONTROLS_CONFIG
, offsetof(rcControlsConfig_t
, yaw_control_reversed
) },
1088 { 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
) },
1089 #ifdef USE_RUNAWAY_TAKEOFF
1090 { "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
1091 { "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
1092 { "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
1096 #ifdef USE_PROFILE_NAMES
1097 { "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
) },
1100 { "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
) },
1101 { "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
) },
1102 { "dterm_lpf1_dyn_expo", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 10 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dterm_lpf1_dyn_expo
) },
1104 { 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
) },
1105 { 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
) },
1106 { 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
) },
1107 { 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
) },
1108 { PARAM_NAME_DTERM_NOTCH_HZ
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, dterm_notch_hz
) },
1109 { PARAM_NAME_DTERM_NOTCH_CUTOFF
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, LPF_MAX_HZ
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, dterm_notch_cutoff
) },
1110 #if defined(USE_BATTERY_VOLTAGE_SAG_COMPENSATION)
1111 { PARAM_NAME_VBAT_SAG_COMPENSATION
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 150 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, vbat_sag_compensation
) },
1113 { PARAM_NAME_PID_AT_MIN_THROTTLE
, VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pidAtMinThrottle
) },
1114 { 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
) },
1115 { PARAM_NAME_ANTI_GRAVITY_CUTOFF_HZ
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 2, 50 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, anti_gravity_cutoff_hz
) },
1116 { PARAM_NAME_ANTI_GRAVITY_P_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, anti_gravity_p_gain
) },
1117 { PARAM_NAME_ACC_LIMIT_YAW
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, yawRateAccelLimit
) },
1118 { PARAM_NAME_ACC_LIMIT
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, rateAccelLimit
) },
1119 { "crash_dthreshold", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 2000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_dthreshold
) },
1120 { "crash_gthreshold", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 100, 2000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_gthreshold
) },
1121 { "crash_setpoint_threshold", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 50, 2000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_setpoint_threshold
) },
1122 { "crash_time", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 100, 5000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_time
) },
1123 { "crash_delay", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_delay
) },
1124 { "crash_recovery_angle", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 5, 30 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_recovery_angle
) },
1125 { "crash_recovery_rate", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 50, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_recovery_rate
) },
1126 { "crash_limit_yaw", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 1000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_limit_yaw
) },
1127 { "crash_recovery", VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_CRASH_RECOVERY
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, crash_recovery
) },
1129 { "iterm_rotation", VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, iterm_rotation
) },
1130 #if defined(USE_ITERM_RELAX)
1131 { PARAM_NAME_ITERM_RELAX
, VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_ITERM_RELAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, iterm_relax
) },
1132 { 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
) },
1133 { PARAM_NAME_ITERM_RELAX_CUTOFF
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 1, 50 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, iterm_relax_cutoff
) },
1135 { PARAM_NAME_ITERM_WINDUP
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 30, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, itermWindupPointPercent
) },
1136 { "iterm_limit", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, itermLimit
) },
1137 { PARAM_NAME_PIDSUM_LIMIT
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { PIDSUM_LIMIT_MIN
, PIDSUM_LIMIT_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pidSumLimit
) },
1138 { PARAM_NAME_PIDSUM_LIMIT_YAW
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { PIDSUM_LIMIT_MIN
, PIDSUM_LIMIT_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pidSumLimitYaw
) },
1139 { PARAM_NAME_YAW_LOWPASS_HZ
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, yaw_lowpass_hz
) },
1141 #if defined(USE_THROTTLE_BOOST)
1142 { PARAM_NAME_THROTTLE_BOOST
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, throttle_boost
) },
1143 { PARAM_NAME_THROTTLE_BOOST_CUTOFF
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 5, 50 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, throttle_boost_cutoff
) },
1146 #ifdef USE_ACRO_TRAINER
1147 { "acro_trainer_angle_limit", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 80 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, acro_trainer_angle_limit
) },
1148 { "acro_trainer_lookahead_ms", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, acro_trainer_lookahead_ms
) },
1149 { "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
) },
1150 { "acro_trainer_gain", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 25, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, acro_trainer_gain
) },
1151 #endif // USE_ACRO_TRAINER
1153 { "p_pitch", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_PITCH
].P
) },
1154 { "i_pitch", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_PITCH
].I
) },
1155 { "d_pitch", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_PITCH
].D
) },
1156 { "f_pitch", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, F_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_PITCH
].F
) },
1157 { "p_roll", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_ROLL
].P
) },
1158 { "i_roll", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_ROLL
].I
) },
1159 { "d_roll", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_ROLL
].D
) },
1160 { "f_roll", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, F_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_ROLL
].F
) },
1161 { "p_yaw", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_YAW
].P
) },
1162 { "i_yaw", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_YAW
].I
) },
1163 { "d_yaw", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, PID_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_YAW
].D
) },
1164 { "f_yaw", VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, F_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_YAW
].F
) },
1166 { PARAM_NAME_ANGLE_P_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_LEVEL
].P
) },
1167 { PARAM_NAME_ANGLE_FEEDFORWARD
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_LEVEL
].F
) },
1168 { PARAM_NAME_ANGLE_FF_SMOOTHING_MS
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, angle_feedforward_smoothing_ms
) },
1169 { PARAM_NAME_ANGLE_LIMIT
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 85 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, angle_limit
) },
1170 { PARAM_NAME_ANGLE_EARTH_REF
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, angle_earth_ref
) },
1172 { PARAM_NAME_HORIZON_LEVEL_STRENGTH
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_LEVEL
].I
) },
1173 { PARAM_NAME_HORIZON_LIMIT_STICKS
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, pid
[PID_LEVEL
].D
) },
1174 { PARAM_NAME_HORIZON_LIMIT_DEGREES
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, horizon_limit_degrees
) },
1175 { 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
) },
1176 { PARAM_NAME_HORIZON_DELAY_MS
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 5000 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, horizon_delay_ms
) },
1178 #if defined(USE_ABSOLUTE_CONTROL)
1179 { PARAM_NAME_ABS_CONTROL_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 20 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, abs_control_gain
) },
1180 { "abs_control_limit", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, abs_control_limit
) },
1181 { "abs_control_error_limit", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 1, 45 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, abs_control_error_limit
) },
1182 { "abs_control_cutoff", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 1, 45 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, abs_control_cutoff
) },
1185 #ifdef USE_INTEGRATED_YAW_CONTROL
1186 { 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
) },
1187 { "integrated_yaw_relax", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, integrated_yaw_relax
) },
1191 { "d_min_roll", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, D_MIN_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, d_min
[FD_ROLL
]) },
1192 { "d_min_pitch", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, D_MIN_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, d_min
[FD_PITCH
]) },
1193 { "d_min_yaw", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, D_MIN_GAIN_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, d_min
[FD_YAW
]) },
1194 { PARAM_NAME_D_MAX_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, d_min_gain
) },
1195 { PARAM_NAME_D_MAX_ADVANCE
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, d_min_advance
) },
1198 { 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
) },
1199 { "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
) },
1201 #ifdef USE_LAUNCH_CONTROL
1202 { "launch_control_mode", VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_LAUNCH_CONTROL_MODE
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, launchControlMode
) },
1203 { "launch_trigger_allow_reset", VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, launchControlAllowTriggerReset
) },
1204 { "launch_trigger_throttle_percent", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, LAUNCH_CONTROL_THROTTLE_TRIGGER_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, launchControlThrottlePercent
) },
1205 { "launch_angle_limit", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 80 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, launchControlAngleLimit
) },
1206 { "launch_control_gain", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, launchControlGain
) },
1209 #ifdef USE_THRUST_LINEARIZATION
1210 { "thrust_linear", VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 150 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, thrustLinearization
) },
1213 #ifdef USE_AIRMODE_LPF
1214 { "transient_throttle_limit", VAR_UINT8
| PROFILE_VALUE
, .config
.minmax
= { 0, 30 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, transient_throttle_limit
) },
1217 #ifdef USE_FEEDFORWARD
1218 { PARAM_NAME_FEEDFORWARD_TRANSITION
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_transition
) },
1219 { PARAM_NAME_FEEDFORWARD_AVERAGING
, VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_FEEDFORWARD_AVERAGING
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_averaging
) },
1220 { PARAM_NAME_FEEDFORWARD_SMOOTH_FACTOR
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= {0, 95}, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_smooth_factor
) },
1221 { PARAM_NAME_FEEDFORWARD_JITTER_FACTOR
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= {0, 20}, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_jitter_factor
) },
1222 { PARAM_NAME_FEEDFORWARD_BOOST
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 50 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_boost
) },
1223 { PARAM_NAME_FEEDFORWARD_MAX_RATE_LIMIT
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= {0, 200}, PG_PID_PROFILE
, offsetof(pidProfile_t
, feedforward_max_rate_limit
) },
1227 { PARAM_NAME_DYN_IDLE_MIN_RPM
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 200 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_min_rpm
) },
1228 { PARAM_NAME_DYN_IDLE_P_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 1, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_p_gain
) },
1229 { PARAM_NAME_DYN_IDLE_I_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 1, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_i_gain
) },
1230 { PARAM_NAME_DYN_IDLE_D_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, 250 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_d_gain
) },
1231 { PARAM_NAME_DYN_IDLE_MAX_INCREASE
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_max_increase
) },
1232 { PARAM_NAME_DYN_IDLE_START_INCREASE
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 10, 255 }, PG_PID_PROFILE
, offsetof(pidProfile_t
, dyn_idle_start_increase
) },
1234 { "level_race_mode", VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, level_race_mode
) },
1236 #ifdef USE_SIMPLIFIED_TUNING
1237 { 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
) },
1238 { 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
) },
1239 { 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
) },
1240 { 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
) },
1241 { 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
) },
1242 { PARAM_NAME_SIMPLIFIED_DMAX_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, SIMPLIFIED_TUNING_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, simplified_dmin_ratio
) },
1243 { PARAM_NAME_SIMPLIFIED_FEEDFORWARD_GAIN
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, SIMPLIFIED_TUNING_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, simplified_feedforward_gain
) },
1244 { 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
) },
1245 { 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
) },
1247 { 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
) },
1248 { 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
) },
1250 { 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
) },
1251 { 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
) },
1254 { PARAM_NAME_TPA_MODE
, VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_TPA_MODE
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_mode
) },
1256 { PARAM_NAME_TPA_RATE
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, TPA_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_rate
) },
1257 { PARAM_NAME_TPA_BREAKPOINT
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { PWM_RANGE_MIN
, PWM_RANGE_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_breakpoint
) },
1258 { PARAM_NAME_TPA_RATE_LOWER
, VAR_UINT8
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { 0, TPA_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_rate_lower
) },
1259 { PARAM_NAME_TPA_BREAKPOINT_LOWER
, VAR_UINT16
| PROFILE_VALUE
, .config
.minmaxUnsigned
= { PWM_RANGE_MIN
, PWM_RANGE_MAX
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_breakpoint_lower
) },
1260 { PARAM_NAME_TPA_BREAKPOINT_LOWER_FADE
, VAR_UINT8
| PROFILE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_PID_PROFILE
, offsetof(pidProfile_t
, tpa_breakpoint_lower_fade
) },
1262 // PG_TELEMETRY_CONFIG
1263 #ifdef USE_TELEMETRY
1264 { "tlm_inverted", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, telemetry_inverted
) },
1265 { "tlm_halfduplex", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, halfDuplex
) },
1266 #if defined(USE_TELEMETRY_FRSKY_HUB)
1267 #if defined(USE_GPS)
1268 { "frsky_default_lat", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -9000, 9000 }, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, gpsNoFixLatitude
) },
1269 { "frsky_default_long", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { -18000, 18000 }, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, gpsNoFixLongitude
) },
1270 { "frsky_gps_format", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, FRSKY_FORMAT_NMEA
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, frsky_coordinate_format
) },
1271 { "frsky_unit", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_UNIT
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, frsky_unit
) },
1273 { "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
) },
1274 #endif // USE_TELEMETRY_FRSKY_HUB
1275 { "hott_alarm_int", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 120 }, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, hottAlarmSoundInterval
) },
1276 { "pid_in_tlm", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, pidValuesAsTelemetry
) },
1277 { "report_cell_voltage", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, report_cell_voltage
) },
1278 #if defined(USE_TELEMETRY_IBUS)
1279 { "ibus_sensor", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= IBUS_SENSOR_COUNT
, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, flysky_sensors
)},
1281 #ifdef USE_TELEMETRY_MAVLINK
1282 // Support for misusing the heading field in MAVlink to indicate mAh drawn for Connex Prosight OSD
1283 // Set to 10 to show a tenth of your capacity drawn.
1284 // Set to $size_of_battery to get a percentage of battery used.
1285 { "mavlink_mah_as_heading_divisor", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 30000 }, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, mavlink_mah_as_heading_divisor
) },
1287 #ifdef USE_TELEMETRY_SENSORS_DISABLED_DETAILS
1288 { "telemetry_disabled_voltage", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_VOLTAGE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1289 { "telemetry_disabled_current", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_CURRENT
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1290 { "telemetry_disabled_fuel", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_FUEL
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1291 { "telemetry_disabled_mode", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_MODE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1292 { "telemetry_disabled_acc_x", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_ACC_X
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1293 { "telemetry_disabled_acc_y", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_ACC_Y
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1294 { "telemetry_disabled_acc_z", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_ACC_Z
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1295 { "telemetry_disabled_pitch", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_PITCH
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1296 { "telemetry_disabled_roll", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_ROLL
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1297 { "telemetry_disabled_heading", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_HEADING
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1298 { "telemetry_disabled_altitude", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_ALTITUDE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1299 { "telemetry_disabled_vario", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_VARIO
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1300 { "telemetry_disabled_lat_long", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_LAT_LONG
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1301 { "telemetry_disabled_ground_speed", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_GROUND_SPEED
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1302 { "telemetry_disabled_distance", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_DISTANCE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1303 { "telemetry_disabled_esc_current", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(ESC_SENSOR_CURRENT
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1304 { "telemetry_disabled_esc_voltage", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(ESC_SENSOR_VOLTAGE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1305 { "telemetry_disabled_esc_rpm", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(ESC_SENSOR_RPM
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1306 { "telemetry_disabled_esc_temperature", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(ESC_SENSOR_TEMPERATURE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1307 { "telemetry_disabled_temperature", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_TEMPERATURE
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1308 { "telemetry_disabled_cap_used", VAR_UINT32
| MASTER_VALUE
| MODE_BITSET
, .config
.bitpos
= LOG2(SENSOR_CAP_USED
), PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1310 { "telemetry_disabled_sensors", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= SENSOR_ALL
, PG_TELEMETRY_CONFIG
, offsetof(telemetryConfig_t
, disabledSensors
)},
1312 #endif // USE_TELEMETRY
1314 // PG_LED_STRIP_CONFIG
1315 #ifdef USE_LED_STRIP
1316 { "ledstrip_visual_beeper", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_visual_beeper
) },
1317 { "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
) },
1318 { "ledstrip_grb_rgb", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_RGB_GRB
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_grb_rgb
) },
1319 { "ledstrip_profile", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_LED_PROFILE
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_profile
) },
1320 { "ledstrip_race_color", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_LEDSTRIP_COLOR
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_race_color
) },
1321 { "ledstrip_beacon_color", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_LEDSTRIP_COLOR
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_beacon_color
) },
1322 { "ledstrip_beacon_period_ms", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 50, 10000 }, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_beacon_period_ms
) },
1323 { "ledstrip_beacon_percent", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_beacon_percent
) },
1324 { "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
) },
1325 { "ledstrip_brightness", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 5, 100 }, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_brightness
) },
1326 { "ledstrip_rainbow_delta", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, HSV_HUE_MAX
}, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_rainbow_delta
) },
1327 { "ledstrip_rainbow_freq", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 2000 }, PG_LED_STRIP_CONFIG
, offsetof(ledStripConfig_t
, ledstrip_rainbow_freq
) },
1332 { "sdcard_detect_inverted", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SDCARD_CONFIG
, offsetof(sdcardConfig_t
, cardDetectInverted
) },
1333 { "sdcard_mode", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_SDCARD_MODE
}, PG_SDCARD_CONFIG
, offsetof(sdcardConfig_t
, mode
) },
1335 #ifdef USE_SDCARD_SPI
1336 { "sdcard_spi_bus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_SDCARD_CONFIG
, offsetof(sdcardConfig_t
, device
) },
1338 #ifdef USE_SDCARD_SDIO
1339 { "sdio_clk_bypass", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SDIO_CONFIG
, offsetof(sdioConfig_t
, clockBypass
) },
1340 { "sdio_use_cache", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SDIO_CONFIG
, offsetof(sdioConfig_t
, useCache
) },
1341 { "sdio_use_4bit_width", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SDIO_CONFIG
, offsetof(sdioConfig_t
, use4BitWidth
) },
1343 { "sdio_device", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SDIODEV_COUNT
}, PG_SDIO_CONFIG
, offsetof(sdioConfig_t
, device
) },
1349 { "osd_units", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_UNIT
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, units
) },
1351 // Enabled OSD warning flags are stored as bitmapped values inside a 32bit parameter
1352 { "osd_warn_bitmask", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_OSD_CONFIG
, offsetof(osdConfig_t
, enabledWarnings
)},
1354 { "osd_rssi_alarm", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, rssi_alarm
) },
1355 #ifdef USE_RX_LINK_QUALITY_INFO
1356 { "osd_link_quality_alarm", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, link_quality_alarm
) },
1358 #ifdef USE_RX_RSSI_DBM
1359 { "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
) },
1362 { "osd_rsnr_alarm", VAR_INT16
| MASTER_VALUE
, .config
.minmax
= { CRSF_SNR_MIN
, CRSF_SNR_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, rsnr_alarm
) },
1364 { "osd_cap_alarm", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 20000 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, cap_alarm
) },
1365 { "osd_alt_alarm", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 10000 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, alt_alarm
) },
1366 { "osd_distance_alarm", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT16_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, distance_alarm
) },
1367 { "osd_esc_temp_alarm", VAR_UINT8
| MASTER_VALUE
, .config
.minmax
= { 0, UINT8_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, esc_temp_alarm
) },
1368 { "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
) },
1369 { "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
) },
1370 #ifdef USE_ADC_INTERNAL
1371 { "osd_core_temp_alarm", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, core_temp_alarm
) },
1374 { "osd_ah_max_pit", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 90 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, ahMaxPitch
) },
1375 { "osd_ah_max_rol", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 90 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, ahMaxRoll
) },
1376 { "osd_ah_invert", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, ahInvert
) },
1377 { "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
) },
1378 { "osd_logo_on_arming_duration",VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 5, 50 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, logo_on_arming_duration
) },
1379 #ifdef USE_QUICK_OSD_MENU
1380 { "osd_use_quick_menu", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, osd_use_quick_menu
) },
1381 #endif // USE_QUICK_OSD_MENU
1382 { "osd_tim1", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, INT16_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, timers
[OSD_TIMER_1
]) },
1383 { "osd_tim2", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, INT16_MAX
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, timers
[OSD_TIMER_2
]) },
1385 { "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
]) },
1386 { "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
]) },
1387 #ifdef USE_RX_LINK_QUALITY_INFO
1388 { "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
]) },
1390 #ifdef USE_RX_LINK_UPLINK_POWER
1391 { "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
]) },
1393 #ifdef USE_RX_RSSI_DBM
1394 { "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
]) },
1397 { "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
]) },
1399 { "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
]) },
1400 { "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
]) },
1401 { "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
]) },
1402 { "osd_flymode_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_FLYMODE
]) },
1403 { "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
]) },
1404 { "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
]) },
1405 { "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
]) },
1406 { "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
]) },
1407 { "osd_crosshairs_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_CROSSHAIRS
]) },
1408 { "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
]) },
1409 { "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
]) },
1410 { "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
]) },
1411 { "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
]) },
1412 { "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
]) },
1413 { "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
]) },
1414 { "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
]) },
1415 { "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
]) },
1416 { "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
]) },
1417 { "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
]) },
1418 { "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
]) },
1419 #ifdef USE_GPS_LAP_TIMER
1420 { "osd_gps_lap_curr_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_GPS_LAP_TIME_CURRENT
]) },
1421 { "osd_gps_lap_prev_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_GPS_LAP_TIME_PREVIOUS
]) },
1422 { "osd_gps_lap_best3_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_GPS_LAP_TIME_BEST3
]) },
1423 #endif // USE_GPS_LAP_TIMER
1424 { "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
]) },
1425 { "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
]) },
1426 { "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
]) },
1427 { "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
]) },
1428 { "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
]) },
1429 { "osd_altitude_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_ALTITUDE
]) },
1430 { "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
]) },
1431 { "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
]) },
1432 { "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
]) },
1433 { "osd_debug_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_DEBUG
]) },
1434 { "osd_power_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_POWER
]) },
1435 { "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
]) },
1436 { "osd_warnings_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_WARNINGS
]) },
1437 { "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
]) },
1438 { "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
]) },
1439 { "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
]) },
1440 { "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
]) },
1441 { "osd_disarmed_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_DISARMED
]) },
1442 { "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
]) },
1443 { "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
]) },
1444 { "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
]) },
1446 { "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
]) },
1448 { "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
]) },
1449 { "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
]) },
1450 { "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
]) },
1451 { "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
]) },
1452 { "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
]) },
1453 { "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
]) },
1454 #ifdef USE_ADC_INTERNAL
1455 { "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
]) },
1458 { "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
]) },
1461 #ifdef USE_OSD_STICK_OVERLAY
1462 { "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
]) },
1463 { "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
]) },
1465 { "osd_stick_overlay_radio_mode", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 4 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, overlay_radio_mode
) },
1468 #ifdef USE_PROFILE_NAMES
1469 { "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
]) },
1470 { "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
]) },
1473 #ifdef USE_OSD_PROFILES
1474 { "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
]) },
1477 { "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
]) },
1478 { "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
]) },
1479 { "osd_efficiency_pos", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, OSD_POSCFG_MAX
}, PG_OSD_ELEMENT_CONFIG
, offsetof(osdElementConfig_t
, item_pos
[OSD_EFFICIENCY
]) },
1480 { "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
]) },
1481 { "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
]) },
1483 #ifdef USE_MSP_DISPLAYPORT
1484 { "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
]) },
1485 { "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
]) },
1486 { "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
]) },
1487 { "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
]) },
1488 { "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
]) },
1489 { "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
]) },
1490 { "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
]) },
1491 { "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
]) },
1492 { "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
]) },
1493 { "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
]) },
1494 { "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
]) },
1497 // OSD stats enabled flags are stored as bitmapped values inside a 32bit parameter
1498 { "osd_stat_bitmask", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_OSD_CONFIG
, offsetof(osdConfig_t
, enabled_stats
)},
1500 #ifdef USE_OSD_PROFILES
1501 { "osd_profile", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, OSD_PROFILE_COUNT
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, osdProfileIndex
) },
1502 { "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]) },
1503 { "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]) },
1504 { "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]) },
1506 { "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
) },
1507 { "osd_displayport_device", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OSD_DISPLAYPORT_DEVICE
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, displayPortDevice
) },
1509 { "osd_rcchannels", VAR_INT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= OSD_RCCHANNELS_COUNT
, PG_OSD_CONFIG
, offsetof(osdConfig_t
, rcChannels
) },
1510 { "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
) },
1511 { "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
) },
1512 { "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
) },
1513 { "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
) },
1514 { "osd_menu_background", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_CMS_BACKGROUND
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, cms_background_type
) },
1515 { "osd_aux_channel", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, MAX_SUPPORTED_RC_CHANNEL_COUNT
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, aux_channel
) },
1516 { "osd_aux_scale", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 1, 1000 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, aux_scale
) },
1517 { "osd_aux_symbol", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 255 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, aux_symbol
) },
1518 { "osd_canvas_width", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 63 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, canvas_cols
) },
1519 { "osd_canvas_height", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 31 }, PG_OSD_CONFIG
, offsetof(osdConfig_t
, canvas_rows
) },
1520 #ifdef USE_CRAFTNAME_MSGS
1521 { "osd_craftname_msgs", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_OSD_CONFIG
, offsetof(osdConfig_t
, osd_craftname_msgs
) },
1522 #endif //USE_CRAFTNAME_MSGS
1523 #endif // end of #ifdef USE_OSD
1526 #if defined(STM32F4) || defined(STM32G4)
1527 { "system_hse_mhz", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, 30 }, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, hseMhz
) },
1529 { "task_statistics", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, task_statistics
) },
1530 { PARAM_NAME_DEBUG_MODE
, VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_DEBUG
}, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, debug_mode
) },
1531 { "rate_6pos_switch", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, rateProfile6PosSwitch
) },
1532 #ifdef USE_OVERCLOCK
1533 { "cpu_overclock", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OVERCLOCK
}, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, cpu_overclock
) },
1535 { "pwr_on_arm_grace", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 30 }, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, powerOnArmingGraceTime
) },
1536 { "enable_stick_arming", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_SYSTEM_CONFIG
, offsetof(systemConfig_t
, enableStickArming
) },
1539 #ifdef USE_VTX_COMMON
1540 { "vtx_band", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, VTX_TABLE_MAX_BANDS
}, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, band
) },
1541 { "vtx_channel", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, VTX_TABLE_MAX_CHANNELS
}, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, channel
) },
1542 { "vtx_power", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, VTX_TABLE_MAX_POWER_LEVELS
- 1 }, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, power
) },
1543 { "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
) },
1544 { "vtx_softserial_alt", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, softserialAlt
) },
1545 #ifdef VTX_SETTINGS_FREQCMD
1546 { "vtx_freq", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, VTX_SETTINGS_MAX_FREQUENCY_MHZ
}, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, freq
) },
1547 { "vtx_pit_mode_freq", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, VTX_SETTINGS_MAX_FREQUENCY_MHZ
}, PG_VTX_SETTINGS_CONFIG
, offsetof(vtxSettingsConfig_t
, pitModeFreq
) },
1552 #if defined(USE_VTX_CONTROL) && defined(USE_VTX_COMMON)
1553 { "vtx_halfduplex", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_VTX_CONFIG
, offsetof(vtxConfig_t
, halfDuplex
) },
1557 #ifdef USE_VTX_RTC6705
1558 { "vtx_spi_bus", VAR_UINT8
| HARDWARE_VALUE
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_VTX_IO_CONFIG
, offsetof(vtxIOConfig_t
, spiDevice
) },
1562 #if defined(USE_VIDEO_SYSTEM)
1563 { "vcd_video_system", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_VIDEO_SYSTEM
}, PG_VCD_CONFIG
, offsetof(vcdProfile_t
, video_system
) },
1565 #if defined(USE_MAX7456)
1566 { "vcd_h_offset", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -32, 31 }, PG_VCD_CONFIG
, offsetof(vcdProfile_t
, h_offset
) },
1567 { "vcd_v_offset", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -15, 16 }, PG_VCD_CONFIG
, offsetof(vcdProfile_t
, v_offset
) },
1570 // PG_MAX7456_CONFIG
1572 { "max7456_clock", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_MAX7456_CLOCK
}, PG_MAX7456_CONFIG
, offsetof(max7456Config_t
, clockConfig
) },
1573 { "max7456_spi_bus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_MAX7456_CONFIG
, offsetof(max7456Config_t
, spiDevice
) },
1574 { "max7456_preinit_opu", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MAX7456_CONFIG
, offsetof(max7456Config_t
, preInitOPU
) },
1577 // PG_DISPLAY_PORT_MSP_CONFIG
1578 #ifdef USE_MSP_DISPLAYPORT
1579 { "displayport_msp_col_adjust", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -6, 0 }, PG_DISPLAY_PORT_MSP_CONFIG
, offsetof(displayPortProfile_t
, colAdjust
) },
1580 { "displayport_msp_row_adjust", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -3, 0 }, PG_DISPLAY_PORT_MSP_CONFIG
, offsetof(displayPortProfile_t
, rowAdjust
) },
1581 { "displayport_msp_fonts", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 4, PG_DISPLAY_PORT_MSP_CONFIG
, offsetof(displayPortProfile_t
, fontSelection
) },
1582 { "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
) },
1585 // PG_DISPLAY_PORT_MSP_CONFIG
1587 { "displayport_max7456_col_adjust", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -6, 0 }, PG_DISPLAY_PORT_MAX7456_CONFIG
, offsetof(displayPortProfile_t
, colAdjust
) },
1588 { "displayport_max7456_row_adjust", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -3, 0 }, PG_DISPLAY_PORT_MAX7456_CONFIG
, offsetof(displayPortProfile_t
, rowAdjust
) },
1589 { "displayport_max7456_inv", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_DISPLAY_PORT_MAX7456_CONFIG
, offsetof(displayPortProfile_t
, invert
) },
1590 { "displayport_max7456_blk", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3 }, PG_DISPLAY_PORT_MAX7456_CONFIG
, offsetof(displayPortProfile_t
, blackBrightness
) },
1591 { "displayport_max7456_wht", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3 }, PG_DISPLAY_PORT_MAX7456_CONFIG
, offsetof(displayPortProfile_t
, whiteBrightness
) },
1594 #ifdef USE_ESC_SENSOR
1595 { "esc_sensor_halfduplex", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_ESC_SENSOR_CONFIG
, offsetof(escSensorConfig_t
, halfDuplex
) },
1596 { "esc_sensor_current_offset", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 16000 }, PG_ESC_SENSOR_CONFIG
, offsetof(escSensorConfig_t
, offset
) },
1599 #ifdef USE_RX_FRSKY_SPI
1600 { "frsky_spi_autobind", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, autoBind
) },
1601 { "frsky_spi_tx_id", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 3, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, bindTxId
) },
1602 { "frsky_spi_offset", VAR_INT8
| MASTER_VALUE
, .config
.minmax
= { -127, 127 }, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, bindOffset
) },
1603 { "frsky_spi_bind_hop_data", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 50, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, bindHopData
) },
1604 { "frsky_x_rx_num", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, rxNum
) },
1605 { "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
) },
1606 { "cc2500_spi_chip_detect", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_RX_CC2500_SPI_CONFIG
, offsetof(rxCc2500SpiConfig_t
, chipDetectEnabled
) },
1608 { "led_inversion", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, ((1 << STATUS_LED_NUMBER
) - 1) }, PG_STATUS_LED_CONFIG
, offsetof(statusLedConfig_t
, inversion
) },
1609 #ifdef USE_DASHBOARD
1610 { "dashboard_i2c_bus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2CDEV_COUNT
}, PG_DASHBOARD_CONFIG
, offsetof(dashboardConfig_t
, device
) },
1611 { "dashboard_i2c_addr", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { I2C_ADDR7_MIN
, I2C_ADDR7_MAX
}, PG_DASHBOARD_CONFIG
, offsetof(dashboardConfig_t
, address
) },
1614 // PG_CAMERA_CONTROL_CONFIG
1615 #ifdef USE_CAMERA_CONTROL
1616 { "camera_control_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_CAMERA_CONTROL_MODE
}, PG_CAMERA_CONTROL_CONFIG
, offsetof(cameraControlConfig_t
, mode
) },
1617 { "camera_control_ref_voltage", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 200, 400 }, PG_CAMERA_CONTROL_CONFIG
, offsetof(cameraControlConfig_t
, refVoltage
) },
1618 { "camera_control_key_delay", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 100, 500 }, PG_CAMERA_CONTROL_CONFIG
, offsetof(cameraControlConfig_t
, keyDelayMs
) },
1619 { "camera_control_internal_resistance", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 1000 }, PG_CAMERA_CONTROL_CONFIG
, offsetof(cameraControlConfig_t
, internalResistance
) },
1620 { "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
) },
1621 { "camera_control_inverted", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_CAMERA_CONTROL_CONFIG
, offsetof(cameraControlConfig_t
, inverted
) },
1624 // PG_RANGEFINDER_CONFIG
1625 #ifdef USE_RANGEFINDER
1626 { "rangefinder_hardware", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_RANGEFINDER_HARDWARE
}, PG_RANGEFINDER_CONFIG
, offsetof(rangefinderConfig_t
, rangefinder_hardware
) },
1631 { "pinio_config", VAR_UINT8
| HARDWARE_VALUE
| MODE_ARRAY
, .config
.array
.length
= PINIO_COUNT
, PG_PINIO_CONFIG
, offsetof(pinioConfig_t
, config
) },
1633 { "pinio_box", VAR_UINT8
| HARDWARE_VALUE
| MODE_ARRAY
, .config
.array
.length
= PINIO_COUNT
, PG_PINIOBOX_CONFIG
, offsetof(pinioBoxConfig_t
, permanentId
) },
1638 #ifdef USE_USB_CDC_HID
1639 { "usb_hid_cdc", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_USB_CONFIG
, offsetof(usbDev_t
, type
) },
1642 { "usb_msc_pin_pullup", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_USB_CONFIG
, offsetof(usbDev_t
, mscButtonUsePullup
) },
1645 #ifdef USE_FLASH_SPI
1646 { "flash_spi_bus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_FLASH_CONFIG
, offsetof(flashConfig_t
, spiDevice
) },
1650 { "rcdevice_init_dev_attempts", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 10 }, PG_RCDEVICE_CONFIG
, offsetof(rcdeviceConfig_t
, initDeviceAttempts
) },
1651 { "rcdevice_init_dev_attempt_interval", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= 5000, PG_RCDEVICE_CONFIG
, offsetof(rcdeviceConfig_t
, initDeviceAttemptInterval
) },
1652 { "rcdevice_protocol_version", VAR_UINT8
| MASTER_VALUE
, .config
.minmax
= { 0, 1 }, PG_RCDEVICE_CONFIG
, offsetof(rcdeviceConfig_t
, protocolVersion
) },
1653 { "rcdevice_feature", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= {0, 65535}, PG_RCDEVICE_CONFIG
, offsetof(rcdeviceConfig_t
, feature
) },
1656 // PG_GYRO_DEVICE_CONFIG
1657 { "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
) },
1658 { "gyro_1_spibus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_GYRO_DEVICE_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t
, 0, spiBus
) },
1659 { "gyro_1_i2cBus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2CDEV_COUNT
}, PG_GYRO_DEVICE_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t
, 0, i2cBus
) },
1660 { "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
) },
1661 { "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
) },
1662 { "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
) },
1663 { "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
) },
1664 { "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
) },
1665 #ifdef USE_MULTI_GYRO
1666 { "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
) },
1667 { "gyro_2_spibus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, SPIDEV_COUNT
}, PG_GYRO_DEVICE_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t
, 1, spiBus
) },
1668 { "gyro_2_i2cBus", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, I2CDEV_COUNT
}, PG_GYRO_DEVICE_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(gyroDeviceConfig_t
, 1, i2cBus
) },
1669 { "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
) },
1670 { "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
) },
1671 { "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
) },
1672 { "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
) },
1673 { "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
) },
1675 #ifdef I2C_FULL_RECONFIGURABILITY
1676 #ifdef USE_I2C_DEVICE_1
1677 { "i2c1_pullup", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_I2C_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t
, 0, pullUp
) },
1678 { "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
) },
1680 #ifdef USE_I2C_DEVICE_2
1681 { "i2c2_pullup", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_I2C_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t
, 1, pullUp
) },
1682 { "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
) },
1684 #ifdef USE_I2C_DEVICE_3
1685 { "i2c3_pullup", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_I2C_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t
, 2, pullUp
) },
1686 { "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
) },
1688 #ifdef USE_I2C_DEVICE_4
1689 { "i2c4_pullup", VAR_UINT8
| HARDWARE_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_I2C_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(i2cConfig_t
, 3, pullUp
) },
1690 { "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
) },
1695 { "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
) },
1696 { "mco_source", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, MCO_SOURCE_COUNT
- 1 }, PG_MCO_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t
, 0, source
) },
1697 { "mco_divider", VAR_UINT8
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, MCO_DIVIDER_COUNT
- 1 }, PG_MCO_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(mcoConfig_t
, 0, divider
) },
1699 { "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
) },
1702 #ifdef USE_RX_SPEKTRUM
1703 { "spektrum_spi_protocol", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_RX_SPEKTRUM_SPI_CONFIG
, offsetof(spektrumConfig_t
, protocol
) },
1704 { "spektrum_spi_mfg_id", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 4, PG_RX_SPEKTRUM_SPI_CONFIG
, offsetof(spektrumConfig_t
, mfgId
) },
1705 { "spektrum_spi_num_channels", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, DSM_MAX_CHANNEL_COUNT
}, PG_RX_SPEKTRUM_SPI_CONFIG
, offsetof(spektrumConfig_t
, numChannels
) },
1707 #ifdef USE_RX_EXPRESSLRS
1708 { "expresslrs_uid", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 6, PG_RX_EXPRESSLRS_SPI_CONFIG
, offsetof(rxExpressLrsSpiConfig_t
, UID
) },
1709 { "expresslrs_domain", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_FREQ_DOMAIN
}, PG_RX_EXPRESSLRS_SPI_CONFIG
, offsetof(rxExpressLrsSpiConfig_t
, domain
) },
1710 { "expresslrs_rate_index", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3 }, PG_RX_EXPRESSLRS_SPI_CONFIG
, offsetof(rxExpressLrsSpiConfig_t
, rateIndex
) },
1711 { "expresslrs_switch_mode", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_SWITCH_MODE
}, PG_RX_EXPRESSLRS_SPI_CONFIG
, offsetof(rxExpressLrsSpiConfig_t
, switchMode
) },
1712 { "expresslrs_model_id", VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, UINT8_MAX
}, PG_RX_EXPRESSLRS_SPI_CONFIG
, offsetof(rxExpressLrsSpiConfig_t
, modelId
) },
1715 { "scheduler_relax_rx", VAR_UINT16
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_SCHEDULER_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(schedulerConfig_t
, 0, rxRelaxDeterminism
) },
1716 { "scheduler_relax_osd", VAR_UINT16
| HARDWARE_VALUE
, .config
.minmaxUnsigned
= { 0, 500 }, PG_SCHEDULER_CONFIG
, PG_ARRAY_ELEMENT_OFFSET(schedulerConfig_t
, 0, osdRelaxDeterminism
) },
1718 { "serialmsp_halfduplex", VAR_UINT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_OFF_ON
}, PG_MSP_CONFIG
, offsetof(mspConfig_t
, halfDuplex
) },
1722 { "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
) },
1725 #ifdef USE_RPM_FILTER
1726 { PARAM_NAME_RPM_FILTER_HARMONICS
, VAR_UINT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 3 }, PG_RPM_FILTER_CONFIG
, offsetof(rpmFilterConfig_t
, rpm_filter_harmonics
) },
1727 { PARAM_NAME_RPM_FILTER_WEIGHTS
, VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= RPM_FILTER_HARMONICS_MAX
, PG_RPM_FILTER_CONFIG
, offsetof(rpmFilterConfig_t
, rpm_filter_weights
) },
1728 { PARAM_NAME_RPM_FILTER_Q
, VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 250, 3000 }, PG_RPM_FILTER_CONFIG
, offsetof(rpmFilterConfig_t
, rpm_filter_q
) },
1729 { 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
) },
1730 { 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
) },
1731 { 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
) },
1734 #ifdef USE_RX_FLYSKY
1735 { "flysky_spi_tx_id", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_FLYSKY_CONFIG
, offsetof(flySkyConfig_t
, txId
) },
1736 { "flysky_spi_rf_channels", VAR_UINT8
| MASTER_VALUE
| MODE_ARRAY
, .config
.array
.length
= 16, PG_FLYSKY_CONFIG
, offsetof(flySkyConfig_t
, rfChannelMap
) },
1739 #ifdef USE_PERSISTENT_STATS
1740 { "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
) },
1741 { "stats_total_flights", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_STATS_CONFIG
, offsetof(statsConfig_t
, stats_total_flights
) },
1743 { "stats_total_time_s", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_STATS_CONFIG
, offsetof(statsConfig_t
, stats_total_time_s
) },
1744 { "stats_total_dist_m", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_STATS_CONFIG
, offsetof(statsConfig_t
, stats_total_dist_m
) },
1746 #ifdef USE_BATTERY_CONTINUE
1747 { "stats_mah_used", VAR_UINT32
| MASTER_VALUE
, .config
.u32Max
= UINT32_MAX
, PG_STATS_CONFIG
, offsetof(statsConfig_t
, stats_mah_used
) },
1750 #endif // USE_PERSISTENT_STATS
1752 { "craft_name", VAR_UINT8
| MASTER_VALUE
| MODE_STRING
, .config
.string
= { 1, MAX_NAME_LENGTH
, STRING_FLAGS_NONE
}, PG_PILOT_CONFIG
, offsetof(pilotConfig_t
, craftName
) },
1754 { "pilot_name", VAR_UINT8
| MASTER_VALUE
| MODE_STRING
, .config
.string
= { 1, MAX_NAME_LENGTH
, STRING_FLAGS_NONE
}, PG_PILOT_CONFIG
, offsetof(pilotConfig_t
, pilotName
) },
1758 { "altitude_source", VAR_INT8
| MASTER_VALUE
| MODE_LOOKUP
, .config
.lookup
= { TABLE_POSITION_ALT_SOURCE
}, PG_POSITION
, offsetof(positionConfig_t
, altitude_source
) },
1759 { "altitude_prefer_baro", VAR_INT8
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 0, 100 }, PG_POSITION
, offsetof(positionConfig_t
, altitude_prefer_baro
) },
1760 { "altitude_lpf", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 1000 }, PG_POSITION
, offsetof(positionConfig_t
, altitude_lpf
) },
1761 { "altitude_d_lpf", VAR_UINT16
| MASTER_VALUE
, .config
.minmaxUnsigned
= { 10, 1000 }, PG_POSITION
, offsetof(positionConfig_t
, altitude_d_lpf
) },
1763 // PG_MODE_ACTIVATION_CONFIG
1764 #if defined(USE_CUSTOM_BOX_NAMES)
1765 { "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
) },
1766 { "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
) },
1767 { "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
) },
1768 { "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
) },
1772 const uint16_t valueTableEntryCount
= ARRAYLEN(valueTable
);
1774 STATIC_ASSERT(LOOKUP_TABLE_COUNT
== ARRAYLEN(lookupTables
), LOOKUP_TABLE_COUNT_incorrect
);