лучший способ определить, простаивает ли последовательный порт Linux / Posix RS-485 (готов к передаче)? - PullRequest
0 голосов
/ 05 января 2020

Приветствую всех людей из стека!

У меня есть ведущее устройство, которое взаимодействует с несколькими ведомыми устройствами через последовательный порт RS-485. При определенных режимах отказа ... ведомое устройство может работать в режиме ожидания или слишком долго Tx.

Каков наилучший способ проверить линию Rx, чтобы увидеть, находится ли она в состоянии метки достаточно долго для данной скорости передачи в бодах? объявить, что автобус простаивает?

Будет ли это работать?

#include <unistd.h>
#include <sys/ioctl.h>
#include <termios.h>

int fd;
int bytes = 0;
int charTime = 104 * 11;
// assuming:
//   9600 baud, 8 bits,
//   one start, one stop,
//   one bit time minimum inter char spacing.
//   (11 bits total).


int checkIdle(int fd)
{
  ioctl(fd, TCFLSH);
  usleep(charTime * 2);

  // any more activity?
  if (ioctl(fd, FIONREAD, &bytes) < 0)
    return EXIT_FAILURE;
  if (bytes > 0)
    return EXIT_FAILURE;    
  return EXIT_SUCCESS;
}
...