У меня есть библиотека для доступа к USB-устройству, которое регистрируется как HID-устройство и позволяет приложениям Mac выполнять все виды изящных задач (GPIO, I2C и т. Д.).Эту библиотеку можно найти здесь:
https://github.com/codemercs-com/io-warrior-mac
Поскольку я обновил проект до MacOS 10.13 SDK, IOServiceGetMatchingServices () возвращает нулевой объект итератора при вызове из обратного вызова DeviceAdded
, ноне возвращает код ошибки.
Я предполагаю, что что-то в IOKit коренным образом изменилось с тех пор, как я первоначально написал эту библиотеку около 2002 года.
Я регистрирую свое подключенное к устройству устройствообратный вызов, подобный следующему:
result = IOServiceAddMatchingNotification(gNotifyPort,
kIOFirstMatchNotification, matchingDict,
IOWarriorAdded, NULL, &gIOWarriorAddedIter);
Источник
Этот обратный вызов действительно вызывается, когда подключено поддерживаемое устройство, но когда я впоследствии вызываю IOServiceGetMatchingServices, итераторноль, - или, когда другие устройства уже были подключены, содержит только эти устройства, но не те, которые были недавно подключены.
io_iterator_t IOWarriorFindHIDDevices ()
{
CFMutableDictionaryRef hidMatchDictionary = IOWarriorSetUpHIDMatchingDictionary ();
// Set up matching dictionary to search the I/O Registry for HID devices we are interested in. Dictionary reference is NULL if error.
if (NULL == hidMatchDictionary) {
PrintErrMsg ("Couldn't create a matching dictionary.");
return 0;
}
io_iterator_t hidObjectIterator;
// Now search I/O Registry for matching devices.
IOReturn ioReturnValue = IOServiceGetMatchingServices (kIOMasterPortDefault, hidMatchDictionary, &hidObjectIterator);
if (ioReturnValue != kIOReturnSuccess) {
PrintErrMsgIfIOErr(ioReturnValue, "IOServiceGetMatchingServices returned error");
return 0;
}
if (hidObjectIterator == 0) {
PrintErrMsg("IOServiceGetMatchingServices returned nil hidObjectIterator");
return 0;
}
return hidObjectIterator;
}
Источник
Когдаперебирая доступные устройства при запуске приложения, все устройства обнаруживаются просто отлично.
Есть идеи, что я могу сделать не так, здесь?