Ganze Zeile von Serieller Schnittstelle lesen
-
Hallo,
Mit einem Thread warte ich auf Daten welche über die serielle Schnittstelle ein-trudeln.
newBytesReady = select(fd, &readfds, NULL, NULL, NULL); /* See if there was an error */ if (newBytesReady < 0) { perror("select failed"); break; } else if (newBytesReady == 0) std::cout << "TIMEOUT" << std::endl; else { /* We have input */ if (FD_ISSET(fd, &readfds)) { // Jetzt kommt nur ein Byte
Das funktioniert soweit auch ohne Problem.
Select reagiert aber bereits schon beim ersten Byte. Das heisst, wird auf der Schnittstelle eine längere Zeichkette empfangen, bekomme ich nur das erste Zeichen mit. Ich möchte aber mit fscanf Linie für Linie abarbeiten.
Wie kann ich select() dazu bringen, sich erst nach dem Empfang einer ganzen Linie "bla bla bal\n" zu melden.
Oder sollte ich dafür die read()-Methode im blockierenden Modus verwenden?
Danke für die Hilfe.
-
Die serielle Verbindung muss im
cannonical
anstelleraw mode
geöffnet werden. -> http://www.easysw.com/~mike/serial/serial.html#3_1_2Im Cannonical mode werden die Inputs zeilenweise (also nach \n oder \cr) bearbeitet. Select kehrt im cannonical mode zurück, sobald eine ganze Zeile im Buffer angekommen ist.
Die serielle Schnittstelle muss nach dem Öffnen entsprechend konfiguriert werden.
Mehr steht im POSIX Serial Programming Guide -> http://www.easysw.com/~mike/serial/