mac os x - usb hid - ¿cómo se agregaron / devolvieron las devoluciones de llamadas del dispositivo de recepción? [cerrado]

0

Soy un principiante en la programación en mac os x.

Estoy siguiendo este tutorial .

Y tengo este programa:

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

Lo que estoy haciendo mal, porque no recibo las devoluciones de llamada cuando inserto o quito cualquier dispositivo oculto en el puerto USB.

    
pregunta user7864432 15.01.2015 - 13:50

1 respuesta

0

IOHIDManagerScheduleWithRunLoop está enlazado a RunLoop , por lo que necesita iniciar uno. while loop no es la solución aquí. Por lo tanto, para obtener devoluciones de llamada, debe reemplazar while loop con CFRunLoopRun() call. Más información sobre RunLoops en documentación .

    
respondido por el Mateusz Szlosek 15.01.2015 - 15:58

Lea otras preguntas en las etiquetas