]> sigrok.org Git - libsigrok.git/commitdiff
fluke-dmm: Make serial write calls block, and fix error handling.
authorMartin Ling <redacted>
Sun, 21 Sep 2014 17:16:04 +0000 (18:16 +0100)
committerUwe Hermann <redacted>
Wed, 24 Sep 2014 21:30:30 +0000 (23:30 +0200)
These calls were previously nonblocking, but have no partial write handling.
They are made from scan and acquisition_start contexts where they are free
to block.

Remove the SERIAL_NONBLOCK at open, which only applied during scan, since all
calls in the scan are now explicitly blocking.

Also fix error handling for these calls, which appears to have been kept
from a previous direct usage of write() on a serial port fd.

src/hardware/fluke-dmm/api.c

index 9c5d4b559536a607b880f45788f3c6b8daf28fef..74d477cb95f2505cb8056f2868d69463dca8ecff 100644 (file)
@@ -78,7 +78,7 @@ static GSList *fluke_scan(const char *conn, const char *serialcomm)
        if (!(serial = sr_serial_dev_inst_new(conn, serialcomm)))
                return NULL;
 
-       if (serial_open(serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK)
+       if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
        drvc = di->priv;
@@ -90,9 +90,8 @@ static GSList *fluke_scan(const char *conn, const char *serialcomm)
        while (!devices && retry < 3) {
                retry++;
                serial_flush(serial);
-               if (serial_write(serial, "ID\r", 3) == -1) {
-                       sr_err("Unable to send ID string: %s.",
-                              strerror(errno));
+               if (serial_write_blocking(serial, "ID\r", 3) < 0) {
+                       sr_err("Unable to send ID string");
                        continue;
                }
 
@@ -286,8 +285,8 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
        serial_source_add(sdi->session, serial, G_IO_IN, 50,
                        fluke_receive_data, (void *)sdi);
 
-       if (serial_write(serial, "QM\r", 3) == -1) {
-               sr_err("Unable to send QM: %s.", strerror(errno));
+       if (serial_write_blocking(serial, "QM\r", 3) < 0) {
+               sr_err("Unable to send QM.");
                return SR_ERR;
        }
        devc->cmd_sent_at = g_get_monotonic_time() / 1000;