2017-01-09 1 views
1

Je dois créer un logiciel/pilote pour OSX qui interagit avec le périphérique HID connecté via USB. Les objectifs de l'application sont les suivants:Interface de périphérique HID dans MAC

  1. Détecter lorsque le périphérique HID est branché ou retiré. Le PID et le VID de l'appareil sont connus.
  2. Lire le numéro de série du périphérique HID, la version du microprogramme et d'autres informations sur le périphérique connecté correspondant au VID et au PID
  3. Obtenir des rapports et définir des rapports sur le périphérique HID lorsqu'il est connecté.
  4. Communiquer avec une autre application à travers laquelle l'utilisateur peut modifier le dispositif HID Réglage

Je ne suis pas un développeur de pilote, mais avoir une expérience en C, C++, Obj C etc. Je me demande ce qui sera le meilleur moyen d'atteindre les objectifs mentionnés. Est-ce que je devrais développer l'extension de noyau (conducteur) ou y a-t-il une meilleure alternative?.

Les défis que je rencontre sont,

  • À partir avec le développement du pilote
  • application Mac communication avec le conducteur.

De toute façon, c'est un nouveau champ pour moi. Pouvez-vous s'il vous plaît suggérer quelques documents ou exemples de codes, avec je peux commencer.

Veuillez également mentionner les forums ou les communautés qui pourraient être utiles pour développer un pilote de périphérique pour mac.

Merci à tous pour votre aide. :)

Répondre

2

MacOS X dispose déjà de pilotes pour les périphériques HID. Vous n'avez donc pas besoin de développer une extension spéciale driver/kernel pour cela.

Vous pouvez utiliser la bibliothèque opensource multiplateforme hidapi pour la communication avec les périphériques HID.

1

L'autre réponse à cette question vaut certainement pour un tas de cas d'utilisation différents, et je conseille de descendre cette route lorsque cela est possible. Cependant, il y a certainement des cas où vous devrez creuser dans le côté kext. En particulier, si le périphérique HID doit jouer le rôle de clavier ou de périphérique de pointage, mais qu'il n'est pas détecté comme vous le souhaitez par la pile HID intégrée, vous devrez peut-être (ou souhaitez) développer un noyau. pilote de l'espace. (Vous avez également la possibilité d'injecter des événements dans le système de fenêtrage à partir de l'espace utilisateur, donc je prototyperais votre cas d'utilisation avec ce premier, en cas de doute.)

Vous ne nous avez pas donné suffisamment de détails sur ce que vous essayez de faire, ou la nature de l'appareil pour vraiment dire avec certitude quelle approche pourrait être la meilleure.

Pour obtenir un exemple de code, consultez le code Open Source d'Apple. (IOHIDFamily, IOUSBFamily, etc.) La recherche sur le Web pour les classes avec lesquelles vous travaillez affichera également du code OSS tiers sur Github, etc.

Stack Overflow et les listes de diffusion pertinentes des développeurs Apple (Darwin-drivers , Darwin-kernel, ou Usb, en fonction de la question), et peut-être que les forums de développeurs (que je trouve difficiles à suivre/surveiller de manière cohérente) sont probablement les meilleures communautés pour ce genre de chose.

+0

Merci beaucoup pour la réponse détaillée à ma question.J'ai besoin d'interfacer des dispositifs de jeu dédiés qui incluent des souris, des claviers et des consoles de jeu. Les paramètres des périphériques (tels que DPI, vitesse du pointeur, couleur du rétroéclairage et luminosité, etc.) devront être modifiés. Je dois détecter quand l'appareil est connecté ou déconnecté. En outre, les touches des appareils peuvent avoir des actions personnalisées, qui peuvent être configurées à partir du système, par exemple, en cliquant sur un bouton, il faudra simuler une pression sur le clavier. – matt007

+0

Cela dépendra beaucoup de détails, mais vous devriez pouvoir en faire beaucoup en utilisant l'API HID de l'espace utilisateur documentée [ici] (https://developer.apple.com/library/content/documentation/DeviceDrivers/Conceptual/ HID/intro/intro.html #/apple_ref/doc/uid/TP40000970-CH202-SW1) et [ici] (https://developer.apple.com/reference/iokit/1659967-iohidmanager.h). Il y a aussi [un exemple de code potentiellement utile] (https://developer.apple.com/library/content/navigation/index.html#section=Topics&topic=Drivers%2C%20Kernel%2C%20%26amp%3b%20Hardware&filter= HID + Sample + Code). – pmdj

+0

En pratique, tout dépend de la structure de votre appareil. Vous devrez peut-être faire certaines choses via l'API Kit d'E/S USB de niveau inférieur (qui existe également dans l'espace utilisateur) en plus de l'API HID Manager. Je ne suis pas sûr des boutons de reprogrammation - pour cela, vous devrez peut-être passer au niveau du noyau après tout, en fonction des spécificités. Si vous étiez un client consultant, je vous recommande de réserver environ une semaine à l'exploration/prototypage des fonctionnalités pour lesquelles nous ne sommes pas sûrs à 100% des détails d'implémentation avant de décider exactement comment structurer le logiciel pilote global. – pmdj