USB Daten abrufen
-
Hallo,
ich komme einfach nicht weiter, oder besser, nicht richtig rein. Ich hoffe hier kann mir jemand helfen.
Ich habe bereits zwei Tage gegoogled und eine Menge gelesen. Unter anderem in vielen Foren. Leider kamen dort auf fragen entweder unfreundliche antworten die unbrauchbar sind oder die Fragenden wurden verdammt unverschämt (was meistens der fall war)
Im Rahmen meines Praktikums bekam ich die Aufgabe ein kleines Programm, möglichst in C++ zu schreiben, welches einem anderen Programmierer oder anwender lediglich die Funktionen XXXXXXXXXXXXXX getParallel(), undd setParallel(XXXXXXXXXXXX) liefern soll. Die X´s stehen für eine Bitkombination. Angewendet werden soll das programm auf den USB Port, in den ein Kabel USB2LPT gesteckt wird.
Die Funktionen sollen bewirken, dass man hum einen den anliegenden Wert auslesen oder eben ändern kann.Ich arbeite unter WindowsXP, was das ganze wohl nocch komplizierter macht, wenn ich alles was icch bis jetzt gelesen habe richtig verstehe.
Ich werde im folgenden nun erstmal meine bissherigen Überlegungen schreiben:
- das angeschlossene Gerät sendet parallele Daten, welche jedoch in Serielle umgewandelt werden. Soweit ich weiß arbeitet USB mit Paketen oder? D.h. ich müsste irgendwie die Daten empfangen können.
- mir ist klar, dass ich dazu einen Treiber brauche. Doch welche? Muss ich einen selber schreiben? Oder kann ich den standard treiber von Windows benutzen? Wie kann ich dann eine Verbindung aufbauen zu USB um die Daten zu empfangen?Ich habe bereits Programmierkenntnisse in C++. d.h. das Verständnis sollte grundlegend da sein. Allerdings steh ich im Moment absolut auf dem Schlauch, wiee ich anfangen soll, was notwendig ist etc.
Ich habe noch ein paar andere vorüberlegungen aufgeschrieben, die jedoch nur etwas mit späterer verarbeitung ´der daten zu tun haben. Ich brauche nun eben die Schnittstelle zwischen Programm und USB/LPT, wie auch immer
Vielleicht kann mir jemand helfen. Wenn noch irgendwelche Informationen benötigt werden, ich werde alles raussrücken, hoffe aber ich habe schon alles notwendigee hier gepostet.
Danke schonmal im Vorraus.
-
Du brauchst einen Treiber für den USB-LPT-Adapter, der eigentlich beiliegen sollte. Dieser wird einen zusätzlichen LPT bereitstellen. Auf den LPT kannst du z.B. mit inpout32.dll (-> google) zugreifen.
-
Im Forum gibt es eine FAQ Seite, darunter etwas unter Schnittstellen. Vielleicht hilft das weiter.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39169.html
-
Also wenn ich das nun richtig verstehe, muss ich einen zusätzlichen treiber installieren ? Es ist ine treiber cd dabei, hier ist der Treiber jedoch nicht für Micrsosoft Xp mit drauf. nichts desto trotz hat Xp den Drucker den ich vorerst über das Kabel angeschlossen habe erkannt. Dieser wird bei mir jedoch als USB-Drucker angezeigt.
klingt oben jedoch danach, dass ich zuerst einen treiber installieren muss, der mir quassi die verbindung mit hilfe eines Virtuellen LPT Ports zur verfügung stellen soll. Auf diesen LPT Port kann ich dann mit hilfe der inpout-DLL zugreifen und meine schnittstelle einfach behandeln wie eine normele LPT oder?
Leider konnte ich keinen Treiber installieren für diesen parallel serial wandler. Ich habe zwar im Net gesucht, jedoch nichts geeignetes gefunden. oder ist es egal welchen ich nehme? Meist waren es dann druckerspezifische treiber.
-
ich habe das ganze nun einmal mit dem Drucker weiter geführt. Ich habe nun den ersten Drucker freigegeben und einen zweiten Installiert. Diesen Jedoch auf den anschluss LPT3 gesetzt und nachher dies auf den USB Drucker gebridged. Es funktioniert, ich kann nun über diesen Drucker drucken, da er umgeleitet wird. Kann ich dies auch für mein Programm machen? Dann ich generell einen virtuellen LPT erstetelle auf den ich dann zugreife? wenn ja, wie? Leider habe ich weiterhin dieses blöde treiber Problem. Es funktioniert, jedoch habe ich keinen geeigneten Treiber für den LPT->USB wandler.
-
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?