2 ***************************************************************************
4 * Copyright (C) 2007 Parrot S.A.
6 ***************************************************************************
12 #include <VP_Os/vp_os_types.h>
14 #include <win32_custom.h>
16 #include <generated_custom.h>
20 #undef ARDRONE_PIC_VERSION
22 #define USE_NAVDATA_IP
26 ///////////////////////////////////////////////
27 // Video configuration
28 #define VIDEO_ENABLE 1
30 ///////////////////////////////////////////////
31 // Vision configuration
33 #define VISION_ENABLE 1
34 // #define VISION_TEST_MODE
35 #define ARDRONE_VISION_DETECT
37 ///////////////////////////////////////////////
38 // Navdata configuration
40 #define NAVDATA_ENABLE 1
41 #define ND_WRITE_TO_FILE
43 # define NAVDATA_SUBSAMPLING 13 /* 200 / 15 fps = 13.3333 */
45 #if defined(NAVDATA_ENABLE)
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
64 #endif // ! NAVDATA_ENABLE
66 #ifndef ARDRONE_VISION_DETECT
67 # undef NAVDATA_VISION_DETECT_INCLUDED
68 #endif // ! ARDRONE_VISION_DETECT
70 ///////////////////////////////////////////////
73 #define USE_AUTOIP VP_COM_AUTOIP_DISABLE /* VP_COM_AUTOIP_ENABLE */
75 #define WIFI_NETMASK "255.255.255.0"
76 #define WIFI_GATEWAY WIFI_ARDRONE_IP
77 #define WIFI_SERVER WIFI_ARDRONE_IP
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
84 // Configure infrastructure mode given wifi driver compilation
85 #define WIFI_INFRASTRUCTURE 0
87 #define WIFI_PASSKEY "9F1C3EE11CBA230B27BF1C1B6F"
90 #define AUTH_PORT 5552
91 #define NAVDATA_PORT 5554
92 #define VIDEO_PORT 5555
94 #define RAW_CAPTURE_PORT 5557
95 #define PRINTF_PORT 5558
96 #define CONTROL_PORT 5559
98 ///////////////////////////////////////////////
99 // Wired configuration
101 #define WIRED_MOBILE_IP WIFI_MOBILE_IP
103 ///////////////////////////////////////////////
104 // Serial link configuration
108 #define SERIAL_LINK_0 "/dev/ttyPA0"
109 #define SERIAL_LINK_1 "/dev/ttyPA1"
110 #define SERIAL_LINK_2 "/dev/ttyPA2"
118 #define SERIAL_LINK_0 ""
119 #define SERIAL_LINK_1 ""
120 #define SERIAL_LINK_2 ""
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 */
129 #endif // USE_MINGW32
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 */
137 ///////////////////////////////////////////////
138 // Defines & types used in shared data
140 #define ARDRONE_ORIENTATION_HISTORY_SIZE 256
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)
147 #define VBAT_POWERING_OFF 9000 /* Minimum Battery Voltage [mV] to prevent damaging */
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 */
155 #define DEFAULT_MISC1_VALUE 2
156 #define DEFAULT_MISC2_VALUE 20
157 #define DEFAULT_MISC3_VALUE 2000
158 #define DEFAULT_MISC4_VALUE 3000
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,
185 ARDRONE_ANIM_PHI_THETA_MIXED,
186 ARDRONE_ANIM_DOUBLE_PHI_THETA_MIXED,
187 ARDRONE_NB_ANIM_MAYDAY
190 // Bitfield definition for user input
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;
211 /// \enum def_ardrone_state_mask_t is a bit field representing ARDrone' state
214 // Define masks for ARDrone state
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
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;
283 static INLINE uint32_t ardrone_set_state_with_mask( uint32_t state, uint32_t mask, bool_t value )
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
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
299 static INLINE bool_t ardrone_get_mask_from_state( uint32_t state, uint32_t mask )
301 return state & mask ? TRUE : FALSE;
304 /** Convert time value from proprietary format to (unsigned int) micro-second value
306 * @param time value in proprietary format
307 * @return time value in micro-second value (unsigned int)
309 static INLINE uint32_t ardrone_time_to_usec( uint32_t time )
311 return ((uint32_t)(time >> TSECDEC) * 1000000 + (uint32_t)(time & TUSECMASK));