Programação serial (handshake de hardware)

Eu estou tentando programar uma comunicação serial usando handshake de hardware no Linux usando C / C ++. Os sinais que implementam o handshake são CTS (Clear to send) e RTS (Request to send). Atualmente minha function para configurar o sinal CTS é a seguinte:

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; } 

onde fd é o descritor de arquivo para a porta e valor é o valor a ser definido para o sinal. Para codificar essa function, baseei-me em http://www.easysw.com/~mike/serial/serial.html#5_1 .

O problema é que o gcc não reconhece nenhuma das constantes usadas no exemplo. Alguma sugestão?

– Atualização –

Eu encontrei uma resposta. Olhando para outro exemplo, sys/ioctl.h declara as constantes.

Isso pode não ser aplicável ao seu aplicativo em particular, mas eu pensei em publicá-lo aqui caso isso ajude você ou outra pessoa a pesquisar.

Na maioria dos sistemas com termios , você pode definir o flag CRTSCTS no membro ->c_cflags da estrutura termios que você passa para tcsetattr , e fazer com que o kernel ou hardware faça o controle de stream RTS / CTS para você.

(Não é POSIX, mas está nos sistemas derivados BSD e SystemV, então está em quase todo lugar – incluindo Linux).