[FLYWOOF411] add board documentation
[inav/snaewe.git] / src / main / fc / runtime_config.h
blobd24ea66a25d4fcbed3359dfd9d5b199c8fadca68
1 /*
2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
18 #pragma once
20 // FIXME some of these are flight modes, some of these are general status indicators
21 typedef enum {
22 ARMED = (1 << 2),
23 WAS_EVER_ARMED = (1 << 3),
25 ARMING_DISABLED_FAILSAFE_SYSTEM = (1 << 7),
27 ARMING_DISABLED_NOT_LEVEL = (1 << 8),
28 ARMING_DISABLED_SENSORS_CALIBRATING = (1 << 9),
29 ARMING_DISABLED_SYSTEM_OVERLOADED = (1 << 10),
30 ARMING_DISABLED_NAVIGATION_UNSAFE = (1 << 11),
31 ARMING_DISABLED_COMPASS_NOT_CALIBRATED = (1 << 12),
32 ARMING_DISABLED_ACCELEROMETER_NOT_CALIBRATED = (1 << 13),
33 ARMING_DISABLED_ARM_SWITCH = (1 << 14),
34 ARMING_DISABLED_HARDWARE_FAILURE = (1 << 15),
35 ARMING_DISABLED_BOXFAILSAFE = (1 << 16),
36 ARMING_DISABLED_BOXKILLSWITCH = (1 << 17),
37 ARMING_DISABLED_RC_LINK = (1 << 18),
38 ARMING_DISABLED_THROTTLE = (1 << 19),
39 ARMING_DISABLED_CLI = (1 << 20),
40 ARMING_DISABLED_CMS_MENU = (1 << 21),
41 ARMING_DISABLED_OSD_MENU = (1 << 22),
42 ARMING_DISABLED_ROLLPITCH_NOT_CENTERED = (1 << 23),
43 ARMING_DISABLED_SERVO_AUTOTRIM = (1 << 24),
44 ARMING_DISABLED_OOM = (1 << 25),
45 ARMING_DISABLED_INVALID_SETTING = (1 << 26),
46 ARMING_DISABLED_PWM_OUTPUT_ERROR = (1 << 27),
48 ARMING_DISABLED_ALL_FLAGS = (ARMING_DISABLED_FAILSAFE_SYSTEM | ARMING_DISABLED_NOT_LEVEL | ARMING_DISABLED_SENSORS_CALIBRATING |
49 ARMING_DISABLED_SYSTEM_OVERLOADED | ARMING_DISABLED_NAVIGATION_UNSAFE |
50 ARMING_DISABLED_COMPASS_NOT_CALIBRATED | ARMING_DISABLED_ACCELEROMETER_NOT_CALIBRATED |
51 ARMING_DISABLED_ARM_SWITCH | ARMING_DISABLED_HARDWARE_FAILURE | ARMING_DISABLED_BOXFAILSAFE |
52 ARMING_DISABLED_BOXKILLSWITCH | ARMING_DISABLED_RC_LINK | ARMING_DISABLED_THROTTLE | ARMING_DISABLED_CLI |
53 ARMING_DISABLED_CMS_MENU | ARMING_DISABLED_OSD_MENU | ARMING_DISABLED_ROLLPITCH_NOT_CENTERED |
54 ARMING_DISABLED_SERVO_AUTOTRIM | ARMING_DISABLED_OOM | ARMING_DISABLED_INVALID_SETTING |
55 ARMING_DISABLED_PWM_OUTPUT_ERROR),
56 } armingFlag_e;
58 // Arming blockers that can be overriden by emergency arming.
59 // Keep in mind that this feature is intended to allow arming in
60 // situations where we might just need the motors to spin so the
61 // aircraft can move (even unpredictably) and get unstuck (e.g.
62 // crashed into a high tree).
63 #define ARMING_DISABLED_EMERGENCY_OVERRIDE (ARMING_DISABLED_NOT_LEVEL \
64 | ARMING_DISABLED_NAVIGATION_UNSAFE \
65 | ARMING_DISABLED_COMPASS_NOT_CALIBRATED \
66 | ARMING_DISABLED_ACCELEROMETER_NOT_CALIBRATED \
67 | ARMING_DISABLED_ARM_SWITCH \
68 | ARMING_DISABLED_HARDWARE_FAILURE)
71 extern uint32_t armingFlags;
73 extern const char *armingDisableFlagNames[];
75 #define isArmingDisabled() (armingFlags & (ARMING_DISABLED_ALL_FLAGS))
76 #define DISABLE_ARMING_FLAG(mask) (armingFlags &= ~(mask))
77 #define ENABLE_ARMING_FLAG(mask) (armingFlags |= (mask))
78 #define ARMING_FLAG(mask) (armingFlags & (mask))
80 // Returns the 1st flag from ARMING_DISABLED_ALL_FLAGS which is
81 // preventing arming, or zero is arming is not disabled.
82 armingFlag_e isArmingDisabledReason(void);
84 typedef enum {
85 ANGLE_MODE = (1 << 0),
86 HORIZON_MODE = (1 << 1),
87 HEADING_MODE = (1 << 2),
88 NAV_ALTHOLD_MODE= (1 << 3), // old BARO
89 NAV_RTH_MODE = (1 << 4), // old GPS_HOME
90 NAV_POSHOLD_MODE= (1 << 5), // old GPS_HOLD
91 HEADFREE_MODE = (1 << 6),
92 NAV_LAUNCH_MODE = (1 << 7),
93 MANUAL_MODE = (1 << 8),
94 FAILSAFE_MODE = (1 << 9),
95 AUTO_TUNE = (1 << 10), // old G-Tune
96 NAV_WP_MODE = (1 << 11),
97 NAV_CRUISE_MODE = (1 << 12),
98 FLAPERON = (1 << 13),
99 TURN_ASSISTANT = (1 << 14),
100 } flightModeFlags_e;
102 extern uint32_t flightModeFlags;
104 #define DISABLE_FLIGHT_MODE(mask) disableFlightMode(mask)
105 #define ENABLE_FLIGHT_MODE(mask) enableFlightMode(mask)
106 #define FLIGHT_MODE(mask) (flightModeFlags & (mask))
108 typedef enum {
109 GPS_FIX_HOME = (1 << 0),
110 GPS_FIX = (1 << 1),
111 CALIBRATE_MAG = (1 << 2),
112 SMALL_ANGLE = (1 << 3),
113 FIXED_WING_LEGACY = (1 << 4), // No new code should use this state. Use AIRPLANE, MULTIROTOR, ROVER, BOAT, ALTITUDE_CONTROL and MOVE_FORWARD_ONLY states
114 ANTI_WINDUP = (1 << 5),
115 FLAPERON_AVAILABLE = (1 << 6),
116 NAV_MOTOR_STOP_OR_IDLE = (1 << 7), // navigation requests MOTOR_STOP or motor idle regardless of throttle stick, will only activate if MOTOR_STOP feature is available
117 COMPASS_CALIBRATED = (1 << 8),
118 ACCELEROMETER_CALIBRATED = (1 << 9),
119 PWM_DRIVER_AVAILABLE = (1 << 10),
120 NAV_CRUISE_BRAKING = (1 << 11),
121 NAV_CRUISE_BRAKING_BOOST = (1 << 12),
122 NAV_CRUISE_BRAKING_LOCKED = (1 << 13),
123 NAV_EXTRA_ARMING_SAFETY_BYPASSED = (1 << 14), // nav_extra_arming_safey was bypassed. Keep it until power cycle.
124 AIRMODE_ACTIVE = (1 << 15),
125 ESC_SENSOR_ENABLED = (1 << 16),
126 AIRPLANE = (1 << 17),
127 MULTIROTOR = (1 << 18),
128 ROVER = (1 << 19),
129 BOAT = (1 << 20),
130 ALTITUDE_CONTROL = (1 << 21), //It means it can fly
131 MOVE_FORWARD_ONLY = (1 << 22),
132 SET_REVERSIBLE_MOTORS_FORWARD = (1 << 23),
133 FW_HEADING_USE_YAW = (1 << 24),
134 } stateFlags_t;
136 #define DISABLE_STATE(mask) (stateFlags &= ~(mask))
137 #define ENABLE_STATE(mask) (stateFlags |= (mask))
138 #define STATE(mask) (stateFlags & (mask))
140 extern uint32_t stateFlags;
142 typedef enum {
143 FLM_MANUAL,
144 FLM_ACRO,
145 FLM_ACRO_AIR,
146 FLM_ANGLE,
147 FLM_HORIZON,
148 FLM_ALTITUDE_HOLD,
149 FLM_POSITION_HOLD,
150 FLM_RTH,
151 FLM_MISSION,
152 FLM_CRUISE,
153 FLM_LAUNCH,
154 FLM_FAILSAFE,
155 FLM_COUNT
156 } flightModeForTelemetry_e;
158 flightModeForTelemetry_e getFlightModeForTelemetry(void);
160 uint32_t enableFlightMode(flightModeFlags_e mask);
161 uint32_t disableFlightMode(flightModeFlags_e mask);
163 bool sensors(uint32_t mask);
164 void sensorsSet(uint32_t mask);
165 void sensorsClear(uint32_t mask);
166 uint32_t sensorsMask(void);