@@ -47,25 +47,17 @@ typedef struct {
4747} app_usb_hid_event_t ;
4848
4949typedef struct
50- {
51- uint8_t reserved1 ;
52- uint8_t reserved2 ;
53-
50+ {
5451 bool btn_select :1 ;
55- bool btn_res1 :1 ;
56- bool btn_res2 :1 ;
5752 bool btn_start :1 ;
5853 bool btn_up :1 ;
59- bool btn_right :1 ;
6054 bool btn_down :1 ;
55+ bool btn_right :1 ;
6156 bool btn_left :1 ;
62-
63- bool btn_res3 :4 ;
64- bool btn_triangle :1 ;
65- bool btn_circle :1 ;
66- bool btn_cross :1 ;
67- bool btn_square :1 ;
68- } __attribute__((packed )) gamepad_t ;
57+
58+ bool btn_a :1 ;
59+ bool btn_b :1 ;
60+ } gamepad_t ;
6961
7062/*******************************************************************************
7163* Function definitions
@@ -253,22 +245,22 @@ void osd_getinput(void)
253245 }
254246 }
255247
256- if (app_gamepad_tmp .btn_cross != app_gamepad .btn_cross )
248+ if (app_gamepad_tmp .btn_a != app_gamepad .btn_a )
257249 {
258- pressed = (app_gamepad .btn_cross ? INP_STATE_MAKE : INP_STATE_BREAK );
250+ pressed = (app_gamepad .btn_a ? INP_STATE_MAKE : INP_STATE_BREAK );
259251 evh = event_get (event_joypad1_a );
260- app_gamepad_tmp .btn_cross = app_gamepad .btn_cross ;
252+ app_gamepad_tmp .btn_a = app_gamepad .btn_a ;
261253
262254 if (evh ) {
263255 evh (pressed );
264256 }
265257 }
266258
267- if (app_gamepad_tmp .btn_circle != app_gamepad .btn_circle )
259+ if (app_gamepad_tmp .btn_b != app_gamepad .btn_b )
268260 {
269- pressed = (app_gamepad .btn_circle ? INP_STATE_MAKE : INP_STATE_BREAK );
261+ pressed = (app_gamepad .btn_b ? INP_STATE_MAKE : INP_STATE_BREAK );
270262 evh = event_get (event_joypad1_b );
271- app_gamepad_tmp .btn_circle = app_gamepad .btn_circle ;
263+ app_gamepad_tmp .btn_b = app_gamepad .btn_b ;
272264
273265 if (evh ) {
274266 evh (pressed );
@@ -384,12 +376,22 @@ static void app_usb_hid_host_interface_callback(hid_host_device_handle_t hid_dev
384376 data = hid_host_device_get_data (hid_device_handle , & data_length );
385377 if (dev -> proto == HID_PROTOCOL_NONE ) {
386378 gamepad_t * gamepad = (gamepad_t * )data ;
387- if (data_length < 1 ) {
379+ if (data_length < 8 ) {
388380 break ;
389381 }
390- memcpy (& app_gamepad , gamepad , sizeof (gamepad_t ));
382+
383+ app_gamepad .btn_up = (data [1 ] == 0x00 ? true : false);
384+ app_gamepad .btn_down = (data [1 ] == 0xFF ? true : false);
385+ app_gamepad .btn_left = (data [0 ] == 0x00 ? true : false);
386+ app_gamepad .btn_right = (data [0 ] == 0xFF ? true : false);
387+
388+ app_gamepad .btn_select = (data [6 ]& 0x10 ? true : false);
389+ app_gamepad .btn_start = (data [6 ]& 0x20 ? true : false);
390+ app_gamepad .btn_a = (data [5 ]& 0x20 ? true : false);
391+ app_gamepad .btn_b = (data [5 ]& 0x40 ? true : false);
392+
391393 osd_getinput ();
392- //ESP_LOGW(TAG, "Gamepad... len: %d; 0x%02x 0x%02x 0x%02x 0x%02x ", data_length, data[0], data[1], data[2], data[3]);
394+ //ESP_LOGW(TAG, "Gamepad... len: %d; 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x ", data_length, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7 ]);
393395 }
394396 break ;
395397 case HID_HOST_INTERFACE_EVENT_TRANSFER_ERROR :
0 commit comments