@@ -951,13 +951,14 @@ struct SDL_hid_device
951
951
void * device ;
952
952
const struct hidapi_backend * backend ;
953
953
SDL_hid_device_info info ;
954
+ SDL_PropertiesID props ;
954
955
};
955
956
956
957
#if defined(HAVE_PLATFORM_BACKEND ) || defined(HAVE_DRIVER_BACKEND ) || defined(HAVE_LIBUSB )
957
958
958
959
static SDL_hid_device * CreateHIDDeviceWrapper (void * device , const struct hidapi_backend * backend )
959
960
{
960
- SDL_hid_device * wrapper = (SDL_hid_device * )SDL_malloc ( sizeof (* wrapper ));
961
+ SDL_hid_device * wrapper = (SDL_hid_device * )SDL_calloc ( 1 , sizeof (* wrapper ));
961
962
SDL_SetObjectValid (wrapper , SDL_OBJECT_TYPE_HIDAPI_DEVICE , true);
962
963
wrapper -> device = device ;
963
964
wrapper -> backend = backend ;
@@ -1424,7 +1425,9 @@ SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id
1424
1425
if (libusb_ctx ) {
1425
1426
pDevice = LIBUSB_hid_open (vendor_id , product_id , serial_number );
1426
1427
if (pDevice != NULL ) {
1427
- return CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1428
+ SDL_hid_device * dev = CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1429
+ SDL_SetPointerProperty (SDL_hid_get_properties (dev ), SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER , ((LIBUSB_hid_device * )pDevice )-> device_handle );
1430
+ return dev ;
1428
1431
}
1429
1432
}
1430
1433
#endif // HAVE_LIBUSB
@@ -1463,7 +1466,9 @@ SDL_hid_device *SDL_hid_open_path(const char *path)
1463
1466
if (libusb_ctx ) {
1464
1467
pDevice = LIBUSB_hid_open_path (path );
1465
1468
if (pDevice != NULL ) {
1466
- return CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1469
+ SDL_hid_device * dev = CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1470
+ SDL_SetPointerProperty (SDL_hid_get_properties (dev ), SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER , ((LIBUSB_hid_device * )pDevice )-> device_handle );
1471
+ return dev ;
1467
1472
}
1468
1473
}
1469
1474
#endif // HAVE_LIBUSB
@@ -1473,6 +1478,16 @@ SDL_hid_device *SDL_hid_open_path(const char *path)
1473
1478
return NULL ;
1474
1479
}
1475
1480
1481
+ SDL_PropertiesID SDL_hid_get_properties (SDL_hid_device * device )
1482
+ {
1483
+ CHECK_DEVICE_MAGIC (device , 0 );
1484
+
1485
+ if (!device -> props ) {
1486
+ device -> props = SDL_CreateProperties ();
1487
+ }
1488
+ return device -> props ;
1489
+ }
1490
+
1476
1491
int SDL_hid_write (SDL_hid_device * device , const unsigned char * data , size_t length )
1477
1492
{
1478
1493
CHECK_DEVICE_MAGIC (device , -1 );
@@ -1527,6 +1542,7 @@ int SDL_hid_close(SDL_hid_device *device)
1527
1542
CHECK_DEVICE_MAGIC (device , -1 );
1528
1543
1529
1544
device -> backend -> hid_close (device -> device );
1545
+ SDL_DestroyProperties (device -> props );
1530
1546
DeleteHIDDeviceWrapper (device );
1531
1547
return 0 ;
1532
1548
}
0 commit comments