@@ -552,6 +552,35 @@ static struct hid_device_info *create_device_info_with_usage(IOHIDDeviceRef dev,
552
552
cur_dev -> interface_number = -1 ;
553
553
}
554
554
555
+ if (cur_dev -> interface_number == -1 || cur_dev -> interface_number == 0 ) {
556
+ int old_interface_number = cur_dev -> interface_number ;
557
+ //try to Fallback to older interface number find rules
558
+ io_string_t temp_dev_path_str ;
559
+ char * temp_dev_path = NULL ;
560
+ /* Fill in the path (IOService plane) */
561
+ if (iokit_dev != MACH_PORT_NULL ) {
562
+ res = IORegistryEntryGetPath (iokit_dev , kIOServicePlane , temp_dev_path_str );
563
+ if (res == KERN_SUCCESS )
564
+ temp_dev_path = strdup (temp_dev_path_str );
565
+ else
566
+ temp_dev_path = strdup ("" );
567
+ }
568
+
569
+ if (temp_dev_path ) {
570
+ const char * match_prefix_string = "Interface@" ;
571
+ char * interface_component = strstr (temp_dev_path , match_prefix_string );
572
+ if (interface_component ) {
573
+ char * decimal_str = interface_component + strlen (match_prefix_string );
574
+ char * endptr = NULL ;
575
+ cur_dev -> interface_number = strtol (decimal_str , & endptr , 10 );
576
+ if (endptr == decimal_str ) {
577
+ /* The parsing failed. Set interface_number to old_interface_number. */
578
+ cur_dev -> interface_number = old_interface_number ;
579
+ }
580
+ }
581
+ }
582
+ }
583
+
555
584
/* Bus Type */
556
585
transport_prop = IOHIDDeviceGetProperty (dev , CFSTR (kIOHIDTransportKey ));
557
586
0 commit comments