Ответ 1
Вы можете адаптировать USBPrivateDataSample к вашим потребностям, образец устанавливает уведомитель, перечисляет текущие подключенные устройства, а затем ожидает подключения устройства/отсоединения. Если вы это сделаете, вы захотите удалить словари usbVendor
и usbProduct
, поэтому все USB-устройства будут сопоставлены.
В качестве альтернативы вы можете использовать IOServiceGetMatchingServices
, чтобы получить итератор для всех текущих сервисов соответствия, используя словарь, созданный IOServiceMatching(kIOUSBDeviceClassName)
.
Вот короткий образец (который я никогда не запускал):
#include <IOKit/IOKitLib.h>
#include <IOKit/usb/IOUSBLib.h>
int main(int argc, const char *argv[])
{
CFMutableDictionaryRef matchingDict;
io_iterator_t iter;
kern_return_t kr;
io_service_t device;
/* set up a matching dictionary for the class */
matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
if (matchingDict == NULL)
{
return -1; // fail
}
/* Now we have a dictionary, get an iterator.*/
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter);
if (kr != KERN_SUCCESS)
{
return -1;
}
/* iterate */
while ((device = IOIteratorNext(iter)))
{
/* do something with device, eg. check properties */
/* ... */
/* And free the reference taken before continuing to the next item */
IOObjectRelease(device);
}
/* Done, release the iterator */
IOObjectRelease(iter);
return 0;
}