0 votes

Mac os x - usb hid - comment recevoir les rappels de périphérique ajouté / périphérique supprimé ?

Je suis débutant en programmation sur mac os x.

Je suis en train de suivre ce tutoriel.

Et j'ai ce programme :

#include 
#include 
#include 
#include 

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

Qu'est-ce que je fais de mal, car je ne reçois pas les rappels lorsque j'insère ou retire un périphérique hid dans le port USB.

0voto

Mateusz Szlosek Points 21762

IOHIDManagerScheduleWithRunLoop est connecté à RunLoop, donc vous devez en démarrer un. La boucle while n'est pas la solution ici. Afin de recevoir des rappels, vous devriez remplacer la boucle while par l'appel CFRunLoopRun(). Plus d'informations sur les RunLoops dans la documentation.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X