Приветствую всех людей из стека!
У меня есть ведущее устройство, которое взаимодействует с несколькими ведомыми устройствами через последовательный порт 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;
}