mac os x - usb hid - come il dispositivo di ricezione ha aggiunto / i callback rimossi dal dispositivo? [chiuso]

0

Sono un principiante alla programmazione su mac os x.

Sto seguendo questo tutorial .

E ho questo programma:

#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;
}

Cosa sto facendo male, perché non ricevo i callback quando inserisco o rimuovo un dispositivo nascosto nella porta USB.

    
posta user7864432 15.01.2015 - 13:50
fonte

1 risposta

0

IOHIDManagerScheduleWithRunLoop è agganciato a RunLoop , quindi è necessario avviarne uno. while loop non è la soluzione qui. Quindi, per ottenere i callback Dovresti sostituire while loop con CFRunLoopRun() call. Maggiori informazioni su RunLoops in documentazione .

    
risposta data 15.01.2015 - 15:58
fonte

Leggi altre domande sui tag