[FLYWOOF411] add board documentation
[inav/snaewe.git] / src / main / fc / runtime_config.c
blobcb7af593bbecbf7256f085abfe2bb61d817f4337
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 #include <stdbool.h>
19 #include <stdint.h>
21 #include "platform.h"
23 #include "common/utils.h"
24 #include "fc/runtime_config.h"
26 #include "io/beeper.h"
28 EXTENDED_FASTRAM uint32_t armingFlags = 0;
29 EXTENDED_FASTRAM uint32_t stateFlags = 0;
30 EXTENDED_FASTRAM uint32_t flightModeFlags = 0;
32 static EXTENDED_FASTRAM uint32_t enabledSensors = 0;
34 #if !defined(CLI_MINIMAL_VERBOSITY)
35 const char *armingDisableFlagNames[]= {
36 "FS", "ANGLE", "CAL", "OVRLD", "NAV", "COMPASS",
37 "ACC", "ARMSW", "HWFAIL", "BOXFS", "KILLSW", "RX",
38 "THR", "CLI", "CMS", "OSD", "ROLL/PITCH", "AUTOTRIM", "OOM",
39 "SETTINGFAIL", "PWMOUT"
41 #endif
43 const armingFlag_e armDisableReasonsChecklist[] = {
44 ARMING_DISABLED_INVALID_SETTING,
45 ARMING_DISABLED_HARDWARE_FAILURE,
46 ARMING_DISABLED_PWM_OUTPUT_ERROR,
47 ARMING_DISABLED_COMPASS_NOT_CALIBRATED,
48 ARMING_DISABLED_ACCELEROMETER_NOT_CALIBRATED,
49 ARMING_DISABLED_RC_LINK,
50 ARMING_DISABLED_NAVIGATION_UNSAFE,
51 ARMING_DISABLED_ARM_SWITCH,
52 ARMING_DISABLED_BOXFAILSAFE,
53 ARMING_DISABLED_BOXKILLSWITCH,
54 ARMING_DISABLED_THROTTLE,
55 ARMING_DISABLED_CLI,
56 ARMING_DISABLED_CMS_MENU,
57 ARMING_DISABLED_OSD_MENU,
58 ARMING_DISABLED_ROLLPITCH_NOT_CENTERED,
59 ARMING_DISABLED_SERVO_AUTOTRIM,
60 ARMING_DISABLED_OOM
63 armingFlag_e isArmingDisabledReason(void)
65 // Shortcut, if we don't block arming at all
66 if (!isArmingDisabled()) {
67 return 0;
70 armingFlag_e reasons = armingFlags & ARMING_DISABLED_ALL_FLAGS;
72 // First check for "more important reasons"
73 for (unsigned ii = 0; ii < ARRAYLEN(armDisableReasonsChecklist); ii++) {
74 armingFlag_e flag = armDisableReasonsChecklist[ii];
75 if (flag & reasons) {
76 return flag;
80 // Fallback, we ended up with a blocker flag not included in armDisableReasonsChecklist[]
81 for (unsigned ii = 0; ii < sizeof(armingFlag_e) * 8; ii++) {
82 armingFlag_e flag = 1u << ii;
83 if (flag & reasons) {
84 return flag;
88 return 0;
91 /**
92 * Enables the given flight mode. A beep is sounded if the flight mode
93 * has changed. Returns the new 'flightModeFlags' value.
95 uint32_t enableFlightMode(flightModeFlags_e mask)
97 uint32_t oldVal = flightModeFlags;
99 flightModeFlags |= (mask);
100 if (flightModeFlags != oldVal)
101 beeperConfirmationBeeps(1);
102 return flightModeFlags;
106 * Disables the given flight mode. A beep is sounded if the flight mode
107 * has changed. Returns the new 'flightModeFlags' value.
109 uint32_t disableFlightMode(flightModeFlags_e mask)
111 uint32_t oldVal = flightModeFlags;
113 flightModeFlags &= ~(mask);
114 if (flightModeFlags != oldVal)
115 beeperConfirmationBeeps(1);
116 return flightModeFlags;
119 bool sensors(uint32_t mask)
121 return enabledSensors & mask;
124 void sensorsSet(uint32_t mask)
126 enabledSensors |= mask;
129 void sensorsClear(uint32_t mask)
131 enabledSensors &= ~(mask);
134 uint32_t sensorsMask(void)
136 return enabledSensors;
139 flightModeForTelemetry_e getFlightModeForTelemetry(void)
141 if (FLIGHT_MODE(FAILSAFE_MODE))
142 return FLM_FAILSAFE;
144 if (FLIGHT_MODE(MANUAL_MODE))
145 return FLM_MANUAL;
147 if (FLIGHT_MODE(NAV_RTH_MODE))
148 return FLM_RTH;
150 if (FLIGHT_MODE(NAV_POSHOLD_MODE))
151 return FLM_POSITION_HOLD;
153 if (FLIGHT_MODE(NAV_CRUISE_MODE))
154 return FLM_CRUISE;
156 if (FLIGHT_MODE(NAV_WP_MODE))
157 return FLM_MISSION;
159 if (FLIGHT_MODE(NAV_ALTHOLD_MODE))
160 return FLM_ALTITUDE_HOLD;
162 if (FLIGHT_MODE(ANGLE_MODE))
163 return FLM_ANGLE;
165 if (FLIGHT_MODE(HORIZON_MODE))
166 return FLM_HORIZON;
168 if (FLIGHT_MODE(NAV_LAUNCH_MODE))
169 return FLM_LAUNCH;
171 return STATE(AIRMODE_ACTIVE) ? FLM_ACRO_AIR : FLM_ACRO;