www.mikrocontroller.net

Forum: PC-Programmierung USB Programmierung


Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Microcontroller,

habe von USB - Programmierung eigentlich relativ (wobei relativ noch 
übertrieben ist) wenig Ahnung. Möchte jetzt in meiner Software die 
Kommunikation mit einem USB Barcodescanner einbauen.

Ich entwickle unter .NET und habe mir jetzt die SharpLibUSB besorgt. Ist 
eine Wrapper-Klasse für die LibUSB Win32.

Es funktioniert auch eigentlich alles soweit so gut.

Was ich jetzt aber nicht ganz verstehe, ist wie ich mit dem Gerät 
kommunizieren soll.

Ich kann über die Methode, soweit ich das verstehe, BulkRead(int 
Endpoint, byte[] bytes) vom Gerät lesen.
Ich nehm einmal an, dass der Endpoint entweder der Entpoint ist, von dem 
oder bis zu dem gelesen werden soll.

ABER: Jetzt kommt die große Frage, woher weiß ich, was ich hier für 
Werte eintragen soll. Suche verzweifelt nach Dokumentationen. Oder gibt 
es da eine andere Möglichkeit zu wissen, welcher Endpoint was ist?

Vielen Dank für Eure Hilfe

Paulchen29

Autor: Ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du schonmal bei Sprut gelesen?

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Danke für Deine Antwort. Ich denke Du meinst www.sprut.de.

Da war ich gerade, finde aber nur Dokumentationen zu PIC's.

Oder meinst Du eine andere Seite!

Danke Paulchen29

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay - sorry tut mir leid! Habe jetzt nochmal rumgestöbert und bin auf 
Spruts doch noch auf eine sehr schöne USB-Dokumentation gestoßen.

Danke schön!

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ohne zu wissen, was der BarcodeScanner im IN-EndPoint zu Verfügung 
stellt, und welche Kommandos du an den oder die OUT-Endpoints schicken 
musst, damit der arbeitet, kannst du eh nicht mit ihm kommunizieren. 
Oder hast du da eine Doku?

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian!

Wenn ich erstmal an die Daten rankomme wäre ich schon sehr zufrieden. 
Ich habe früher einen SerialPort Scanner gehabt und hoffe, dass die 
Datenstreams gleich sind.
Deswegen wollte ich erstmal die OUT-Endpoints (muss ja nur lesen) jetzt 
durchgehen und hoffen, dass ich etwas verwertbares finde.

Was ich aber noch fragen wollte: In der Doku von Spruts steht, dass 
jedes Interface ein oder mehrere Endpoints haben kann.

Kann es sein, dass im Endpoint 0 zufällig auch steht, wieviele Endpoints 
da sind.
Oder kann man das nur über den Hersteller erfahren.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Endpoint 0 ist quasi der Konfigurationsendpoint. Über ihn läuft die 
Enumeration, Konfiguration, etc. Das heisst, über ihn werden auch die 
Deskriptoren gesendet, anhand derer der Host das Gerät identifizieren 
kann. Nach einem Gerät sucht man für gewöhnlich über VID/PID oder den 
Bezeichnungsstring. Kennst du diese Angaben, sollte es kein Problem 
sein, eine Kommunikation aufzubauen.
Wie ist der Barcode-Scanner in der Systemsteuerung hinterlegt? Über 
einen virtuellen COM-Port oder als Eingabegerät(HID)?

Ralf

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Die Zahl der Endpoints findest du in den Descriptoren. Wenn du das 
Gerät öffnest, eine Konfiguration auswählst, ein Interface auswählst und 
das nimmst, dann kannst du dir die Anzahl und die Art der EPs anzeigen 
lassen. Macht die LibUSB alles für dich.

2. OUT und IN Bezieht sich auf PC-Sicht. Aus dem PC heraus an das Gerät 
ist OUT, was das Gerät bereit stellt, ist IN.

3. Du stellst dir das eventuell bissl einfach vor. Bei USB ist es immer 
ein Master-Slave Prinzip. In den allermeisten Fällen stellt das Device 
ohne Aufforderung überhaupt keine Daten in die IN Endpoints. Diese 
werden durch Kommandos erst mal angefordert. Mit viel Glück macht das 
dein Scanner anders, glaub ich aber eher nicht. Bei HID Geräten ist es 
etwas anderes, kommen die Daten meist so rausgepurzelt, weil sich der 
Windows Treiber da drum kümmert.

Autor: Mars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Anzahl, Typ, Richtung und Größe der Endpoints stehen im 
Interface-Deskriptor.
Mit USBView kannst du dir die Deskriptoren anzeigen lassen.

Grüße

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag/Erweiterung:
In den Deskriptoren steht u.a., wieviele IN/OUT Endpoints da sind.
Es gibt ein paar Sniffer-Tools (auch Freeware), die den Datenverkehr 
aufzeichnen können oder dir genauere Daten über angeschlossene Geräte 
liefern können. Guck mal bei USB.org

Ralf

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für Eure zahlreichen Antworten! Ihr habt mir schonmal sehr 
viel weiter geholfen!

@Christian: Ich denke man lebt im Jahre 2009 - im Zeitalter der 4GL 
Sprachen - wozu muss ich mich da noch um irgendwas kümmern! ;-)
Nein, Spass beiseide.
Das habe ich mich auch schon gefragt, aber ich hoffe darauf, dass wenn 
man mit dem Scanner scannt ein Endpoint mit Informationen gefüllt wird.
Oder stell ich mir das wirklich zu leicht vor?

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

dank der genialen Seite von Sprut und Eurer tollen Beiträge bin ich 
jetzt schon etwas mehr mit USB konform. Danke dafür.

Ich teste gerade mit meinem Handy, welches ich als Massenspeicher 
angeschlossen habe, da ich noch keinen BarCode Scanner zum testen 
bekommen habe.

Jetzt habe ich aber folgendes Problem. Ich kann das Handy über VendorID 
und ProductID identifizieren. Ich kann den Device öffnen.
Bloß wenn ich jetzt die Konfiguration setzten will schmiert er mir weg.

Ich programmiere mit der SharpUSBLib, welche ein Wrapper für die LibUSB 
Win32 ist.
In letzterer Dokumentation steht, dass wenn man die Konfiguration auf -1 
setzt, dann bleibt das Device im unkonfigurierten Status.

Das Problem ist bei dem Aufruf:

device.SetConfiguration(-1);

bekomme ich folgende Exception:

usb_set_configuration: could not set config -1: win error: Falscher 
Parameter.
while calling usb_set_configuration return code: -22

Leider verstehe ich es nicht so ganz und hoffe, dass mir jemand von Euch 
erklären kann, was ich falsch mache!

Vielen Dank im Voraus

Jürgen

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso -1? Die Konfigs fangen bei 0 an, dann kommt 1 usw...

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

stand halt so in der Dokumentation. Leider habe ich dafür zuwenig 
Ahnung.

Aber wenn ich 0 verwende geht es zwar, doch dann habe ich das nächste 
Problem, dass ich bei:

device.ClaimInterface(0); //auch bei >0

folgende Exception bekomme:

usb_claim_interface: could not claim interface 0, invalid configuration 
0 while calling usb_claim_interface return code: -22

Also jetzt behauptet er, dass ich eine falsche Configuration habe.

Deswegen dachte ich, dass ich vielleicht die Configuration auf -1 
setzte.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub nicht, dass du -1 setzen kannst. Wird eher nur lesbar sein, um 
dir den Zustand mitzuteilen. Bin aber nicht sicher...

Ralf

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wurde zwar hier schon mal angedeutet:
Beitrag "Re: USB Programmierung"

aber niemand ist drauf eingegangen wenn ich das richtig überflogen habe.

Normalerweise arbeitet ein Barcodescanner als HID. Er verhält sich 
genauso wie eine Tastatur. Also statt irgendwas einzutippen drückt man 
auf den scanner und der tippt einem den Klartext ein.

Ich denke ihr macht euch das Leben viel zu schwer.

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Willi,

so, jetzt hast Du mich total um den Verstand gebracht! ;-)

Darf ich mal fragen wohin er den Klartext "tippt"?

Falls es etwas unklar von mir beschrieben wurde: Ich will, dass der 
Scanner seinen "Inhalt" an mein Programm schickt.

Liebe Grüße und einen schönen Abend

Jürgen

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne nur Barcodescanner die sich als HID am PC anmelden.

Mach mal ne Textdatei auf und Scan einen Barcode. Normalerweise müsste 
der Klartext des Barcodescanners in die Datei geschrieben werden, 
genauso wie wenn du ihn über die Tastatur eingeben würdest.

In deinem Programm kannst du dann einfach den Barcode abfangen genauso 
wie du eine Eingabe der Tastatur abfängst.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Darf ich mal fragen wohin er den Klartext "tippt"?

Genau dorthin, wo auch Tastendrücke der Tastatur landen, unter Windows 
also im Fenster, das gerade den Eingabefocus hat.

Autor: Jürgen Maier (paulchen29)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah!

Muss ich mal probieren! Habe leider noch kein Testgerät - hört sich aber 
logisch an!

Danke schön

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.