2016-11-14 1 views
0

Sur macOS, j'utilise IOKit pour obtenir et définir des rapports HID via une connexion USB (pour les curieux, il s'agit d'un contrôleur pour un bureau permanent qui vous permet d'élever et d'abaisser le bureau par programmation). Je peux obtenir une liste des appareils utilisant un IOHIDManager:Sur Linux, quel est le meilleur moyen d'utiliser les rapports HID via USB?

_manager = IOHIDManagerCreate(NULL, 0); 

NSDictionary *deviceQuery = @{@kIOHIDVendorIDKey: @0x12D3, @kIOHIDProductIDKey: @0x0002}; 
IOHIDManagerSetDeviceMatching(_manager, (__bridge CFDictionaryRef)deviceQuery); 
IOHIDManagerOpen(_manager, kIOHIDManagerOptionNone); 

CFSetRef devices = IOHIDManagerCopyDevices(_manager); 

// pick a device from the set and you eventually get a... 
IOHIDDeviceRef myDevice = foo; 

Je puis construire des tampons de demande et faire des demandes à l'aide:

int8_t *_buffer = ...; 
IOHIDDeviceSetReport(myDevice, kIOHIDReportTypeFeature, *_buffer & 0xff, (const uint8_t *)_buffer, REQ_BUFFER_SIZE); 

... et lire les réponses en utilisant:

IOHIDDeviceGetReport(myDevice, kIOHIDReportTypeFeature, *_buffer & 0xff, (uint8_t *)_buffer, RES_BUFFER_SIZE); 

Qu'est-ce que est un moyen analogue de faire cela sur Linux? Je n'ai jamais travaillé avec USB sur Linux auparavant (ni les périphériques HID), et je suis ouvert à pratiquement n'importe quelle pile tant qu'elle fonctionnera sur un Raspberry Pi.

Répondre