mac os x - usb hid - ¿cómo se agregó el dispositivo de recepción / se eliminaron las devoluciones de llamada? [cerrado]

0

Soy un principiante en 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 elimino cualquier dispositivo oculto en el puerto USB.

usuario7864432
fuente
Creo que debería usar en RunLooplugar de whileen la función principal. use por ejemplo: CFRunLoopRun()para esto.
Mateusz Szlosek
sí, ese era el problema, gracias
user7864432

Respuestas:

0

IOHIDManagerScheduleWithRunLoopestá conectado a RunLoop, por lo que debe comenzar uno. whileLoop no es la solución aquí. Entonces, para obtener devoluciones de llamada, debe reemplazar el whilebucle con la CFRunLoopRun()llamada. Más información sobre RunLoops en la documentación .

Mateusz Szlosek
fuente