c++ - xoff - rts y dtr
¿Cómo esperar de manera eficiente a CTS o DSR de RS232 en Linux? (2)
La llamada al sistema de selección está pensada para aplicaciones como esa. Puede hacer otro trabajo, o dormir, luego verificar periódicamente el estado de FD_SET. Incluso podría ser excesivo para lo que está haciendo, si su programa no hace más que captar datos.
Actualmente, estoy leyendo las señales CTS y DSR de un puerto serie de la siguiente manera:
bool get_cts(int fd) {
int s;
ioctl(fd, TIOCMGET, &s);
return (s & TIOCM_CTS) != 0;
}
Ahora me gustaría esperar hasta que get_cts()
devuelva verdadero. Un bucle simple no es la mejor solución, creo (ya que consume muchos recursos).
void wait_cts(int fd) {
while(1) {
if(get_cts(fd)) {
return;
}
}
}
¿Hay alguna solución mejor usando C o C ++ en Linux? (No puedo usar ningún control de flujo de hardware ya que no necesito las líneas de datos en serie).
Está el ioctl TIOCMIWAIT
que bloquea hasta que un conjunto dado de señales cambie.
Lamentablemente, esta ioctl no está documentada en la página tty_ioctl(4)
ni en ioctl_list(4)
.
He aprendido sobre esta ioctl en esta pregunta:
Señales de toma de contacto del puerto serie del monitor Python (RS-232)