Forum: PC-Programmierung Treiber für USB Gerät


von Gast G. (john_wayne)


Lesenswert?

Hallo Leute,

ich soll ein Gerät zur Maussteuerung entwickeln, welches X-Y-Koordinaten 
ausgibt. Zur Zeit wird es mit einem FTDI Chip als COM-Port angesprochen.

Nun soll ein eigener Treiber geschrieben werden, damit das Gerät von WIN 
als Maus erkannt wird und die Koordinaten in Mausbewegung umsetzt 
werden.

Kann mir jemand ein paar Tips geben wie ich am besten vorgehen soll?
Mit welcher Programmiersprache schreibe ich sowas und was brauche ich 
sonst so? Wie aufwendig ist sowas und gibt es ein gutes Buch auf Deutsch 
dazu?

Ich bin ein ziemlicher Neuling auf dem Gebiet, so bin ich für jede Hilfe 
dankbar.

Danke schon mal im Vorraus!

von Mano (Gast)


Lesenswert?

Ist es mit HID nicht möglich?

von AkkiSan (Gast)


Lesenswert?

Gast G. schrieb:
> Kann mir jemand ein paar Tips geben wie ich am besten vorgehen soll?

Für diese Aufgabe ist ein FTDI der denkbar schlechteste Chip
(und abgesehen davon auch noch schweineteuer).
"Im" FTDI gehts sowieso nicht, bDeviceClass ist immer 0 und kann auch
nicht geändert werden.

Das Programmieren eines "Zwischenteil-Treibers" ist ein nicht
unerheblicher Aufwand. Ist Windoof im Spiel, das nehme ich jetzt
einfach mal an, wirst Du ebenso mit jeder neuen Windoof Version einen
neuen Treiber zur Verfügung stellen müssen.
Irgendwann wirst Du dann zudem feststellen, daß es Kombinationen
von Chipsätzen/Software/etc... gibt, auf denen das zum verrecken
nicht laufen will. Da ist langfristiges Herumbasteln, im wahrsten
Sinne des Wortes, vorprogrammiert.

Vom ganzen Spaß mit der Zertifizierung, falls notwendig (Win7), mal
ganz abgesehen.

Einzige, aber nicht günstige, Ausnahme:
Treiberpakete, wie z.B. von Thesycon, verwenden.

Gast G. schrieb:
> Ich bin ein ziemlicher Neuling auf dem Gebiet

Laß es bloß sein ;-)
Das wird nur Ärger geben...


Nimm Abstand vom FTDI und setze irgendeine kleine MCU ein
(Cypress, ...).
Das spart Hardware und Software Entwicklungs-/Wartungs-Kosten.
Softwareaufwand für Treiber gleich Null.

von Ohforf S. (ohforf)


Lesenswert?

Such mal bei Microchip nach den USB Beispielen (Application Library).
Da ist "USB Device - HID - Mouse" drin.
HID Maus geht normalerweise ohne Treiber, also einfacher gehts nicht.
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784

von Vorname N. (tys)


Lesenswert?

So der Treiber nicht des Schreibens wegen geschrieben werden soll, ginge 
es auch mit V-USB, auf http://www.obdev.at/products/vusb/projects.html 
gibt's n paar Beispiele. Analog zum Vorpost, nur auf AVRs.

von Michael M. (Gast)


Lesenswert?

Gast G. schrieb:
> ich soll
...
> Ich bin ein ziemlicher Neuling

DIE studentenkombination der neuzeit...
warum kann eigentlich keiner mehr das, was er macht?

von Ohforf S. (ohforf)


Lesenswert?

Michael M. schrieb:
> warum kann eigentlich keiner mehr das, was er macht?

Naja, "learning by doing", oder ?  :)

von Michael M. (Gast)


Lesenswert?

und was kommt dabei raus? "geht, also passt".
katastrophe...

von Michi (Gast)


Lesenswert?

@ Michael M.

naja jeder muss ja schließlich mal anfangen.

Und wenn er "passt schon"-Entwicklungen weiterführt, wird er im Studium 
(daher vermutlich das "soll") Probleme bekommen, aber das soll hier ja 
schließlich nicht unser Problem sein.

Er hat ne Frage gestellt und sogar gefragt WIE er das machen kann usw.
Normalerweise frägt jemand, dem alles egal ist nach nem fertigen Code.

Also einfach bitte nur helfen -.-

Mein Vorschlag wäre auch HID über nen AVR mit V-USB.

von Michael H. (morph1)


Lesenswert?

Michael M. schrieb:
> warum kann eigentlich keiner mehr das, was er macht?

Eventuell liegt das auch nur an deiner etwas eingeschränkten Sicht?

Das hier ist ein Forum, jeder der es bereits weiß wird wohl kaum danach 
fragen müssen.

Also sparen wir uns HIER mal diese Seitenhiebe.

von Gast G. (john_wayne)


Lesenswert?

Hallo nochmal,
habe ich das richtig verstanden, dass wenn ich ein uC mit integriertem 
USB nehme, z.B den PIC24FMCU und den als HID-Divice configuriere, dass 
er dann automatisch als Maus erkannt wird?
Bis jetzt berechne ich die X-Y-Koordinaten im Controller, die müssten 
dann ja auch noch nach dem entsprechenden Prtokol "verpackt" werden - 
oder?

von Ralf (Gast)


Lesenswert?

> ...und den als HID-Divice configuriere, dass er dann automatisch als Maus
> erkannt wird?
> Bis jetzt berechne ich die X-Y-Koordinaten im Controller, die müssten
> dann ja auch noch nach dem entsprechenden Prtokol "verpackt" werden -
> oder?
Ersetze "konfigure" durch "programmiere", dann klappts -> das ist 
nämlich genau das, was du richtig erkannt hast bzgl. der Protokollsache:
X/Y-Daten berechnen/Maustasten auswerten -> HID-Protokoll (HID-Maus)

Also ist Datenberechnung/Tastenabfrage ein Teil, und das HID-Protokoll 
der andere Teil.

Ralf

von Mano (Gast)


Lesenswert?

Du ersparst dir unter Umständen viel Arbeit wenn Dein Eingabegerät von 
Haus aus als HID erkannt wird.

Weil Du immer von X-Y Koordinaten redest, mach dich mal schlau was HID 
überhaupt ist. Eine Maus liefert z.B. keine absoluten Koordinaten. Dies 
kann Probleme bereiten wenn Du nur ein begrenztes Bewegungsfeld zur 
Verfügung hast (vrgl. Maus-Modes vom Bamboo-Tablet).

von Purzel H. (hacky)


Lesenswert?

Es gibt eine Haufen Buecher von Jan Axelson zum Thema "ich und USB", die 
sollt man sich schon reinziehen.

von Thomas (Gast)


Lesenswert?

HID kann auch für Joysticks verwendet werden. Dann hat man XY
Koordinaten. Allerdings per default nur in 8 Bit Auflösung.
Mit entsprechenden Descriptoren sind aber auch 16 Bit Werte
möglich. Problem ist dann halt auf Win Seite dass man andere
APIs braucht um an die Daten zu kommen.

Als 3. Möglichkeit wäre ein Vendor HID Device zu nennen.
Dann kann man die Daten formatieren wie man will.
Zum Auslesen wird dann die HID API verwendet. In allen Fällen
wird nter Win der gen. HID Treiber benutzt. Man muss also keinen
eigenen Treiber schreiben.

Winusb wäre auch noch eine Alternative (ab XP)
http://www.lvr.com/winusb.htm
Dann kann man auf der Device Seite machen was man will Das ist
allerdings nichts für Anfänger.

Thomas

von Gast G. (john_wayne)


Lesenswert?

@Thomas
Was ist ein "Vendor HID Device"?

von Thomas (Gast)


Lesenswert?

Vendor HID bedeutet dass deine Deskriptoren nicht als std Device
erkannt werden. (keine Tastatur, Maus Joystick oder ähnliches)
In der Konzequenz heist das im Gerädemanager tauscht nur ein
HID Device auf. Ein HID Joystick würde beispielsweise unter Game
Controller erscheinnen.

Programmtechnisch bedeutet das, dass dei HID.DLL beziehungsweise die
HID API für die Kommunikation benutzt wird.

Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.