1 #include <VP_Os/vp_os_print.h>
2 #include <VP_Os/vp_os_assert.h>
4 #include <ardrone_tool/UI/ardrone_input.h>
5 #include <ardrone_tool/UI/ardrone_tool_ui.h>
7 static input_device_t* devices[MAX_NUM_DEVICES];
9 static input_state_t input_state = { 0 };
11 C_RESULT ardrone_tool_input_add( input_device_t* device )
16 VP_OS_ASSERT( device != NULL );
21 while( i < MAX_NUM_DEVICES && devices[i] != NULL ) i++;
23 if( i < MAX_NUM_DEVICES )
25 if( VP_SUCCEEDED(device->init()) )
28 PRINT("Input device %s added\n", device->name);
33 PRINT("Input device %s init failed\n", device->name);
39 PRINT("Not enough memory to add input device %s\n", device->name);
45 static C_RESULT ardrone_tool_input_remove_i( int32_t i )
51 if( devices[i] != NULL )
53 if( VP_SUCCEEDED(devices[i]->shutdown()) )
55 PRINT("Input device %s removed\n", devices[i]->name);
60 PRINT("Input device %s removed but an error occured during its shutdown\n", devices[i]->name);
70 C_RESULT ardrone_tool_input_remove( input_device_t* device )
75 VP_OS_ASSERT( device != NULL );
80 while( i < MAX_NUM_DEVICES && devices[i] != device ) i++;
82 if( i < MAX_NUM_DEVICES )
84 res = ardrone_tool_input_remove_i(i);
88 DEBUG_PRINT_SDK("Input %s not found while removing\n", device->name);
94 C_RESULT ardrone_tool_set_ui_pad_ab(int32_t value)
96 input_state.ab = value;
97 return ui_pad_ab(value);
100 C_RESULT ardrone_tool_set_ui_pad_ag(int32_t value)
102 input_state.ag = value;
103 return ui_pad_ag(value);
106 C_RESULT ardrone_tool_set_ui_pad_ad(int32_t value)
108 input_state.ad = value;
109 return ui_pad_ad(value);
112 C_RESULT ardrone_tool_set_ui_pad_ah(int32_t value)
114 input_state.ah = value;
115 return ui_pad_ah(value);
118 C_RESULT ardrone_tool_set_ui_pad_l1(int32_t value)
120 input_state.l1 = value;
121 return ui_pad_l1(value);
124 C_RESULT ardrone_tool_set_ui_pad_r1(int32_t value)
126 input_state.r1 = value;
127 return ui_pad_r1(value);
130 C_RESULT ardrone_tool_set_ui_pad_l2(int32_t value)
132 input_state.l2 = value;
133 return ui_pad_l2(value);
136 C_RESULT ardrone_tool_set_ui_pad_r2(int32_t value)
138 input_state.r2 = value;
139 return ui_pad_r2(value);
142 C_RESULT ardrone_tool_set_ui_pad_select(int32_t value)
144 input_state.select = value;
145 return ui_pad_select(value);
149 C_RESULT ardrone_tool_set_ui_pad_start(int32_t value)
151 input_state.start = value;
152 return ui_pad_start_stop(value);
155 C_RESULT ardrone_tool_set_ui_pad_xy(int32_t x, int32_t y)
160 return ui_pad_xy_change(x, y);
163 C_RESULT ardrone_tool_input_init(void)
169 while( i < MAX_NUM_DEVICES )
175 return ardrone_tool_input_reset();
178 C_RESULT ardrone_tool_input_reset(void)
180 return ui_pad_reset_user_input(&input_state);
183 C_RESULT ardrone_tool_start_reset(void)
185 input_state.start = 0;
187 return ui_pad_reset_user_input_start(&input_state);
190 C_RESULT ardrone_tool_input_update(void)
198 while( VP_SUCCEEDED(res) && i < MAX_NUM_DEVICES )
200 if( devices[i] != NULL && VP_FAILED(devices[i]->update()) )
202 PRINT("Input device %s update failed... it'll be removed\n", devices[i]->name);
203 ardrone_tool_input_remove_i(i);
210 ui_pad_update_user_input(&input_state);
215 C_RESULT ardrone_tool_input_shutdown(void)
221 while( i < MAX_NUM_DEVICES )
223 ardrone_tool_input_remove_i(i);
230 input_state_t* ardrone_tool_get_input_state( void )
236 C_RESULT custom_reset_user_input(input_state_t* input_state, uint32_t user_input ) { return C_OK; }
237 C_RESULT custom_update_user_input(input_state_t* input_state, uint32_t user_input ) { return C_OK; }