www.mikrocontroller.net

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


Autor: Gast G. (john_wayne)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mano (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es mit HID nicht möglich?

Autor: AkkiSan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ohforf Sake (ohforf)
Datum:

Bewertung
0 lesenswert
nicht 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?IdcServic...

Autor: Vorname Nachname (tys)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast G. schrieb:
> ich soll
...
> Ich bin ein ziemlicher Neuling

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

Autor: Ohforf Sake (ohforf)
Datum:

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

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

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und was kommt dabei raus? "geht, also passt".
katastrophe...

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast G. (john_wayne)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mano (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Zwölf Mal Acht (hacky)
Datum:

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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast G. (john_wayne)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Was ist ein "Vendor HID Device"?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.