Has*_*kun 20
您可以根据需要调整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;
}
Run Code Online (Sandbox Code Playgroud)
您只需要访问IOKit Registry.您可以使用该ioreg工具执行此操作(例如,通过system()或运行它popen()).如果没有,那么您至少可以使用它来验证您的代码:
ioreg工具信息:
$ man ioreg
Run Code Online (Sandbox Code Playgroud)
获取USB设备列表:
$ ioreg -Src IOUSBDevice
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15573 次 |
| 最近记录: |