Есть ли способ определить, принадлежат ли два IOHIDDeviceRef одному и тому же устройству?

У меня есть две ссылки на устройства HID в Mac OS (IOHIDDeviceRef). Как определить, указывают ли они на одно и то же физическое устройство?

Бонусные баллы: какие свойства можно использовать для идентификации устройства, если оно было переподключено или новое устройство.


person Shchvova    schedule 04.11.2015    source источник


Ответы (1)


Для каждой ссылки на устройство HID вызовите IOHIDDeviceGetService, чтобы получить ссылку IOService. Каждый экземпляр IOService (технически, экземпляры его суперкласса IORegistryEntry) имеет уникальный «идентификатор записи», который можно запросить через IORegistryEntryGetRegistryEntryID(). Если Entry ID совпадает с двумя объектами io_service_t, соответствующими ссылкам на HID-устройства, то они относятся к одному и тому же устройству.

Отключение и повторное подключение изменит идентификатор входа, поэтому вы не сможете определить, является ли это тем же устройством, которое было подключено ранее с помощью этого метода. Если базовое устройство USB или Bluetooth имеет серийный номер, вы можете использовать его в сочетании с идентификаторами производителя, продукта и т. д.

person pmdj    schedule 04.11.2015
comment
Спасибо! Что касается идентификации устройств между сеансами, в настоящее время я использую серийный номер. Для bluetooth-устройств он всегда доступен (идентификатор bluetooth). Для USB-устройств я использую LocationID. Это немного шатко, но этот идентификатор останется тем же, что и подключенные устройства, и топология USB останется прежней. - person Shchvova; 04.11.2015