Skip to content

Commit 0497f21

Browse files
fix: fix get hid device interface is always 0 on macos 13.3
1 parent 9f185ec commit 0497f21

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

mac/hid.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,35 @@ static struct hid_device_info *create_device_info_with_usage(IOHIDDeviceRef dev,
552552
cur_dev->interface_number = -1;
553553
}
554554

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+
555584
/* Bus Type */
556585
transport_prop = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDTransportKey));
557586

0 commit comments

Comments
 (0)