ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / Soft / Common / control_states.h
1 /**
2  *  \file     control_states.h
3  *  \brief    Control states declaration for control loop & ihm display
4  *  \author   Sylvain Gaeremynck <sylvain.gaeremynck@parrot.com>
5  *  \version  1.0
6  */
7
8 #ifndef _CONTROL_STATES_H_
9 #define _CONTROL_STATES_H_
10
11 #ifdef CTRL_STATES_STRING
12 typedef char ctrl_string_t[32];
13 #endif
14
15 // Macros to customize preprocessing
16 // If this CTRL_STATES_STRING is not defined, this file declare several enumeration
17 // If user defines CTRL_STATES_STRING, this file will define several array of strings.
18 // Each string being equivalent to an enumeration entry
19
20 #ifdef CTRL_STATES_STRING
21 #define CVAR(a) #a  /* Using # causes the first argument after the # to be returned as a string in quotes */
22 #define CVARZ(a) #a
23 #else
24 #define CVARZ(a) a = 0
25 #define CVAR(a) a
26 #endif
27
28 /**
29  * \enum  CONTROL_STATE
30  * \brief control loop thread states.
31  * \brief this defines major states
32 */
33 #ifndef DO_NOT_INCLUDE_MAJOR_CTRL_STATES
34 #ifdef CTRL_STATES_STRING
35 static ctrl_string_t ctrl_states[] = {
36 #else
37 typedef enum {
38 #endif
39   CVARZ( CTRL_DEFAULT ),
40   CVAR( CTRL_INIT ),
41   CVAR( CTRL_LANDED ),
42   CVAR( CTRL_FLYING ),
43   CVAR( CTRL_HOVERING ),
44   CVAR( CTRL_TEST ),
45   CVAR( CTRL_TRANS_TAKEOFF ),
46   CVAR( CTRL_TRANS_GOTOFIX ),
47   CVAR( CTRL_TRANS_LANDING ),
48 #ifndef CTRL_STATES_STRING
49   CTRL_NUM_STATES
50 } CTRL_STATES;
51 #else
52 };
53 #endif
54 #endif
55
56 /**
57  * \enum  FLYING_STATES
58  * \brief flying states.
59  * \brief this is one of the minor state
60 */
61 #ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
62 #ifdef CTRL_STATES_STRING
63 static ctrl_string_t flying_states[] = {
64 #else
65 typedef enum {
66 #endif
67   CVARZ( FLYING_OK ),
68   CVAR( FLYING_LOST_ALT ),
69   CVAR( FLYING_LOST_ALT_GO_DOWN ),
70   CVAR( FLYING_ALT_OUT_ZONE ),
71   CVAR( FLYING_COMBINED_YAW )
72   #ifndef CTRL_STATES_STRING
73 } FLYING_STATES;
74 #else
75 };
76 #endif
77 #endif
78
79 /**
80  * \enum  HOVERING_STATES
81  * \brief flying states.
82  * \brief this is one of the minor state
83 */
84 #ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
85 #ifdef CTRL_STATES_STRING
86 static ctrl_string_t hovering_states[] = {
87 #else
88 typedef enum {
89 #endif
90   CVARZ( HOVERING_OK ),
91   CVAR( HOVERING_YAW ),
92   CVAR( HOVERING_YAW_LOST_ALT),
93   CVAR( HOVERING_YAW_LOST_ALT_GO_DOWN),
94   CVAR( HOVERING_ALT_OUT_ZONE),
95   CVAR( HOVERING_YAW_ALT_OUT_ZONE),
96   CVAR( HOVERING_LOST_ALT ),
97   CVAR( HOVERING_LOST_ALT_GO_DOWN ),
98   CVAR( HOVERING_LOST_COM ),
99   CVAR( LOST_COM_LOST_ALT ),
100   CVAR( LOST_COM_LOST_ALT_TOO_LONG ),
101   CVAR( LOST_COM_ALT_OK )
102 #ifndef CTRL_STATES_STRING
103 } HOVERING_STATES;
104 #else
105 };
106 #endif
107 #endif
108
109 /**
110  * \enum  TAKEOFF_TRANS_STATES
111  * \brief take off states.
112  * \brief this is one of the minor state
113 */
114 #ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
115 #ifdef CTRL_STATES_STRING
116 static ctrl_string_t takeoff_trans_states[] = {
117 #else
118 typedef enum {
119 #endif
120   CVARZ( TAKEOFF_GROUND ),
121   CVAR( TAKEOFF_AUTO ),
122   #ifndef CTRL_STATES_STRING
123 } TAKEOFF_TRANS_STATES;
124 #else
125 };
126 #endif
127 #endif
128
129 /**
130  * \enum  GOTOFIX_TRANS_STATES
131  * \brief gotofix substates.
132  * \brief this is one of the minor state
133 */
134 #ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
135 #ifdef CTRL_STATES_STRING
136 static ctrl_string_t gotofix_trans_states[] = {
137 #else
138 typedef enum {
139 #endif
140   CVARZ( GOTOFIX_OK ),
141   CVAR( GOTOFIX_LOST_ALT ),
142   CVAR( GOTOFIX_YAW ),
143   #ifndef CTRL_STATES_STRING
144 } GOTOFIX_TRANS_STATES;
145 #else
146 };
147 #endif
148 #endif
149
150 /**
151  * \enum  LANDING_TRANS_STATES
152  * \brief landing states.
153  * \brief this is one of the minor state
154 */
155 #ifndef DO_NOT_INCLUDE_MINOR_CTRL_STATES
156 #ifdef CTRL_STATES_STRING
157 static ctrl_string_t landing_trans_states[] = {
158 #else
159 typedef enum {
160 #endif
161   CVARZ( LANDING_CLOSED_LOOP ),
162   CVAR( LANDING_OPEN_LOOP ),
163   CVAR( LANDING_OPEN_LOOP_FAST )
164 #ifndef CTRL_STATES_STRING
165 } LANDING_TRANS_STATES;
166 #else
167 };
168 #endif
169 #endif
170
171 #ifdef CTRL_STATES_STRING
172 #ifndef DO_NOT_INCLUDE_CTRL_STATES_LINK
173 /**
174  * control link tates
175  * \brief This array is used to link minor states & major state's strings
176 */
177 static ctrl_string_t* control_states_link[] = {
178   NULL,
179   NULL,
180   NULL,
181   flying_states,
182   hovering_states,
183   NULL,
184   takeoff_trans_states,
185   gotofix_trans_states,
186   landing_trans_states
187 };
188 #endif
189 #endif
190
191 #endif // _CONTROL_STATES_H_