Unix: Wie lösche ich den E / A-Puffer der seriellen Schnittstelle?
Ich arbeite an einer "High Level" C ++ - Schnittstelle für die serielle Standard-PC-Schnittstelle. Wenn ich den Port öffne, möchte ich die Eingabe- und Ausgabepuffer löschen, um keine Daten aus der vorherigen Verwendung des Ports zu empfangen oder zu senden. Dazu benutze ich die tcflush-Funktion. Es funktioniert jedoch nicht. Wie kann das sein? Mein "Port Opening" Code ist unten zu sehen. Ja, ich verwende C ++ - Ausnahmen, aber keine werden geworfen. Dies zeigt an, dass tcflush 0 zurückgibt, aber den Puffer nicht löscht.
Die einzige Möglichkeit, den Eingabepuffer zu löschen, besteht darin, Bytes daraus zu lesen, bis keine mehr vorhanden sind. Dies dauert normalerweise ein paar Sekunden und ich halte es nicht für eine Lösung.
Danke im Voraus :-)
fd = ::open(port.c_str(), O_RDWR | O_NOCTTY);
if (fd < 0)
{
throw OpenPortException(port);
return;
}
// Get options
tcgetattr(fd, &options);
// Set default baud rate 9600, 1 stop bit, 8 bit data length, no parity
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
// Default timeout (1000 ms)
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
// Additional options
options.c_cflag |= (CLOCAL | CREAD);
this->port = port;
// Apply the settings now
if (tcsetattr(fd, TCSANOW, &options) != 0)
{
throw PortSettingsException();
}
// Flush the port
if (tcflush(fd, TCIOFLUSH) != 0)
{
throw IOException();
}