@@ -960,13 +960,14 @@ struct SDL_hid_device
960
960
void * device ;
961
961
const struct hidapi_backend * backend ;
962
962
SDL_hid_device_info info ;
963
+ SDL_PropertiesID props ;
963
964
};
964
965
965
966
#if defined(HAVE_PLATFORM_BACKEND ) || defined(HAVE_DRIVER_BACKEND ) || defined(HAVE_LIBUSB )
966
967
967
968
static SDL_hid_device * CreateHIDDeviceWrapper (void * device , const struct hidapi_backend * backend )
968
969
{
969
- SDL_hid_device * wrapper = (SDL_hid_device * )SDL_malloc ( sizeof (* wrapper ));
970
+ SDL_hid_device * wrapper = (SDL_hid_device * )SDL_calloc ( 1 , sizeof (* wrapper ));
970
971
SDL_SetObjectValid (wrapper , SDL_OBJECT_TYPE_HIDAPI_DEVICE , true);
971
972
wrapper -> device = device ;
972
973
wrapper -> backend = backend ;
@@ -1433,7 +1434,9 @@ SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id
1433
1434
if (libusb_ctx ) {
1434
1435
pDevice = LIBUSB_hid_open (vendor_id , product_id , serial_number );
1435
1436
if (pDevice != NULL ) {
1436
- return CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1437
+ SDL_hid_device * dev = CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1438
+ SDL_SetPointerProperty (SDL_hid_get_properties (dev ), SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER , ((LIBUSB_hid_device * )pDevice )-> device_handle );
1439
+ return dev ;
1437
1440
}
1438
1441
}
1439
1442
#endif // HAVE_LIBUSB
@@ -1472,7 +1475,9 @@ SDL_hid_device *SDL_hid_open_path(const char *path)
1472
1475
if (libusb_ctx ) {
1473
1476
pDevice = LIBUSB_hid_open_path (path );
1474
1477
if (pDevice != NULL ) {
1475
- return CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1478
+ SDL_hid_device * dev = CreateHIDDeviceWrapper (pDevice , & LIBUSB_Backend );
1479
+ SDL_SetPointerProperty (SDL_hid_get_properties (dev ), SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER , ((LIBUSB_hid_device * )pDevice )-> device_handle );
1480
+ return dev ;
1476
1481
}
1477
1482
}
1478
1483
#endif // HAVE_LIBUSB
@@ -1482,6 +1487,16 @@ SDL_hid_device *SDL_hid_open_path(const char *path)
1482
1487
return NULL ;
1483
1488
}
1484
1489
1490
+ SDL_PropertiesID SDL_hid_get_properties (SDL_hid_device * device )
1491
+ {
1492
+ CHECK_DEVICE_MAGIC (device , 0 );
1493
+
1494
+ if (!device -> props ) {
1495
+ device -> props = SDL_CreateProperties ();
1496
+ }
1497
+ return device -> props ;
1498
+ }
1499
+
1485
1500
int SDL_hid_write (SDL_hid_device * device , const unsigned char * data , size_t length )
1486
1501
{
1487
1502
CHECK_DEVICE_MAGIC (device , -1 );
@@ -1536,6 +1551,7 @@ int SDL_hid_close(SDL_hid_device *device)
1536
1551
CHECK_DEVICE_MAGIC (device , -1 );
1537
1552
1538
1553
device -> backend -> hid_close (device -> device );
1554
+ SDL_DestroyProperties (device -> props );
1539
1555
DeleteHIDDeviceWrapper (device );
1540
1556
return 0 ;
1541
1557
}
0 commit comments