c++ - Programación en serie(hardware handshake)
linux serial-port (1)
Esto puede no ser aplicable para su aplicación en particular, pero pensé que lo publicaría aquí en caso de que lo ayude a usted o a alguien más a buscar.
En la mayoría de los sistemas con termios
, puede establecer el indicador CRTSCTS
en el miembro ->c_cflags
de la estructura termios
que pase a tcsetattr
, y tcsetattr
que el kernel o el hardware controle el flujo RTS / CTS por usted.
(No es POSIX, pero está en los sistemas derivados BSD y SystemV por lo que está en casi todas partes, incluido Linux).
Estoy tratando de programar una comunicación en serie utilizando el protocolo de enlace de hardware en Linux usando C / C ++. Las señales que implementan el handshake son CTS (Clear to send) y RTS (Request to send). Actualmente mi función para configurar la señal CTS se ve de la siguiente manera:
int setCTS(int fd, int value) {
int status;
ioctl(fd, TIOCMGET, &status); // get the current port status
if (value)
status |= TIOCM_CTS; // rise the CTS bit
else
status &= ~TIOCM_CTS; // drop the CTS bit
ioctl(fd, TIOCMSET, $status); // set the modified status
return 0;
}
donde fd es el descriptor de archivo para el puerto y el valor es el valor que se establecerá para la señal. Para codificar esta función, basé en http://www.easysw.com/~mike/serial/serial.html#5_1 .
El problema es que gcc no reconoce ninguna de las constantes utilizadas en el ejemplo. ¿Alguna sugerencia?
- Actualización -
Encontré una respuesta. Mirando a otro ejemplo, sys/ioctl.h
declara las constantes.