Skip to content

Commit cff9615

Browse files
committed
Added interface_class, interface_subclass, and interface_protocol to USB device info
Currently only filled in for libusb
1 parent 052e73e commit cff9615

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/hidapi/SDL_hidapi.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,9 +1057,9 @@ CopyHIDDeviceInfo(struct hid_device_info *pSrc, struct SDL_hid_device_info *pDst
10571057
pDst->usage_page = pSrc->usage_page;
10581058
pDst->usage = pSrc->usage;
10591059
pDst->interface_number = pSrc->interface_number;
1060-
//pDst->interface_class = pSrc->interface_class;
1061-
//pDst->interface_subclass = pSrc->interface_subclass;
1062-
//pDst->interface_protocol = pSrc->interface_protocol;
1060+
pDst->interface_class = pSrc->interface_class;
1061+
pDst->interface_subclass = pSrc->interface_subclass;
1062+
pDst->interface_protocol = pSrc->interface_protocol;
10631063
pDst->next = NULL;
10641064
}
10651065

src/hidapi/hidapi/hidapi.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ extern "C" {
186186
Since version 0.13.0, @ref HID_API_VERSION >= HID_API_MAKE_VERSION(0, 13, 0)
187187
*/
188188
hid_bus_type bus_type;
189+
190+
/** Additional information about the USB interface.
191+
(libusb only) */
192+
int interface_class;
193+
int interface_subclass;
194+
int interface_protocol;
189195
};
190196

191197
#endif /* DEFINED_HID_TYPES */

src/hidapi/libusb/hid.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ struct hid_device_ {
150150
int config_number;
151151
/* The interface number of the HID */
152152
int interface;
153+
int interface_class;
154+
int interface_subclass;
155+
int interface_protocol;
153156

154157
uint16_t report_descriptor_size;
155158

@@ -651,7 +654,7 @@ static void invasive_fill_device_info_usage(struct hid_device_info *cur_dev, lib
651654
* Create and fill up most of hid_device_info fields.
652655
* usage_page/usage is not filled up.
653656
*/
654-
static struct hid_device_info * create_device_info_for_device(libusb_device *device, libusb_device_handle *handle, struct libusb_device_descriptor *desc, int config_number, int interface_num)
657+
static struct hid_device_info * create_device_info_for_device(libusb_device *device, libusb_device_handle *handle, struct libusb_device_descriptor *desc, int config_number, int interface_num, int interface_class, int interface_subclass, int interface_protocol)
655658
{
656659
struct hid_device_info *cur_dev = calloc(1, sizeof(struct hid_device_info));
657660
if (cur_dev == NULL) {
@@ -665,6 +668,9 @@ static struct hid_device_info * create_device_info_for_device(libusb_device *dev
665668
cur_dev->release_number = desc->bcdDevice;
666669

667670
cur_dev->interface_number = interface_num;
671+
cur_dev->interface_class = intf_desc->bInterfaceClass;
672+
cur_dev->interface_subclass = intf_desc->bInterfaceSubClass;
673+
cur_dev->interface_protocol = intf_desc->bInterfaceProtocol;
668674

669675
cur_dev->bus_type = HID_API_BUS_USB;
670676

@@ -797,7 +803,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
797803
}
798804
#endif
799805

800-
tmp = create_device_info_for_device(dev, handle, &desc, conf_desc->bConfigurationValue, intf_desc->bInterfaceNumber);
806+
tmp = create_device_info_for_device(dev, handle, &desc, conf_desc->bConfigurationValue, intf_desc->bInterfaceNumber, intf_desc->bInterfaceClass, intf_desc->bInterfaceSubClass, intf_desc->bInterfaceProtocol);
801807
if (tmp) {
802808
#ifdef INVASIVE_GET_USAGE
803809
/* TODO: have a runtime check for this section. */
@@ -1089,6 +1095,9 @@ static int hidapi_initialize_device(hid_device *dev, int config_number, const st
10891095
/* Store off the USB information */
10901096
dev->config_number = config_number;
10911097
dev->interface = intf_desc->bInterfaceNumber;
1098+
dev->interface_class = intf_desc->bInterfaceClass;
1099+
dev->interface_subclass = intf_desc->bInterfaceSubClass;
1100+
dev->interface_protocol = intf_desc->bInterfaceProtocol;
10921101

10931102
dev->report_descriptor_size = get_report_descriptor_size_from_interface_descriptors(intf_desc);
10941103

@@ -1606,7 +1615,7 @@ HID_API_EXPORT struct hid_device_info *HID_API_CALL hid_get_device_info(hid_devi
16061615
libusb_device *usb_device = libusb_get_device(dev->device_handle);
16071616
libusb_get_device_descriptor(usb_device, &desc);
16081617

1609-
dev->device_info = create_device_info_for_device(usb_device, dev->device_handle, &desc, dev->config_number, dev->interface);
1618+
dev->device_info = create_device_info_for_device(usb_device, dev->device_handle, &desc, dev->config_number, dev->interface, dev->interface_class, dev->interface_subclass, dev->interface_protocol);
16101619
// device error already set by create_device_info_for_device, if any
16111620

16121621
if (dev->device_info) {

0 commit comments

Comments
 (0)