This is a quick'n'dirty demo app for controlling an AR drone with an Android phone. It was originally based on the "San Angeles" NDK demo app. It was written to quickly test the following implementation choices: * display video stream in native code using OpenGL ES * retrieve events (touch, trackball, orientation sensor) in Java code and pass data to native threads The native application itself is derived from a sample linux PC code (not from the iPhone app), it consists in a few threads: - the "AT commands" thread sends control frames to AR drone - the "NAV data" thread receives navigation and status data from AR drone - the video thread receives a compressed video stream (encoded in a proprietary codec, UVLC) from AR drone Note: this demo app should *not* be used as a basis for a real port of the iPhone AR drone application. HOW TO USE ---------- 1) Setup wifi connection to drone in ad-hoc mode (currently not possible in Android), or to an access point, ONLY if drone has been flashed in "PC mode". 2) Launch AR drone app; a video stream should be displayed 3) Hold your phone in landscape mode with the trackball on the left 4) Tap the screen on the bottom left corner to take off/land 5) Touch the right part of the screen to control gas (up/middle/bottom) 6) While touching the screen or pressing the trackball, you can use phone orientation to control flight 7) Press and roll the trackball to control yaw 8) Release touchscreen and trackball to return the drone back into fix-point mode TODO/NOTES ---------- - implement proper thread resource management and synchronization - adjust thread prorities (AT commands should get the highest prio) - Use RENDERMODE_WHEN_DIRTY in order to render video only when a new frame has been decoded; this probably means calling requestRender() from native code. - understand Wi-Fi issues: we seem to have a lot of trouble connecting from Android phone to AR drone via an Access Point. We should probably try ad-hoc mode like in the iPhone app, but this does not seem to be supported in Android ? - improve control ergonomy - Nexus One trackball seems to miss press/release events (?), thus it is not usable as an orientation mode switch; keep a finger on the touch screen to use orientation mode.