FF Interpolate to CMS
[betaflight.git] / src / main / cli / settings.h
blob090b5316afc0606fdbdf999559feef839ba03ee6
1 /*
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)
8 * any later version.
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/>.
21 #pragma once
23 #include <stdint.h>
24 #include <stdbool.h>
25 #include "pg/pg.h"
28 typedef enum {
29 TABLE_OFF_ON = 0,
30 TABLE_UNIT,
31 TABLE_ALIGNMENT,
32 #ifdef USE_GPS
33 TABLE_GPS_PROVIDER,
34 TABLE_GPS_SBAS_MODE,
35 TABLE_GPS_UBLOX_MODE,
36 #endif
37 #ifdef USE_GPS_RESCUE
38 TABLE_GPS_RESCUE_SANITY_CHECK,
39 TABLE_GPS_RESCUE_ALT_MODE,
40 #endif
41 #ifdef USE_BLACKBOX
42 TABLE_BLACKBOX_DEVICE,
43 TABLE_BLACKBOX_MODE,
44 #endif
45 TABLE_CURRENT_METER,
46 TABLE_VOLTAGE_METER,
47 #ifdef USE_SERVOS
48 TABLE_GIMBAL_MODE,
49 #endif
50 #ifdef USE_SERIAL_RX
51 TABLE_SERIAL_RX,
52 #endif
53 #ifdef USE_RX_SPI
54 TABLE_RX_SPI,
55 #endif
56 TABLE_GYRO_HARDWARE_LPF,
57 TABLE_ACC_HARDWARE,
58 #ifdef USE_BARO
59 TABLE_BARO_HARDWARE,
60 #endif
61 #ifdef USE_MAG
62 TABLE_MAG_HARDWARE,
63 #endif
64 TABLE_DEBUG,
65 TABLE_MOTOR_PWM_PROTOCOL,
66 TABLE_RC_INTERPOLATION,
67 TABLE_RC_INTERPOLATION_CHANNELS,
68 TABLE_LOWPASS_TYPE,
69 TABLE_DTERM_LOWPASS_TYPE,
70 TABLE_ANTI_GRAVITY_MODE,
71 TABLE_FAILSAFE,
72 TABLE_FAILSAFE_SWITCH_MODE,
73 TABLE_CRASH_RECOVERY,
74 #ifdef USE_CAMERA_CONTROL
75 TABLE_CAMERA_CONTROL_MODE,
76 #endif
77 TABLE_BUS_TYPE,
78 #ifdef USE_MAX7456
79 TABLE_MAX7456_CLOCK,
80 #endif
81 #ifdef USE_RX_FRSKY_SPI
82 TABLE_RX_FRSKY_SPI_A1_SOURCE,
83 #endif
84 #ifdef USE_RANGEFINDER
85 TABLE_RANGEFINDER_HARDWARE,
86 #endif
87 #ifdef USE_GYRO_OVERFLOW_CHECK
88 TABLE_GYRO_OVERFLOW_CHECK,
89 #endif
90 TABLE_RATES_TYPE,
91 #ifdef USE_OVERCLOCK
92 TABLE_OVERCLOCK,
93 #endif
94 #ifdef USE_LED_STRIP
95 TABLE_RGB_GRB,
96 #endif
97 #ifdef USE_MULTI_GYRO
98 TABLE_GYRO,
99 #endif
100 TABLE_THROTTLE_LIMIT_TYPE,
101 #ifdef USE_MAX7456
102 TABLE_VIDEO_SYSTEM,
103 #endif // USE_MAX7456
104 #if defined(USE_ITERM_RELAX)
105 TABLE_ITERM_RELAX,
106 TABLE_ITERM_RELAX_TYPE,
107 #endif
108 #ifdef USE_ACRO_TRAINER
109 TABLE_ACRO_TRAINER_DEBUG,
110 #endif // USE_ACRO_TRAINER
111 #ifdef USE_RC_SMOOTHING_FILTER
112 TABLE_RC_SMOOTHING_TYPE,
113 TABLE_RC_SMOOTHING_DEBUG,
114 TABLE_RC_SMOOTHING_INPUT_TYPE,
115 TABLE_RC_SMOOTHING_DERIVATIVE_TYPE,
116 #endif // USE_RC_SMOOTHING_FILTER
117 #ifdef USE_VTX_COMMON
118 TABLE_VTX_LOW_POWER_DISARM,
119 #endif
120 TABLE_GYRO_HARDWARE,
121 #ifdef USE_SDCARD
122 TABLE_SDCARD_MODE,
123 #endif
124 #ifdef USE_LAUNCH_CONTROL
125 TABLE_LAUNCH_CONTROL_MODE,
126 #endif
127 #ifdef USE_TPA_MODE
128 TABLE_TPA_MODE,
129 #endif
130 #ifdef USE_LED_STRIP
131 TABLE_LED_PROFILE,
132 TABLE_LEDSTRIP_COLOR,
133 #endif
134 TABLE_GYRO_FILTER_DEBUG,
135 TABLE_POSITION_ALT_SOURCE,
136 TABLE_OFF_ON_AUTO,
137 TABLE_INTERPOLATED_SP,
138 TABLE_DSHOT_BITBANGED_TIMER,
139 TABLE_OSD_DISPLAYPORT_DEVICE,
140 #ifdef USE_OSD
141 TABLE_OSD_LOGO_ON_ARMING,
142 #endif
144 LOOKUP_TABLE_COUNT
145 } lookupTableIndex_e;
147 typedef struct lookupTableEntry_s {
148 const char * const *values;
149 const uint8_t valueCount;
150 } lookupTableEntry_t;
153 #define VALUE_TYPE_OFFSET 0
154 #define VALUE_SECTION_OFFSET 3
155 #define VALUE_MODE_OFFSET 5
157 typedef enum {
158 // value type, bits 0-2
159 VAR_UINT8 = (0 << VALUE_TYPE_OFFSET),
160 VAR_INT8 = (1 << VALUE_TYPE_OFFSET),
161 VAR_UINT16 = (2 << VALUE_TYPE_OFFSET),
162 VAR_INT16 = (3 << VALUE_TYPE_OFFSET),
163 VAR_UINT32 = (4 << VALUE_TYPE_OFFSET),
165 // value section, bits 3-4
166 MASTER_VALUE = (0 << VALUE_SECTION_OFFSET),
167 PROFILE_VALUE = (1 << VALUE_SECTION_OFFSET),
168 PROFILE_RATE_VALUE = (2 << VALUE_SECTION_OFFSET),
169 HARDWARE_VALUE = (3 << VALUE_SECTION_OFFSET), // Part of the master section, but used for the hardware definition
171 // value mode, bits 5-7
172 MODE_DIRECT = (0 << VALUE_MODE_OFFSET),
173 MODE_LOOKUP = (1 << VALUE_MODE_OFFSET),
174 MODE_ARRAY = (2 << VALUE_MODE_OFFSET),
175 MODE_BITSET = (3 << VALUE_MODE_OFFSET),
176 MODE_STRING = (4 << VALUE_MODE_OFFSET),
177 } cliValueFlag_e;
180 #define VALUE_TYPE_MASK (0x07)
181 #define VALUE_SECTION_MASK (0x18)
182 #define VALUE_MODE_MASK (0xE0)
184 typedef struct cliMinMaxConfig_s {
185 const int16_t min;
186 const int16_t max;
187 } cliMinMaxConfig_t;
189 typedef struct cliMinMaxUnsignedConfig_s {
190 const uint16_t min;
191 const uint16_t max;
192 } cliMinMaxUnsignedConfig_t;
194 typedef struct cliLookupTableConfig_s {
195 const lookupTableIndex_e tableIndex;
196 } cliLookupTableConfig_t;
198 typedef struct cliArrayLengthConfig_s {
199 const uint8_t length;
200 } cliArrayLengthConfig_t;
202 typedef struct cliStringLengthConfig_s {
203 const uint8_t minlength;
204 const uint8_t maxlength;
205 const uint8_t flags;
206 } cliStringLengthConfig_t;
208 #define STRING_FLAGS_NONE (0)
209 #define STRING_FLAGS_WRITEONCE (1 << 0)
211 typedef union {
212 cliLookupTableConfig_t lookup; // used for MODE_LOOKUP excl. VAR_UINT32
213 cliMinMaxConfig_t minmax; // used for MODE_DIRECT with signed parameters
214 cliMinMaxUnsignedConfig_t minmaxUnsigned; // used for MODE_DIRECT with unsigned parameters
215 cliArrayLengthConfig_t array; // used for MODE_ARRAY
216 cliStringLengthConfig_t string; // used for MODE_STRING
217 uint8_t bitpos; // used for MODE_BITSET
218 uint32_t u32Max; // used for MODE_DIRECT with VAR_UINT32
219 } cliValueConfig_t;
221 typedef struct clivalue_s {
222 const char *name;
223 const uint8_t type; // see cliValueFlag_e
224 const cliValueConfig_t config;
226 pgn_t pgn;
227 uint16_t offset;
228 } __attribute__((packed)) clivalue_t;
231 extern const lookupTableEntry_t lookupTables[];
232 extern const uint16_t valueTableEntryCount;
234 extern const clivalue_t valueTable[];
235 //extern const uint8_t lookupTablesEntryCount;
237 extern const char * const lookupTableGyroHardware[];
239 extern const char * const lookupTableAccHardware[];
240 //extern const uint8_t lookupTableAccHardwareEntryCount;
242 extern const char * const lookupTableBaroHardware[];
243 //extern const uint8_t lookupTableBaroHardwareEntryCount;
245 extern const char * const lookupTableMagHardware[];
246 //extern const uint8_t lookupTableMagHardwareEntryCount;
248 extern const char * const lookupTableRangefinderHardware[];
250 extern const char * const lookupTableLedstripColors[];
252 extern const char * const lookupTableRescueAltitudeMode[];
254 extern const char * const lookupTableItermRelax[];
256 extern const char * const lookupTableItermRelaxType[];
258 extern const char * const lookupTableOsdDisplayPortDevice[];
260 extern const char * const lookupTableInterpolatedSetpoint[];