Вы можете адаптировать 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;
}