The open source OpenXR runtime

st/prober: Add check for virtual hidraw devices

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2336>

authored by

Joel-Valenciano and committed by
Marge Bot
445829f6 6b01283b

+19 -9
+19 -9
src/xrt/state_trackers/prober/p_udev.c
··· 369 369 #endif 370 370 } 371 371 372 + static bool 373 + device_is_virtual(struct udev_device *raw_dev) 374 + { 375 + const char *prop_id_path = udev_device_get_property_value(raw_dev, "ID_PATH"); 376 + 377 + return (prop_id_path == NULL); 378 + } 379 + 372 380 static void 373 381 p_udev_enumerate_hidraw(struct prober *p, struct udev *udev) 374 382 { ··· 388 396 struct udev_device *raw_dev = NULL; 389 397 uint16_t vendor_id; 390 398 uint16_t product_id; 391 - uint16_t interface; 399 + uint16_t interface = 0; 392 400 uint8_t dev_class = 0; 393 401 uint16_t usb_bus = 0; 394 402 uint16_t usb_addr = 0; ··· 428 436 default: P_ERROR(p, "Unknown hidraw bus_type: '%i', ignoring.", bus_type); goto next; 429 437 } 430 438 431 - // HID interface. 432 - ret = p_udev_get_interface_number(raw_dev, &interface); 433 - if (ret != 0) { 434 - P_ERROR(p, 435 - "In enumerating hidraw devices: " 436 - "Failed to get interface number for '%s'", 437 - sysfs_path); 438 - goto next; 439 + // Get USB interface number for non-virtual devices. 440 + if (!device_is_virtual(raw_dev)) { 441 + ret = p_udev_get_interface_number(raw_dev, &interface); 442 + if (ret != 0) { 443 + P_ERROR(p, 444 + "In enumerating hidraw devices: " 445 + "Failed to get interface number for '%s'", 446 + sysfs_path); 447 + goto next; 448 + } 439 449 } 440 450 441 451 if (bus_type == HIDRAW_BUS_BLUETOOTH) {