LINUX.ORG.RU

Как узнать сколько байт пришло на /dev/ttyS0 ?


0

0

Есть такая проблема, некое устройство обменивается с компом данными по RS232. Есть только три вида посылок, размерами 9, 3 и 34 байта. Необходимо определить какая пришла посылка и заполнить соответствующую структуру. Система Linux Slackware 9.0. Порт я открываю так:

int serial;
struct termios oldtio, newtio;

if ((serial = open(argv[1], O_RDWR | O_NOCTTY)) < 0)
error(1, errno, "Ошибка вызова open\n");

if ((result = tcgetattr(serial, &oldtio)) < 0)
error(1, errno, "Ошибка вызова tcgetattr\n");

bzero(&newtio, sizeof(newtio));

newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = 0;

newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 5;

tcflush(serial, TCIFLUSH);

if ((result = tcsetattr(serial, TCSANOW, &newtio)) < 0)
error(1, errno, "Ошибка вызова tcsetattr\n");

p.s.: Система как-нибудь сообщает о приходе данных на порт ?

★★

select[poll]??

anonymous
()

Вызывай read с буфером в 34 байта, read вернет количество действительно прочитанных байт.

Если в самих пакетах закодирована информация о типе пакета, то можно прочитать часть заголовка общую для всех пакетов, а затем дочитать остаток.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.