]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/colead-slm/protocol.c
colead-slm: Fix serial port timeout.
[libsigrok.git] / src / hardware / colead-slm / protocol.c
index ef58ab73c484ae8c02340060e946a9f1e9483df8..182c77bb4b4e7a98a20fe5fcee6a56e2226c2a4a 100644 (file)
@@ -184,7 +184,7 @@ SR_PRIV int colead_slm_receive_data(int fd, int revents, void *cb_data)
        const struct sr_dev_inst *sdi;
        struct dev_context *devc;
        struct sr_serial_dev_inst *serial;
-       int len;
+       int delay_ms, len;
        char buf[128];
 
        (void)fd;
@@ -201,20 +201,21 @@ SR_PRIV int colead_slm_receive_data(int fd, int revents, void *cb_data)
 
        serial = sdi->conn;
        if (devc->state == IDLE) {
-               if (serial_read(serial, buf, 128) != 1 || buf[0] != 0x10)
+               if (serial_read_nonblocking(serial, buf, 128) != 1 || buf[0] != 0x10)
                        /* Nothing there, or caught the tail end of a previous packet,
                         * or some garbage. Unless it's a single "data ready" byte,
                         * we don't want it. */
                        return TRUE;
                /* Got 0x10, "measurement ready". */
-               if (serial_write(serial, "\x20", 1) == -1)
-                       sr_err("unable to send command: %s", strerror(errno));
+               delay_ms = serial_timeout(serial, 1);
+               if (serial_write_blocking(serial, "\x20", 1, delay_ms) < 1)
+                       sr_err("unable to send command");
                else {
                        devc->state = COMMAND_SENT;
                        devc->buflen = 0;
                }
        } else {
-               len = serial_read(serial, devc->buf + devc->buflen,
+               len = serial_read_nonblocking(serial, devc->buf + devc->buflen,
                                10 - devc->buflen);
                if (len < 1)
                        return TRUE;