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 ByteDas 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
cannonicalanstelleraw modegeö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/