mac os x - usb hid - 如何接收设备添加/设备移除回调?

mac os x - usb hid - how the receive device added / device removed callbacks?

我是 mac os x.

编程的初学者

我正在关注这个tutorial

我有这个程序:

#include <stdio.h>
#include <IOKit/hid/IOHIDManager.h>
#include <IOKit/hid/IOHIDKeys.h>
#include <CoreFoundation/CoreFoundation.h>

static void Handle_DeviceMatchingCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
    puts("YAY Handle_DeviceMatchingCallback");
}

static void Handle_DeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
    puts("YAY Handle_DeviceRemovalCallback");
}

int main()
{
    IOHIDManagerRef HIDManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
    IOHIDManagerSetDeviceMatching(HIDManager, NULL);

    IOHIDManagerRegisterDeviceMatchingCallback(HIDManager, &Handle_DeviceMatchingCallback, NULL);
    IOHIDManagerRegisterDeviceRemovalCallback(HIDManager, &Handle_DeviceRemovalCallback, NULL);

    IOHIDManagerScheduleWithRunLoop(HIDManager, CFRunLoopGetMain(), kCFRunLoopDefaultMode);

    IOReturn IOReturn = IOHIDManagerOpen(HIDManager, kIOHIDOptionsTypeNone);
    if(IOReturn) puts("IOHIDManagerOpen failed.");

    while(1)
    {
        puts("sleeping...");
        sleep(1);
    }

    return 0;
}

我做错了什么,因为当我在 USB 端口插入或移除任何隐藏设备时,我没有得到回调。

IOHIDManagerScheduleWithRunLoop 挂接到 运行 循环 ,因此您需要启动一个。 while 循环不是这里的解决方案。因此,为了获得回调,您应该将 while 循环替换为 CFRunLoopRun() 调用。

有关 运行documentation 中的循环的更多信息。