COM1 auslesen.
-
Hallo ich bin ein totaller Anfänger, was WinAPI angeht, komme abe nicht drum rum.
Ich möchte gerne die COM1 Schnitstelle auslesen, bzw die Daten die an diese gesendet werden mit printf ausgeben. Hab schon was im Inet drüber gefunden:HANDLE handle; DCB dcb; char buffer[1000] = "abcdefghijklmnopqrstuvwxyz123456789"; DWORD dwLen; handle = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); dcb.BaudRate = 19200; dcb.fParity = TRUE; dcb.ByteSize = 8; dcb.Parity = ODDPARITY; dcb.StopBits = ONESTOPBIT; while (1) { printf("----------------------------------------"); ReadFile(handle, buffer, 100, &dwLen, 0); } CloseHandle(handle);Ich verstehe aber die Zeile ReadFile(handle, buffer, 100, &dwLen, 0);
nicht. Wie soll ich das nun in der Console ausgeben? Außerdem wird bei mir die linie einmal ausgegeben und danach passiert nichts
Kann mir jemand evtl. helfen.
Danke.
-
ReadFile schreibt die empfangenen Bytes nach buffer. Dabei liest es maximal 100 Bytes (der 3. Parameter) und schreibt die Anzahl der tatsächlich empfangenen Bytes nach dwLen.
Wenn du also die Daten auf der Konsole sehen willst, musst du buffer nullterminieren (falls die Daten es nicht schon sind) und z.B. mit printf(buffer) ausgeben.
Wieso initialisierst du die Struktur dcb, benutzt sie aber nie? Fehlt da vielleicht ein SetCommState?
Außerdem muss dcb.fBinary TRUE sein (verlangt Windows so).
-
Also habs jetzt soweit. ERrhalt aber immernoch keine Ausgabe. Es ist noch kein Gerät an COm1 angeschlossen, kanns daran liegen?
static HANDLE handle; DCB dcb; char buffer[1000] = "abcdefghijklmnopqrstuvwxyz123456789"; DWORD dwLen; handle = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (handle == INVALID_HANDLE_VALUE) { printf("CreateFile() Fehlgeschlagen\n"); return 1; } ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); dcb.BaudRate = 19200; dcb.fParity = TRUE; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.fBinary = TRUE; dcb.wReserved = 0; if (!SetCommState(handle, &dcb)) { printf("SetCommState() Fehlgeschlagen\n"); return 1; } while (1) { ReadFile(handle, buffer, 100, &dwLen, 0); printf("Ausgabe: %s \n", &buffer); } CloseHandle(handle);
-
sadi schrieb:
Also habs jetzt soweit. ERrhalt aber immernoch keine Ausgabe. Es ist noch kein Gerät an COm1 angeschlossen, kanns daran liegen?
Ja.

Was für eine Ausgabe erwartest du denn, wenn kein Gerät angeschlossen ist, das irgendwas sendet?edit: while(1) ist arg suboptimal, weil du nie CloseHandle aufrufst.
edit2: Ich meine, printf erwartet bei %s einen char* und keinen char**. Lass das & vor buffer weg. Außerdem habe ich oben geschrieben, dass der Puffer für printf nullterminiert sein muss. Wenn du nicht garantieren kannst, dass die Daten es sind, musst du das manuell machen.