ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / Soft / Lib / ardrone_tool / Control / ardrone_control_ack.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/ardrone_tool/Control/ardrone_control_ack.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/ardrone_tool/Control/ardrone_control_ack.c
new file mode 100644 (file)
index 0000000..f5b5bbc
--- /dev/null
@@ -0,0 +1,35 @@
+#include <config.h>
+#include <ardrone_api.h>
+#include <ardrone_tool/Control/ardrone_control_ack.h>
+
+C_RESULT ardrone_control_ack_run( uint32_t ardrone_state, ardrone_control_ack_event_t* event )
+{
+  C_RESULT res;
+
+  switch( event->ack_state )
+  {
+    case ACK_COMMAND_MASK_TRUE:
+      res = ( ardrone_state & ARDRONE_COMMAND_MASK ) ? C_OK : C_FAIL;
+      if( VP_SUCCEEDED(res) )
+      {
+         ardrone_at_update_control_mode( ACK_CONTROL_MODE, 0);
+          event->ack_state = ACK_COMMAND_MASK_FALSE;
+      }
+      break;
+
+    case ACK_COMMAND_MASK_FALSE:
+      ardrone_at_update_control_mode( ACK_CONTROL_MODE, 0);
+
+      res = ( ( ardrone_state & ARDRONE_COMMAND_MASK ) == 0 ) ? C_OK : C_FAIL;
+      if( VP_SUCCEEDED(res) )
+        event->status = ARDRONE_CONTROL_EVENT_FINISH_SUCCESS;
+      break;
+
+    default:
+      res = C_FAIL;
+      event->ack_state = ACK_COMMAND_MASK_TRUE; // Go back to a know state (we may timeout)
+      break;
+  }
+
+  return res;
+}