LPT1 auslesen
-
Hallo !
Ich versuche zur Zeit ein Programm zu schreiben, welches Daten empfangen kann, welche von einem Gerät gesendet werden, das an den LPT1 angeschlossen ist. Hier erstmal mein Code...HANDLE t_Handle; char lpBuffer[ 8 ]; DWORD readBytes; t_Handle = CreateFile( "LPT1", GENERIC_READ, 0, NULL, OPEN_EXISTING, NULL, NULL ); if( t_Handle == INVALID_HANDLE_VALUE ) { printf( "Verbindung zu LPT1 konnte nicht hergestellt werden." ); } ReadFile( t_Handle, &lpBuffer, 8, &readBytes, NULL ); printf( "%s\n", lpBuffer );
Das Gerät, ein Analog Digital Wandler, ziemlich alt, schickt 8 Byte, welche ich mit der Funktion ReadFile versuche auszulesen. Jedoch bleibt mein Programm an dieser Stellen hängen, d.h. es entsteht keinerlei Fehlermeldung. Das Programm bricht auch nicht ab, es scheint einfach innerhalb dieser Funktion zu verharren.
Ich hoffe jemand kann mir helfen.
Danke schonmal
-
1. Versuch' mal rauszufinden, wo das Programm den genau "verharrt". Also z.B. einfach mal die ReadFile-Zeile auskommentieren, wenn's dann läuft, dann liegt der Fehler da.
2. Schau mal was GetLastError() liefert.
cya
-
Ja, es liegt an der Zeile ReadFile. Das hatte ich oben aber auch schon geschrieben.Ich habe auch weiter nach dem Fehler gesucht, ihn aber immernoch nicht gefunden.
-
Was liefert GetLastError()?
cya
-
GetLastError kann nichts liefern, da das Programm ja nicht mehr aus readFile rauskommt und ioch somit ja auch nicht auf Fehler prüfen kann. Die Verbindung wird jedoch korrekt aufgebaut bzw. entsteht dabei kein Fehler.
-
ReadFile( t_Handle, &lpBuffer, 8, &readBytes, NULL );
wieso &lpBuffer ? machs immer ohne den adressoperator ( lpBuffer ) und es geht einwandfrei.
nur so ne idee
-
Habe nun wieder den ganzen Tag dran gesessen und es geht trotzdem noch net
.
Vielleicht kann jemand der schonmal sowas gemacht ein bisschen Source posten ? Würde mich wirklich freuen.
-
Es wäre von Vorteil, wenn du erstmal auf die Ratschläge der anderen eingehen würdest!
-
Welche Ratschläge wären das aber ? Ein GetLastError bei dem ich nie ankomme weil das Programm in ReadFile hängenbleibt. Oder einfach lpBuffer schreiben, was ich unlängst gemacht habe. Also, bitte vorher erst das Hirn einschalten und dann posten denn so ist keinem geholfen.
-
Original erstellt von <_Stefan_>:
Oder einfach lpBuffer schreiben, was ich unlängst gemacht habe. Also, bitte vorher erst das Hirn einschalten und dann posten denn so ist keinem geholfen.Pech gehabt, mein Junge. Mit dir werde ich mich nicht mehr beschäftigen! Auf den Ratschlag mit dem 'lpBuffer' bist du nicht eingegangen. Das hättest du tun sollen! Sonst kann man denken, du hast das überlesen. Also gilt dein Statement von Hirn einschalten hier nur für dich! Wenn du Hilfe willst, dann verhalte dich auch entsprechend anstatt hier andere Leute anzupöbeln! ******!
-
Oder einfach lpBuffer schreiben, was ich unlängst gemacht habe.
@WebFritzi: Jaja, wir haben alle so unsere Problemchen. Geh zum Arzt wenn dus net mehr erträgst.Und hör auf zu nerven.
So, nun habe ich den ganzen Tag an dem Code gesessen :). Naja, er läuft zwar immernoch nicht aber ich kann jetzt an Com-Ports connecten. Wenigstens schonaml was gelernt. Das komische ist, dass am Com Port alles funktioniert. Hat keiner mehr ne Idee ?
-
Schade, dass es immer wieder solche Leute wie dich gibt, die auf einen gutgemeinten Rat eines Forenmitglieds derart beleidigend und krank reagieren müssen. Dir wird wohl keiner mehr helfen...
[EDIT]
Nebenbei hab ich jetzt mal unter google die Lösung deines Problems gefunden. Du solltest lernen zu Googlen, mein Freund!
[/EDIT][ Dieser Beitrag wurde am 18.04.2003 um 23:44 Uhr von WebFritzi editiert. ]
-
Original erstellt von <_Stefan_>:
Das komische ist, dass am Com Port alles funktioniert. Hat keiner mehr ne Idee ?Da fallen mir folgende Stichworte zu ein:
LPT - Bi-Direktional - BIOS
Fällt der Groschen?
[ Dieser Beitrag wurde am 19.04.2003 um 08:17 Uhr von Hepi editiert. ]
-
Ich will einfach nur wissen warum mein Code nicht funktioniert bzw. was ich daran ändern muss dass er funktioniert.Habe auch mehere Sachen im www gefunden, nach denen funktioniert das so, bloß, es geht nicht. Und nun möchte ich einfach wissen warum nicht.
-
Sag mal...
Ich gebe erneut Stichworte, diesmal etwas genauer...
Ist Dein LPT im BIOS auf BI-DIREKTIONAL eingestellt???
Mannomann....
-
Ja ist es. Aber was bringt mir das ?
-
OK, da ich mich etwas abgeregt hab, hier ein Tip: SetCommTimeouts().
-
Oki danke dir. Hab vielleicht auch etwas überreagiert. Begraben wir das Kriegsbeil. Ich versuchs mal.zhx
-
http://www.lvr.com/jansfaq.htm http://groups.google.de/groups?q=SetCommTimeouts+Parallel&hl=de&lr=&ie=UTF-8&oe=UTF-8&selm=36add24f.0%40d2o64.telia.com&rnum=3
-
Danke erstmal für die Links.Hier mein aktueller Code...
t_Handle = CreateFile( "\\\\.\\LPT1", READ_CONTROL | GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if( t_Handle == INVALID_HANDLE_VALUE ) { printf( "Verbindung zu LPT1 konnte nicht hergestellt werden." ); _getch(); exit( 1 ); } else { printf( "Verbindung zu LPT1 hergestellt.\n" ); } if( GetCommTimeouts( t_Handle, &t_CommTimeOuts ) == 0 ) { printf( "GetCommTimeouts fehlgeschlagen : %d\n", GetLastError() ); CloseHandle( t_Handle ); } t_CommTimeOuts.WriteTotalTimeoutMultiplier= 50; t_CommTimeOuts.WriteTotalTimeoutConstant= 2000; t_CommTimeOuts.ReadIntervalTimeout= 50; t_CommTimeOuts.ReadTotalTimeoutMultiplier= 50; t_CommTimeOuts.ReadTotalTimeoutConstant= 50; if( SetCommTimeouts( t_Handle, &t_CommTimeOuts ) == 0 ) { CloseHandle( t_Handle ); }
Leider funktioniert das ganze jetzt immernoch nicht. Das Programm liefert bei GetCommTimeouts immer den Wert 1 ( "Incorrect function" ) zurück und ich habe mal wieder keine Ahnung woran das liegen könnte. Momentan habe ich aber auch nur meinen Drucker an dem Port, kann es daran liegen ?
Wieso steht eigentlich nichts von alledem ( CommTimeouts etc. ) in den FAQ ?