É possível configurar uma comunicação de porta serial usando o controle de fluxo de hardware com os pinos RTS / CTS (sinalizador CRTSCTS para tcsetattr), mas não é possível usar os pinos DTR / DSR para controle de fluxo de maneira confiável e eficiente.
Pode-se usar o TIOCMGET ioctl () para verificar o estado do pino, mas então precisamos enviar um byte de cada vez, o que o torna MUITO LENTO!
Não há um caminho melhor? Fazer nossos próprios cabos não é dimensionável e existem muitas impressoras seriais no mercado que só usam controle de fluxo DTR / DSR.
P.S.- Esqueça o XON / XOFF, eu preciso de comunicação confiável de 8 bits.
linux
serial-port
c
nlucas
fonte
fonte
Respostas:
Respondendo a minha própria pergunta, graças a uma sugestão de @ktf, descobri que pelo menos desde 2.6.28 [1] há IOCTLs (TCGETX, TCSETX, TCSETXF & TCSETXW) para configurar atributos estendidos.
Eles parecem ter sido adicionados ao kernel upstream em 13 de outubro de 2008 [2].
Esses IOCTLs extras (compatíveis com o SYS5) permitem configurar cada um dos pinos extras que são manipulados individualmente.
Veja o link para o patch RHEL original [3] e procure no exemplo de teste anexado um exemplo de como usá-lo.
As definições de IOCTL estão no arquivo "asm-generic / ioctls.h" e as constantes de estrutura e sinalização são definidas em "linux / termios.h" (em "/ usr / include", fora do curso).
ATUALIZAR
Mais pesquisas mostram que o suporte serial genérico para este IOCTL não foi mesclado na origem do kernel upstream. O RHEL 5.3 possui, mas não o kernel 3.0.6 upstream.
Isso significa que a chamada ioctl () falhará em qualquer outro kernel que não tenha portado o patch do RHEL [4].
[1] http://lxr.free-electrons.com/ident?v=2.6.28;i=TCGETX
[2] https://lkml.org/lkml/2008/10/13/120
[3] https://bugzilla.redhat.com/show_bug.cgi?id=445211
[4] https://bugzilla.redhat.com/attachment.cgi?id=315300&action=diff
fonte