*/
sr_dbg("Error opening serial port '%s': %s.", pathname,
strerror(errno));
+ } else {
+ sr_dbg("Opened serial port '%s' as FD %d.", pathname, fd);
}
return fd;
*/
SR_PRIV int serial_write(int fd, const void *buf, size_t count)
{
- sr_spew("FD %d: Writing %d bytes.", fd, count);
-
#ifdef _WIN32
DWORD tmp = 0;
ret = write(fd, buf, count);
if (ret < 0)
sr_err("FD %d: Write error: %s.", fd, strerror(errno));
- else if ((size_t)ret != count)
- sr_spew("FD %d: Only wrote %d/%d bytes.", fd, ret, count);
+ else
+ sr_spew("FD %d: Wrote %d/%d bytes.", fd, ret, count);
return ret;
#endif
*/
SR_PRIV int serial_read(int fd, void *buf, size_t count)
{
- sr_spew("FD %d: Reading %d bytes.", fd, count);
-
#ifdef _WIN32
DWORD tmp = 0;
* "Resource temporarily unavailable" messages.
*/
sr_spew("FD %d: Read error: %s.", fd, strerror(errno));
- } else if ((size_t)ret != count) {
- sr_spew("FD %d: Only read %d/%d bytes.", fd, ret, count);
+ } else {
+ sr_spew("FD %d: Read %d/%d bytes.", fd, ret, count);
}
return ret;
{
sr_dbg("FD %d: Restoring serial parameters from backup.", fd);
+ if (!backup) {
+ sr_err("FD %d: Cannot restore serial params (NULL).", fd);
+ return -1;
+ }
+
#ifdef _WIN32
/* TODO */
#else
sr_dbg("FD %d: Getting terminal settings.", fd);
if (tcgetattr(fd, &term) < 0) {
- sr_err("tcgetattr() error: %ѕ.", strerror(errno));
+ sr_err("tcgetattr() error: %s.", strerror(errno));
return SR_ERR;
}
}
SR_PRIV int serial_readline(int fd, char **buf, int *buflen,
- uint64_t timeout_ms)
+ gint64 timeout_ms)
{
- uint64_t start;
+ gint64 start;
int maxlen, len;
timeout_ms *= 1000;
if (len > 0) {
*buflen += len;
*(*buf + *buflen) = '\0';
- if (*buflen > 0 && *(*buf + *buflen - 1) == '\r') {
- /* Strip LF and terminate. */
+ if (*buflen > 0 && (*(*buf + *buflen - 1) == '\r'
+ || *(*buf + *buflen - 1) == '\n')) {
+ /* Strip CR/LF and terminate. */
*(*buf + --*buflen) = '\0';
break;
}
break;
g_usleep(2000);
}
- sr_dbg("Received %d: '%s'.", *buflen, *buf);
+ if (*buflen)
+ sr_dbg("Received %d: '%s'.", *buflen, *buf);
return SR_OK;
}