LINUX.ORG.RU

UART не читает по 1 байту


0

0

int uart_readbyte(int handle, uchar *data)
{
struct timeval to;
fd_set fds;

FD_ZERO(&fds);
FD_SET(handle, &fds);

to.tv_sec = 1;
to.tv_usec = 0;

if (select(handle+1, &fds, NULL, NULL, &to)) {
read(handle, data, 1);
return 1;
}

return 0;
}

Если поставить read(handle, data, 2), то читается 2 байта. А так как приведено - функция всегда возвращает 0. Где глюк?

★★★★

Handle errors, Luke! (c)..

fd_set rfds;
int rc = select(fd + 1, &rfds, 0, 0, 0);
if (rc == -1) {
    handle error
} else if (!rc) {
    handle timeout
} else if (rc > 0 && FD_ISSET(fd, rfds)) {
    ssize_t slen = read(fd, buf, 1);
    if (slen == -1) {
        handle error
    } else if (slen > 0) {
        handle data
    }
}

&so on.

// wbr

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