@@ -150,6 +150,9 @@ struct hid_device_ {
150
150
int config_number ;
151
151
/* The interface number of the HID */
152
152
int interface ;
153
+ int interface_class ;
154
+ int interface_subclass ;
155
+ int interface_protocol ;
153
156
154
157
uint16_t report_descriptor_size ;
155
158
@@ -651,7 +654,7 @@ static void invasive_fill_device_info_usage(struct hid_device_info *cur_dev, lib
651
654
* Create and fill up most of hid_device_info fields.
652
655
* usage_page/usage is not filled up.
653
656
*/
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 )
655
658
{
656
659
struct hid_device_info * cur_dev = calloc (1 , sizeof (struct hid_device_info ));
657
660
if (cur_dev == NULL ) {
@@ -665,6 +668,9 @@ static struct hid_device_info * create_device_info_for_device(libusb_device *dev
665
668
cur_dev -> release_number = desc -> bcdDevice ;
666
669
667
670
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 ;
668
674
669
675
cur_dev -> bus_type = HID_API_BUS_USB ;
670
676
@@ -797,7 +803,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
797
803
}
798
804
#endif
799
805
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 );
801
807
if (tmp ) {
802
808
#ifdef INVASIVE_GET_USAGE
803
809
/* 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
1089
1095
/* Store off the USB information */
1090
1096
dev -> config_number = config_number ;
1091
1097
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 ;
1092
1101
1093
1102
dev -> report_descriptor_size = get_report_descriptor_size_from_interface_descriptors (intf_desc );
1094
1103
@@ -1606,7 +1615,7 @@ HID_API_EXPORT struct hid_device_info *HID_API_CALL hid_get_device_info(hid_devi
1606
1615
libusb_device * usb_device = libusb_get_device (dev -> device_handle );
1607
1616
libusb_get_device_descriptor (usb_device , & desc );
1608
1617
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 );
1610
1619
// device error already set by create_device_info_for_device, if any
1611
1620
1612
1621
if (dev -> device_info ) {
0 commit comments