@@ -193,7 +193,8 @@ STATIC xbox_input_map_t *pb_xbox_get_buttons(void) {
193193STATIC mp_obj_t pb_xbox_button_pressed (void ) {
194194 xbox_input_map_t * buttons = pb_xbox_get_buttons ();
195195
196- mp_obj_t items [16 ];
196+ // At most 16 simultaneous button presses, plus up to two dpad directions.
197+ mp_obj_t items [16 + 2 ];
197198 size_t count = 0 ;
198199
199200 if (buttons -> buttons & 1 ) {
@@ -245,6 +246,30 @@ STATIC mp_obj_t pb_xbox_button_pressed(void) {
245246 items [count ++ ] = pb_type_button_new (MP_QSTR_P4 );
246247 }
247248
249+ // Dpad is available as separate method, but can also be used as
250+ // a normal set of buttons.
251+ if (buttons -> dpad == 1 ) {
252+ items [count ++ ] = pb_type_button_new (MP_QSTR_UP );
253+ } else if (buttons -> dpad == 2 ) {
254+ items [count ++ ] = pb_type_button_new (MP_QSTR_UP );
255+ items [count ++ ] = pb_type_button_new (MP_QSTR_RIGHT );
256+ } else if (buttons -> dpad == 3 ) {
257+ items [count ++ ] = pb_type_button_new (MP_QSTR_RIGHT );
258+ } else if (buttons -> dpad == 4 ) {
259+ items [count ++ ] = pb_type_button_new (MP_QSTR_RIGHT );
260+ items [count ++ ] = pb_type_button_new (MP_QSTR_DOWN );
261+ } else if (buttons -> dpad == 5 ) {
262+ items [count ++ ] = pb_type_button_new (MP_QSTR_DOWN );
263+ } else if (buttons -> dpad == 6 ) {
264+ items [count ++ ] = pb_type_button_new (MP_QSTR_DOWN );
265+ items [count ++ ] = pb_type_button_new (MP_QSTR_LEFT );
266+ } else if (buttons -> dpad == 7 ) {
267+ items [count ++ ] = pb_type_button_new (MP_QSTR_LEFT );
268+ } else if (buttons -> dpad == 8 ) {
269+ items [count ++ ] = pb_type_button_new (MP_QSTR_LEFT );
270+ items [count ++ ] = pb_type_button_new (MP_QSTR_UP );
271+ }
272+
248273 return mp_obj_new_set (count , items );
249274}
250275
0 commit comments