c - Skrivning af en Windows-driver til Pro Micro

Indlæg af Hanne Mølgaard Plasc

Problem



For det første har jeg meget meget lidt erfaring med, hvordan USB-funktioner endsige skriver en driver; i det væsentlige forsøger at gøre dette projekt til en læringserfaring.


Min opsætning består af SparkFun Pro Micro board og en Windows-maskine. Jeg har et potentiometer ledet op til Pro Micro og mit mål er at sende potentiometerets værdi til værtsmaskinen og bruge værdien til at ændre ting som systemvolumen mv. ...


Arduino biblioteket kom med et serielt bibliotek, og jeg kan sende ting over USB ved hjælp af det. Jeg har i øjeblikket et Arduino-program, der sender 1 byte hvert 1. sekund, og et C-program på Windows-maskinen, der 'forbinder' med COM-porten og læser byten kommer igennem (denne del har jeg det fint). [2]]]


Problemet er, at når Pro Micro er tilsluttet computeren, vises den på en tilfældigt valgt COM-port, og jeg tror ikke, du kan se, hvilke COM-porte, der holder den pågældende enhed (ikke sikker på denne bit).


Mit slutmål er, når Pro Micro er forbundet til pc'en, skal værtsprogrammet automatisk genkende Pro Micro og begynde at behandle de data, der kommer fra den. Hvis jeg opsætter det som en HID-enhed og gør den til enheden i Enhedshåndtering som min egen brugerdefinerede enhed, er det noget, jeg vil være interesseret i, især for læringserfaringen, men jeg føler, at det kan overbelaste ting.


Kan nogen pege på mig i den rigtige retning hvad jeg skal gøre/se på?

Bedste reference


måske brug Windows-interne værktøjer som COM-portdatabasen (https://msdn.microsoft.com/en-us/library/ff546481.aspx) eller tilordne COM-porte bruger Windows-registreringsdatabasen , se [3]



  • Hvordan folder Windows den virtuelle com-port til en enhed

  • https://superuser.com/questions/851192/change-com-port-number-programmatically [5]

  • http://www.ftdichip.com/Support/Documents/AppNotes/AN\_132\_Re-Aigning\_COM\_Port\_Numbers\_Using\_Registry.pdf



hvis du vil vide baggrunde: arduino implementerer USB CDC ACM-klassen (Communication Device Class - Abstract Control Model https://en.wikipedia.org/wiki/USB\_communications\_device\_class) og emulerer en COM-port. Windows genkender denne klasse og indlæser den passende driver, som er usbser.sys (https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976\%28v=vs.85\%29.aspx), når føreren er indlæst den nye (virtuelle) COM-port er tilgængelig [6] [7] [8]


de bedste kilder er hvordan kan windows kortlægge den virtuelle com-port til en enhed, https://superuser.com/questions/851192/change-com-port-number-programmatically og http://www.ftdichip.com/Support/Dokumenter/AppNotes/AN\_132\_Re-Assigning\_COM\_Port\_Numbers\_Using\_Registry.pdf [10] [11]

Andre referencer 1


Jeg vil foreslå at bruge libusbp, et C-bibliotek, der kan bruges til at finde navnet på en COM-port, givet USB-leverandør-id og produkt-id. Der er endda et eksempel i 'eksempler' mappen, der gør det bare:


https://github.com/pololu/libusbp[12]