ssize_t serialGetData ( SerialDevice *serial, void *buffer, size_t size, int initialTimeout, int subsequentTimeout ) { unsigned char *byte = buffer; const unsigned char *const first = byte; const unsigned char *const end = first + size; int timeout = initialTimeout; while (byte < end) { if (!serialPollInput(serial, timeout)) break; *byte++ = serial->package.byte; serial->package.byte = SERIAL_NO_BYTE; timeout = subsequentTimeout; } { size_t count = byte - first; if (count) return count; } errno = EAGAIN; return -1; }
ssize_t serialGetData ( SerialDevice *serial, void *buffer, size_t size, int initialTimeout, int subsequentTimeout ) { unsigned char *const start = buffer; unsigned char *const end = start + size; unsigned char *byte = start; int timeout = initialTimeout; while (byte < end) { if (!serialPollInput(serial, timeout)) break; timeout = subsequentTimeout; { int status = serialBiosCommand(serial, _COM_RECEIVE, 0); *byte++ = status & 0XFF; } } return byte - start; }
int serialAwaitInput (SerialDevice *serial, int timeout) { if (!serialFlushAttributes(serial)) return 0; if (!serialPollInput(serial, timeout)) return 0; return 1; }