faa381f9eace50417eabdfa52f156e4e106d521f
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / Soft / Common / config.h
1 /**
2 ***************************************************************************
3 *
4 * Copyright (C) 2007 Parrot S.A.
5 *
6 ***************************************************************************
7 */
8
9 #ifndef _CONFIG_H_
10 #define _CONFIG_H_
11
12 #include <VP_Os/vp_os_types.h>
13 #ifdef _WIN32
14         #include <win32_custom.h>
15 #else
16         #include <generated_custom.h>
17         #include <autoconf.h>
18 #endif
19
20 #undef ARDRONE_PIC_VERSION
21
22 #define USE_NAVDATA_IP
23 #define USE_AT_IP
24 #define USE_VIDEO_IP
25
26 ///////////////////////////////////////////////
27 // Video configuration
28 #define VIDEO_ENABLE            1
29
30 ///////////////////////////////////////////////
31 // Vision configuration
32
33 #define VISION_ENABLE           1
34 // #define VISION_TEST_MODE
35 #define ARDRONE_VISION_DETECT
36
37 ///////////////////////////////////////////////
38 // Navdata configuration
39
40 #define NAVDATA_ENABLE          1
41 #define ND_WRITE_TO_FILE
42
43 # define NAVDATA_SUBSAMPLING     13 /* 200 / 15 fps = 13.3333 */
44
45 #if defined(NAVDATA_ENABLE)
46
47 # define NAVDATA_VISION_DETECT_INCLUDED
48 # define NAVDATA_TRIMS_INCLUDED
49 # define NAVDATA_WATCHDOG
50 # define NAVDATA_EULER_ANGLES_INCLUDED
51 # define NAVDATA_PHYS_MEASURES_INCLUDED
52 # define NAVDATA_TIME_INCLUDED
53 # define NAVDATA_RAW_MEASURES_INCLUDED
54 # define NAVDATA_GYROS_OFFSETS_INCLUDED
55 # define NAVDATA_REFERENCES_INCLUDED
56 # define NAVDATA_RC_REFERENCES_INCLUDED
57 # define NAVDATA_PWM_INCLUDED
58 # define NAVDATA_ALTITUDE_INCLUDED
59 # define NAVDATA_VISION_INCLUDED
60 # define NAVDATA_VISION_PERF_INCLUDED
61 # define NAVDATA_TRACKERS_SEND
62 # define NAVDATA_VIDEO_STREAM_INCLUDED
63
64 #endif // ! NAVDATA_ENABLE
65
66 #ifndef ARDRONE_VISION_DETECT
67 # undef NAVDATA_VISION_DETECT_INCLUDED
68 #endif // ! ARDRONE_VISION_DETECT
69
70 ///////////////////////////////////////////////
71 // Wifi configuration
72
73 #define USE_AUTOIP              VP_COM_AUTOIP_DISABLE /* VP_COM_AUTOIP_ENABLE */
74
75 #define WIFI_NETMASK            "255.255.255.0"
76 #define WIFI_GATEWAY            WIFI_ARDRONE_IP
77 #define WIFI_SERVER             WIFI_ARDRONE_IP
78 #define WIFI_SECURE             0
79
80 #define WIFI_BASE_ADDR          0xc0a80100                              // 192.168.1.0
81 #define MULTICAST_BASE_ADDR     0xe0010100                              // 224.1.1.0
82 #define WIFI_BROADCAST_ADDR     (WIFI_BASE_ADDR | 0xff)    //XXX.XXX.XXX.255
83
84 // Configure infrastructure mode given wifi driver compilation
85 #define WIFI_INFRASTRUCTURE     0
86
87 #define WIFI_PASSKEY            "9F1C3EE11CBA230B27BF1C1B6F"
88
89 #define FTP_PORT                                5551
90 #define AUTH_PORT                               5552
91 #define NAVDATA_PORT            5554
92 #define VIDEO_PORT              5555
93 #define AT_PORT                 5556
94 #define RAW_CAPTURE_PORT        5557
95 #define PRINTF_PORT             5558
96 #define CONTROL_PORT            5559
97
98 ///////////////////////////////////////////////
99 // Wired configuration
100
101 #define WIRED_MOBILE_IP         WIFI_MOBILE_IP
102
103 ///////////////////////////////////////////////
104 // Serial link configuration
105
106 #ifdef USE_ELINUX
107
108 #define SERIAL_LINK_0           "/dev/ttyPA0"
109 #define SERIAL_LINK_1           "/dev/ttyPA1"
110 #define SERIAL_LINK_2           "/dev/ttyPA2"
111
112 #endif
113
114 #ifdef USE_LINUX
115
116 #ifdef USE_MINGW32
117
118 #define SERIAL_LINK_0           ""
119 #define SERIAL_LINK_1           ""
120 #define SERIAL_LINK_2           ""
121
122 #else
123
124 // Only USE_LINUX is defined
125 #define SERIAL_LINK_0           "/dev/ttyUSB0" /* Serial link for navdata & ATCmd */
126 #define SERIAL_LINK_1           "/dev/ttyUSB1" /* Serial link for video */
127 #define SERIAL_LINK_2           "/dev/ser2" /* Serial link for adc */
128
129 #endif // USE_MINGW32
130
131 #endif // USE_LINUX
132
133 #define SL0_BAUDRATE             VP_COM_BAUDRATE_460800 /* baud rate for serial link 0 */
134 #define SL1_BAUDRATE             VP_COM_BAUDRATE_460800 /* baud rate for serial link 1 */
135 #define SL2_BAUDRATE             VP_COM_BAUDRATE_460800 /* baud rate for serial link 2 */
136
137 ///////////////////////////////////////////////
138 // Defines & types used in shared data
139
140 #define ARDRONE_ORIENTATION_HISTORY_SIZE  256
141
142 #define TSECDEC     21 /* Defines used to format time ( seconds << 21 + useconds ) */
143 #define TUSECMASK   ((1 << TSECDEC) - 1)
144 #define TSECMASK    (0xffffffff & ~TUSECMASK)
145 #define TIME_TO_USEC    (0xffffffff & ~TUSECMASK)
146
147 #define VBAT_POWERING_OFF   9000    /* Minimum Battery Voltage [mV] to prevent damaging */
148
149 /* Syslog Configuration */
150 #define SYSLOG_NUM_BUFFERS        4     /* Number of actives buffers. When a buffer is full, it's dumped in file */
151 #define SYSLOG_BUFFER_SIZE        2048  /* Max number of bytes in a syslog buffer */
152 #define SYSLOG_BUFFER_DUMP_SIZE   128   /* Max number of bytes wrote at once during dump */
153
154
155 #define DEFAULT_MISC1_VALUE 2
156 #define DEFAULT_MISC2_VALUE 20
157 #define DEFAULT_MISC3_VALUE 2000
158 #define DEFAULT_MISC4_VALUE 3000
159
160
161 typedef enum {
162   MISC_VAR1 = 0,
163   MISC_VAR2,
164   MISC_VAR3,
165   MISC_VAR4,
166   NB_MISC_VARS
167 } misc_var_t;
168
169 // Mayday scenarii
170 typedef enum {
171         ARDRONE_ANIM_PHI_M30_DEG= 0,
172         ARDRONE_ANIM_PHI_30_DEG,
173         ARDRONE_ANIM_THETA_M30_DEG,
174         ARDRONE_ANIM_THETA_30_DEG,
175         ARDRONE_ANIM_THETA_20DEG_YAW_200DEG,
176         ARDRONE_ANIM_THETA_20DEG_YAW_M200DEG,
177         ARDRONE_ANIM_TURNAROUND,
178         ARDRONE_ANIM_TURNAROUND_GODOWN,
179         ARDRONE_ANIM_YAW_SHAKE,
180         ARDRONE_ANIM_YAW_DANCE,
181         ARDRONE_ANIM_PHI_DANCE,
182         ARDRONE_ANIM_THETA_DANCE,
183     ARDRONE_ANIM_VZ_DANCE,
184         ARDRONE_ANIM_WAVE,
185         ARDRONE_ANIM_PHI_THETA_MIXED,
186         ARDRONE_ANIM_DOUBLE_PHI_THETA_MIXED,
187         ARDRONE_NB_ANIM_MAYDAY
188 } anim_mayday_t;
189
190 // Bitfield definition for user input
191
192 typedef enum {
193   ARDRONE_UI_BIT_AG             = 0,
194   ARDRONE_UI_BIT_AB             = 1,
195   ARDRONE_UI_BIT_AD             = 2,
196   ARDRONE_UI_BIT_AH             = 3,
197   ARDRONE_UI_BIT_L1             = 4,
198   ARDRONE_UI_BIT_R1             = 5,
199   ARDRONE_UI_BIT_L2             = 6,
200   ARDRONE_UI_BIT_R2             = 7,
201   ARDRONE_UI_BIT_SELECT         = 8,
202   ARDRONE_UI_BIT_START          = 9,
203   ARDRONE_UI_BIT_TRIM_THETA     = 18,
204   ARDRONE_UI_BIT_TRIM_PHI       = 20,
205   ARDRONE_UI_BIT_TRIM_YAW       = 22,
206   ARDRONE_UI_BIT_X              = 24,
207   ARDRONE_UI_BIT_Y              = 28,
208 } ardrone_ui_bitfield_t;
209
210
211 /// \enum def_ardrone_state_mask_t is a bit field representing ARDrone' state
212
213
214 // Define masks for ARDrone state
215 // 31                                                             0
216 //  x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x -> state
217 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
218 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FLY MASK : (0) ardrone is landed, (1) ardrone is flying
219 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VIDEO MASK : (0) video disable, (1) video enable
220 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VISION MASK : (0) vision disable, (1) vision enable
221 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | | CONTROL ALGO : (0) euler angles control, (1) angular speed control
222 //  | | | | | | | | | | | | | | | | | | | | | | | | | | | ALTITUDE CONTROL ALGO : (0) altitude control inactive (1) altitude control active
223 //  | | | | | | | | | | | | | | | | | | | | | | | | | | USER feedback : Start button state
224 //  | | | | | | | | | | | | | | | | | | | | | | | | | Control command ACK : (0) None, (1) one received
225 //  | | | | | | | | | | | | | | | | | | | | | | | | Trim command ACK : (0) None, (1) one received
226 //  | | | | | | | | | | | | | | | | | | | | | | | Trim running : (0) none, (1) running
227 //  | | | | | | | | | | | | | | | | | | | | | | Trim result : (0) failed, (1) succeeded
228 //  | | | | | | | | | | | | | | | | | | | | | Navdata demo : (0) All navdata, (1) only navdata demo
229 //  | | | | | | | | | | | | | | | | | | | | Navdata bootstrap : (0) options sent in all or demo mode, (1) no navdata options sent
230 //  | | | | | | | | | | | | | | | | | | | | Motors status : (0) Ok, (1) Motors Com is down
231 //  | | | | | | | | | | | | | | | | | |
232 //  | | | | | | | | | | | | | | | | | Bit means that there's an hardware problem with gyrometers
233 //  | | | | | | | | | | | | | | | | VBat low : (1) too low, (0) Ok
234 //  | | | | | | | | | | | | | | | VBat high (US mad) : (1) too high, (0) Ok
235 //  | | | | | | | | | | | | | | Timer elapsed : (1) elapsed, (0) not elapsed
236 //  | | | | | | | | | | | | | Power : (0) Ok, (1) not enough to fly
237 //  | | | | | | | | | | | | Angles : (0) Ok, (1) out of range
238 //  | | | | | | | | | | | Wind : (0) Ok, (1) too much to fly
239 //  | | | | | | | | | | Ultrasonic sensor : (0) Ok, (1) deaf
240 //  | | | | | | | | | Cutout system detection : (0) Not detected, (1) detected
241 //  | | | | | | | | PIC Version number OK : (0) a bad version number, (1) version number is OK
242 //  | | | | | | | ATCodec thread ON : (0) thread OFF (1) thread ON
243 //  | | | | | | Navdata thread ON : (0) thread OFF (1) thread ON
244 //  | | | | | Video thread ON : (0) thread OFF (1) thread ON
245 //  | | | | Acquisition thread ON : (0) thread OFF (1) thread ON
246 //  | | | CTRL watchdog : (1) delay in control execution (> 5ms), (0) control is well scheduled // Check frequency of control loop
247 //  | | ADC Watchdog : (1) delay in uart2 dsr (> 5ms), (0) uart2 is good // Check frequency of uart2 dsr (com with adc)
248 //  | Communication Watchdog : (1) com problem, (0) Com is ok // Check if we have an active connection with a client
249 //  Emergency landing : (0) no emergency, (1) emergency
250
251 typedef enum {
252   ARDRONE_FLY_MASK            = 1 << 0,  /*!< FLY MASK : (0) ardrone is landed, (1) ardrone is flying */
253   ARDRONE_VIDEO_MASK          = 1 << 1,  /*!< VIDEO MASK : (0) video disable, (1) video enable */
254   ARDRONE_VISION_MASK         = 1 << 2,  /*!< VISION MASK : (0) vision disable, (1) vision enable */
255   ARDRONE_CONTROL_MASK        = 1 << 3,  /*!< CONTROL ALGO : (0) euler angles control, (1) angular speed control */
256   ARDRONE_ALTITUDE_MASK       = 1 << 4,  /*!< ALTITUDE CONTROL ALGO : (0) altitude control inactive (1) altitude control active */
257   ARDRONE_USER_FEEDBACK_START = 1 << 5,  /*!< USER feedback : Start button state */
258   ARDRONE_COMMAND_MASK        = 1 << 6,  /*!< Control command ACK : (0) None, (1) one received */
259   ARDRONE_FW_FILE_MASK        = 1 << 7,  /* Firmware file is good (1) */
260   ARDRONE_FW_VER_MASK         = 1 << 8,  /* Firmware update is newer (1) */
261 //  ARDRONE_FW_UPD_MASK         = 1 << 9,  /* Firmware update is ongoing (1) */
262   ARDRONE_NAVDATA_DEMO_MASK   = 1 << 10, /*!< Navdata demo : (0) All navdata, (1) only navdata demo */
263   ARDRONE_NAVDATA_BOOTSTRAP   = 1 << 11, /*!< Navdata bootstrap : (0) options sent in all or demo mode, (1) no navdata options sent */
264   ARDRONE_MOTORS_MASK         = 1 << 12, /*!< Motors status : (0) Ok, (1) Motors problem */
265   ARDRONE_COM_LOST_MASK       = 1 << 13, /*!< Communication Lost : (1) com problem, (0) Com is ok */
266   ARDRONE_VBAT_LOW            = 1 << 15, /*!< VBat low : (1) too low, (0) Ok */
267   ARDRONE_USER_EL             = 1 << 16, /*!< User Emergency Landing : (1) User EL is ON, (0) User EL is OFF*/
268   ARDRONE_TIMER_ELAPSED       = 1 << 17, /*!< Timer elapsed : (1) elapsed, (0) not elapsed */
269   ARDRONE_ANGLES_OUT_OF_RANGE = 1 << 19, /*!< Angles : (0) Ok, (1) out of range */
270   ARDRONE_ULTRASOUND_MASK     = 1 << 21, /*!< Ultrasonic sensor : (0) Ok, (1) deaf */
271   ARDRONE_CUTOUT_MASK         = 1 << 22, /*!< Cutout system detection : (0) Not detected, (1) detected */
272   ARDRONE_PIC_VERSION_MASK    = 1 << 23, /*!< PIC Version number OK : (0) a bad version number, (1) version number is OK */
273   ARDRONE_ATCODEC_THREAD_ON   = 1 << 24, /*!< ATCodec thread ON : (0) thread OFF (1) thread ON */
274   ARDRONE_NAVDATA_THREAD_ON   = 1 << 25, /*!< Navdata thread ON : (0) thread OFF (1) thread ON */
275   ARDRONE_VIDEO_THREAD_ON     = 1 << 26, /*!< Video thread ON : (0) thread OFF (1) thread ON */
276   ARDRONE_ACQ_THREAD_ON       = 1 << 27, /*!< Acquisition thread ON : (0) thread OFF (1) thread ON */
277   ARDRONE_CTRL_WATCHDOG_MASK  = 1 << 28, /*!< CTRL watchdog : (1) delay in control execution (> 5ms), (0) control is well scheduled */
278   ARDRONE_ADC_WATCHDOG_MASK   = 1 << 29, /*!< ADC Watchdog : (1) delay in uart2 dsr (> 5ms), (0) uart2 is good */
279   ARDRONE_COM_WATCHDOG_MASK   = 1 << 30, /*!< Communication Watchdog : (1) com problem, (0) Com is ok */
280   ARDRONE_EMERGENCY_MASK      = 1 << 31  /*!< Emergency landing : (0) no emergency, (1) emergency */
281 } def_ardrone_state_mask_t;
282
283 static INLINE uint32_t ardrone_set_state_with_mask( uint32_t state, uint32_t mask, bool_t value )
284 {
285   state &= ~mask;
286   if( value )
287     state |= mask;
288
289   return state;
290 }
291
292 /** Returns a bit value of state from a mask
293  * This function is used to test bits from a bit field like def_ardrone_state_mask_t
294  *
295  * @param state a 32 bits word we want to test
296  * @param mask a mask that tells the bit to test
297  * @return TRUE if bit is set, FALSE otherwise
298  */
299 static INLINE bool_t ardrone_get_mask_from_state( uint32_t state, uint32_t mask )
300 {
301   return state & mask ? TRUE : FALSE;
302 }
303
304 /** Convert time value from proprietary format to (unsigned int) micro-second value
305  *
306  * @param time value in proprietary format
307  * @return time value in micro-second value (unsigned int)
308  */
309 static INLINE uint32_t ardrone_time_to_usec( uint32_t time )
310 {
311   return ((uint32_t)(time >> TSECDEC) * 1000000 + (uint32_t)(time & TUSECMASK));
312 }
313
314
315 #ifdef DEBUG_MODE
316 #define POSIX_DEBUG
317 #endif // DEBUG_MODE
318
319 #endif // _CONFIG_H_