ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / Soft / Lib / ardrone_tool / UI / ardrone_tool_ui.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/ardrone_tool/UI/ardrone_tool_ui.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/ardrone_tool/UI/ardrone_tool_ui.c
new file mode 100644 (file)
index 0000000..853a3d6
--- /dev/null
@@ -0,0 +1,230 @@
+//
+// Inputs specification
+// rien d'appuyer : 11540000
+// start: 11540200
+// select: 11540000
+// 1 : 11540001
+// 2 : 11540002
+// 3 : 11540004
+// 4 : 11540008
+// 5 : 11540010
+// 6 : 11540020
+// 7 : 11540040
+// 8 : 11540080
+// x+: 12540000
+// x-: 10540000
+// y+: 01540000
+// y-: 21540000
+//
+// trims
+// r2 + x+ = 11640080
+// r2 + x- = 11440080
+// r2 + y+ = 11500080
+// r2 + y- = 11580080
+// r2 + 5  = 11140090
+// r2 + 6  = 119400A0
+//
+
+#include <config.h>
+#include <ardrone_api.h>
+
+#include <ardrone_tool/UI/ardrone_input.h>
+#include <ardrone_tool/UI/ardrone_tool_ui.h>
+
+static uint32_t user_input = 0;
+
+C_RESULT ui_pad_ab(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_AB);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_AB);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_ag(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_AG);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_AG);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_ad(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_AD);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_AD);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_ah(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_AH);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_AH);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_l1(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_L1);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_L1);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_r1(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_R1);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_R1);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_l2(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_L2);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_L2);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_r2(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_R2);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_R2);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_start_stop(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_START);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_START);
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_select(int32_t value)
+{
+       if( value )
+               user_input |= (1 << ARDRONE_UI_BIT_SELECT);
+       else
+               user_input &= ~(1 << ARDRONE_UI_BIT_SELECT);
+       
+       return C_OK;
+}
+
+C_RESULT ui_pad_xy_change(int32_t x, int32_t y)
+{
+  user_input &= ~(3 << ARDRONE_UI_BIT_X);
+  user_input &= ~(3 << ARDRONE_UI_BIT_Y);
+
+  user_input |= (x + 1) << ARDRONE_UI_BIT_X;
+  user_input |= (y + 1) << ARDRONE_UI_BIT_Y;
+
+  return C_OK;
+}
+
+C_RESULT ui_pad_reset_user_input(input_state_t* input_state)
+{
+  user_input = 0;
+  
+  input_state->ag       = 0;
+  input_state->ab       = 0;
+  input_state->ad       = 0;
+  input_state->ah       = 0;
+  input_state->l1       = 0;
+  input_state->r1       = 0;
+  input_state->l2       = 0;
+  //input_state->r2       = 0; (To avoid angle trim done when CTRL_TRANS_LANDING =>CTRL_LANDING)
+  input_state->select   = 0;
+  input_state->start    = 0;
+
+  input_state->x        = 0;
+  input_state->y        = 0;
+  
+  ui_pad_ag(1);
+  ui_pad_ag(0);
+  ui_pad_ab(1);
+  ui_pad_ab(0);
+  ui_pad_ad(1);
+  ui_pad_ad(0);
+  ui_pad_ah(1);
+  ui_pad_ah(0);
+  ui_pad_l1(1);
+  ui_pad_l1(0);
+  ui_pad_r1(1);
+  ui_pad_r1(0);
+  ui_pad_l2(1);
+  ui_pad_l2(0);
+  //ui_pad_r2_pressed(input_state);
+  //ui_pad_r2_released(input_state);
+  ui_pad_xy_change(0, 0);
+  ui_pad_yaw_trim(0);
+  ui_pad_phi_trim(0);
+  ui_pad_theta_trim(0);
+
+  return custom_reset_user_input(input_state, user_input);
+}
+
+C_RESULT ui_pad_reset_user_input_start(input_state_t* input_state)
+{
+  ui_pad_start_stop(0);
+
+  return custom_reset_user_input(input_state, user_input);
+}
+
+C_RESULT ui_pad_update_user_input(input_state_t* input_state)
+{
+  ardrone_at_set_ui_value( user_input );
+
+  return custom_update_user_input(input_state, user_input );
+}
+
+C_RESULT ui_pad_phi_trim( int32_t phi_trim )
+{
+       user_input &= ~(3 << ARDRONE_UI_BIT_TRIM_PHI);
+       user_input |= (phi_trim + 1) << ARDRONE_UI_BIT_TRIM_PHI;
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_theta_trim( int32_t theta_trim )
+{
+       user_input &= ~(3 << ARDRONE_UI_BIT_TRIM_THETA);
+       user_input |= (theta_trim + 1) << ARDRONE_UI_BIT_TRIM_THETA;
+
+       return C_OK;
+}
+
+C_RESULT ui_pad_yaw_trim( int32_t yaw_trim )
+{
+       user_input &= ~(3 << ARDRONE_UI_BIT_TRIM_YAW);
+       user_input |= (yaw_trim + 1) << ARDRONE_UI_BIT_TRIM_YAW;
+
+       return C_OK;
+}
+
+uint32_t ui_get_user_input(void)
+{
+  return user_input;
+}