USB Daten abrufen
-
Ich habe mir jetzt gedacht dass ich die Packete die über USB reinkommen auseinandernnehmen und interpretieren werde. Dementsprechend natürlich zum senden neue schnüren werde. Dies ist wohl kaum über den normalen Treiber Möglich, wie mir scheint, des Wegen habe ich mir das DDK von Microsoft besorgt, wo sich ein Sample treiber drin befindet. Ich denke, denke dass ich hier einen isochronous-Treiber nehmen sollte um eine Echtzeit übertragung zu machen oder? Diesen Treiber müsste ich rein theoretisch nur Installieren und dann dann gewisse Parameter (Funktionen) die dieser bereit stellt zum lesen und schreiben verwendeten oder?
Oder kennt jemand eine andere Möglichkeit über einen schon vorhandenen Treiber auf die Daten zuzugreifen?
-
Ich schreib nochmal hier in der Hoffnung, dass mir nun einer Weiterhelfen kann.
Ich Habe nun folgende möglichkeit gefunden mich zu verbinden. Die Verbindungsmethode habe ich einfach über USB gemacht.
DeviceHandle =CreateFile("\\\\?\\USB#Vid_4348&Pid_5584#5&3bba5b&1&1#{28d78fad-5a12-11d1-ae5b-0000f803a8c2, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
Mit dieser Möglichkeit bekomme ich eine Verbindung zu meinem USB-Gerät. Es handelt sich hierbei um eine selbst gebastelte Platte mit 12 LED´s drauf. Diese sollen gesetzt werden oder der Status ausgelesen werden. (Es befinden sich weiterhin 9 Jumper auf der PLatte. Die LED´s stehen für die 8 Datenports eines LPT anschlusses und weiter Strobe, Init, Autofeed und select in.
Ich schafe es die 8 Datenbits anzusteuern, jedoch nichts weiter.
Was mir ebenso Probleme macht ist das auslesen Des statuses.
Ich benutze zum setzen die Funktion WriteFile:
WriteFile(DeviceHandle, // open file handle DataBuffer + dwBytesWritten, // start of data to write dwBytesToWrite - dwBytesWritten, // number of bytes to write &dwBytesWritten, // number of bytes that were written NULL); // no overlapped structure } }
und zum Lesen die Funktion, bekomme aber absolut keine daten. Das OS scheint aauf Daten zu warten, bekommt jedoch nichts, da das Programm sich dann nichtmal beenden lässt. Gibt es irgendeine Möglichkeit anders den Status auszulesen? Eben gerade ob LED´s leuchten oder nicht?
ReadFile(DeviceHandle, ReadBuffer, BUFFER_SIZE-1, &dwBytesRead, NULL) ;
Bitte schreibt irgendwas, was mcih weiter bringen könnte. jeder Einfall wird mich sicherlich weiter bringen.
-
Um die Daten von deiner sleber gebauten Platte zu lesen muß diese sie erst einmal selbständig an den PC senden. Also quasi den Status alle 30 s übertragen. Danach kannst du diese auch mit Readfile lesen (Achtung Readfile wartet bis so viele Daten da sind wie du lesen willst, da hilft vielleicht overlapped io)
Aber normalerweise müßtest du auch einfach den LPT Port öffnen können und den ganz normal wie einen LPT Port benutzen können.
MfG
-
Das mit dem LPT hab ich ne ganze weile versucht und nicht hinbekommen. Du meintest doch dass ich LPT1 auf USb mappen sollte und dann den LPT1 ansprechen kann? Denn einen pysischen LPT habe ich an diesem Laptop nicht. Nur einen USB zu Parallelumwandler. Ich werde mit Overlapped io mal anschauen.
Wie bekomm ich es denn hin, dass meine Platte von selbst die Daten an den PC sendet?
-
Wie hast du deine Platte den angeschlossen.
Ich verstehe das jetzt so du hast einen USB auf Parallel Wandler an dessen Parallel Port deine Platte angeklemmt ist. Oder hatst du dir eine eigen Platte gemacht die einen echten USB Anschluß hat.
Im ersten Fall hat der USB auf parallel Wandler sicherlich einen Treiber für Windows was dann heißt der Port erscheint ganz normal in der Geräteliste als LPT Port. Wenn das so ist kannst die diesen so benutzen als wäre es ein echter Paraller Port (Ich glaub da gab es so eine IO.dll unter windows um auf parallele Prots zuzugreifen)
Falls du einen echten USB Anschluß auf deiner Plate hast mußt du in das Datenblatt deine USB Bausteins schauen um herauszufinden wie die Daten übertragen werden.
MfG
-
Da hast du richtig verstanden. An meiner Platte befindet sich ein Parallelport. Leider gibt es keinen Direkten Treiber für meinen Wandler. Es wird automatisch der Standard Traiber von Microsoft genommen. Nämlich der DruckerTreiber. In meinem Gerätemanager bekomm ich deswegen auch nur "USB-Druckerunterstützung" angezeigt. Leider sind auf der CD die dabei war nur traiber für Win95/98 und ME mit bei. Kein einziger Treiber jedoch für irgendein NT-OS. Ich habe mich lange zeit auf die suche eines geeigneten Traibers gemacht, sodass ich einen "virtuellen" LPT bekomme. No Chance. Nach 1,5 Wochen Suche (Täglich ca 8 stunden) habe ich dann beschlossen Das ganze wie ein stinknormales USb gerät zu behandelt und die packets die ich sende und empfange halt sementsprechend zu modifizieren. Stellt sich aber leider Schwieriger heraus als gedacht.
Bei meinem Kabel handelt es sich um folgendes:
http://www.delock.de/produkte/gruppen/USB+Adapter/USB_11_Parallel_Adapter_61330.html
-
Der geringste Aufwand wäre denk ich einfach einen Anderen USB Parallel Adapter zu kaufen wo du die Treiber bekommst.
Sonst mußt du dir die Spezifikation der USB-Druckertreiber Schnittstelle besorgen und schauen wie es funktioniert.
MfG
-
Wenns nach mir ginge hätte ich auch schon was anderes besorgt....
Leider bekomm ich hier im Praktium nur diese Teil. Was ordentliches werde ich mir allerdings für zu hause mal bestellen, denn mit dem Thema wollte ich mich weiter beschäftigen.Wüsstest du denn wo ich die USB-Druckertreiber Schnittstellen Spezifikationen bekommen kann? Auch hiernach habe ich schon gesucht wie ein Irrer.
Kann ich da etwas übers Sniffen herausbekommen? Leider kann ich recht wenig mit den daten anfangen. z.B. fordert Das Programm SnoopyPro anscheind den Descriptor an und bekommt auch Promt Info von dem Gerät. Nun wüsste ich gern, wie ich selber Traiberspezifische Methoden aufrufen kann. Ist sowas irgendwie herauszubekommen?
-
Hi DaSashStYle,
hast Du wirklich 1,5 Wochen lang bei täglich 8 Stunden im Internet gesucht?
Ehrlich gesagt, dann würde ich mich nicht wundern, daß Du bei Deinem Praktikum glatt durchfallen wirst ...DaSashStYle schrieb:
Bei meinem Kabel handelt es sich um folgendes:
http://www.delock.de/produkte/gruppen/USB+Adapter/USB_11_Parallel_Adapter_61330.htmlAuf der Webseite von Deinem Link ist ganz klar zu lesen: "Für Windows 98SE/ME/2000/XP/Vista"
Und Google (Suchbegriffe "DeLock" und "61330") liefert mir den folgenden Link: http://www.edriverdownload.com/delock-61330-driver.html
Keine 5 Minuten hats bei mir gedauert... wobei das Schreiben meines Postings am meisten gedauert hat
Nix für ungut,
Martin
-
-
Bevor man nicht im Thema drin hängt sollte man vielleicht weniger groß rum pupen. Ob ich im Praktikum aufgrund 1,5 wochen suche Durchfalle oder nicht lass mal meine sache sein.
1. Der Link den du geschrieben hast ist absoluter mist! Versuch du da mal den Treiber herunterzuladen! Wenn du was kriegen solltest wird es vielelciht der standard Microfttreiber OHNE jegliche Dokumentation sein! Noch dazu gibt es für den im Kabel verwendeten Chip keine Spezifikation! Siehe in meinem Link oben.
Warum bieten die wohl keinen Treiber+Spezifikation an? Richtig! Weil hier Microsoft zur Rate gezogen wurde. (Im Übrigen, einen aufregenden Schriftwechsel mit dem Hersteller habe ich bereits hinter mir!).Das was man auf deinem link downloaden kann ist ein tool namens DriverScan. Nettes Teil allerdings nicht der Treiber! Gibt ne Menge von solchen, jedoch völlig unbrauchbar in meinem Fall, denn die greifen grundsätzlich auf die Microsoft Datenbank zu und Dokus gibts auch keine.
Schau dir deinen link nochmal genau an dann wirst du sehen wovon ich spreche.
2. Ich habe einen Treiber. Klar, dank Microsoft ist es möglich auch zu drucken. Schön oder? usbprint.sys stellt hierzu die möglichkeit! schön, ich schaff es auch hierrüber 8 Datenbits zu senden. Auch fein! Jedoch ist dieser Treiber nur dazu ausgelegt Daten zu senden. Weniger fein! Um nun weiter arbeiten zu können, benötigst du wenigstens irgend eine Dokumentation über die Spezifikationen des verbauten Chips deiner Hardware. Nice, dass ich ihn für ein anderes Kabel finde (ähnlich wie dieses, jedoch neuer) Allerdings ncht für dieses welches ich zur verfügung habe.
Ohne Doku kannste sowas vergessen. Wenn du ein wenig mehr dein köpfchen eingeschaltet hättest, wärst du da auch allein drauf gekommen.Ach was reg ich mich eigentlich auf? Solche Lejute wie du sind es, die das Klima in Foren durch aroganz (die absolut unberechtigt ist) absolut runterziehen. Kannst ja mal drüber nachdenken. Ein Meister ist noch nie vom Himmel gefallen und ich glaube auch kaum, dass du auch nur annähernd einer bist, denn dann wäre die Aussage ein wenig Qualifizierter ausgefallen.
-
@kpeter Die Schaltung der gebastelten Leiterplatte?
-
Ja
-
Ich wünschte ich könnte.... Leider ist mein Praktiums-Betreuer, der das Teil zusammen gelötet hat krank bis Donnerstag. Ich werde aber mal schauen, was ich anhand der Drähte zusammen bekommen kann! Ist recht strukturiert zusammen gelötet.
-
kan man hier auch Bilder hochladen? oder muss ich das extern machen?
-
Ich hoffe es ist übersichtlich genug!
Nochmal zur erklärung:
Die Größe der Widerstände kann ich natürlich berechnen, wenn benötigt. Das was ich da auffgezeichnet habe ist quasi die unterseite der Platte. Sprich wie die einzelnen Bauteile verbunden sind. Ich habe zum Parallelport einige direkt verbunden, andere nicht direkt. Die die nicht direkt verbunden sind gehen hoch auf die Oberfläche und sind hier mit dem Parallelport angeschlossen.Der Parallelport ist so angebracht, dass wenn die Platte richtig herum liegt die 13 pins oben sind und unten die 12 Pins. Wie es ausschaut, ist auch dementsprechend alles so angeschlossen.
Ich hoffe dass es einigermaßen überschaubar ist.
-
Hi,
also meines Wissens geht das nicht mit Grafiken ins Forum laden.
Wenn du eine Webpage hast, stell das dort rein.mfg
Edit: upload erledigt
-
ich werds nachher nochmal auf meine eigene Webpage hochladen. Hab nur hier den Zugang nicht. Mach mich nun aber auf den weg Nach hause. Bin gegen 14:30 wieder anwesend.
-
Hi,
hier noch ein Link zur selben Problematik:
http://www-user.tu-chemnitz.de/~heha/bastelecke/Rund%20um%20den%20PC/USB2LPT/lpt2usb.htm
mfg
Peter
-
Wenn du den Microsoft Treiber installierst dann wird das Gerät auch nicht als normaler LPT Port im Gerätemanager angezeigt?
Zu deinem Problem mit dem Lesen und schreiben der Schnittstelle. Also schreiben ist ja klar geht wenn du die Schnittstelle via USB öffnest. Lesen geht nicht, was daran liegt das du nur den Windows Puffer der USB Schnittstelle liest und dort sind keine Daten vorhanden da das Gerät (Wandler) nichts an den PC gesendet hat. Das lesen ist bestimmt über eine spezielle USB Funktion (best. Daten an Wandler gesendet er antwortet darauf) implementiert. Diese Funktion kannst du bestimmt in den USB Geräteklassen finden (z.B.: HID,COMM usw. mußt halt die richtige finden). Jetzt ist die lesende Funktion aber bestimmt auch von Microsoft gekapselt worden um Kompatibilität zu schaffen, das heißt du kannst den LPT-USB Port bestimmt wie einen ganz normalen LPT Port behandeln und Daten z.B.: mit den Funktionen der IO.Dll (Mußt du mal in der MSDN nachkucken gibt bestimmt auch noch andere Varianten) empfangen und senden.
MfG