From: Bert Vermeulen Date: Sat, 4 Oct 2014 08:37:07 +0000 (+0200) Subject: fluke-dmm: Fix blocking serial write timeout. X-Git-Tag: libsigrok-0.4.0~887 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=204014007f30a3980e6abb35b91bf654d190d81f;p=libsigrok.git fluke-dmm: Fix blocking serial write timeout. --- diff --git a/src/hardware/fluke-dmm/api.c b/src/hardware/fluke-dmm/api.c index f7c39c85..7ece6487 100644 --- a/src/hardware/fluke-dmm/api.c +++ b/src/hardware/fluke-dmm/api.c @@ -90,7 +90,7 @@ static GSList *fluke_scan(const char *conn, const char *serialcomm) while (!devices && retry < 3) { retry++; serial_flush(serial); - if (serial_write_blocking(serial, "ID\r", 3, 0) < 0) { + if (serial_write_blocking(serial, "ID\r", 3, SERIAL_WRITE_TIMEOUT_MS) < 0) { sr_err("Unable to send ID string"); continue; } @@ -286,7 +286,7 @@ 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_blocking(serial, "QM\r", 3, 0) < 0) { + if (serial_write_blocking(serial, "QM\r", 3, SERIAL_WRITE_TIMEOUT_MS) < 0) { sr_err("Unable to send QM."); return SR_ERR; } diff --git a/src/hardware/fluke-dmm/fluke-dmm.h b/src/hardware/fluke-dmm/fluke-dmm.h index d162bdd0..664d76d9 100644 --- a/src/hardware/fluke-dmm/fluke-dmm.h +++ b/src/hardware/fluke-dmm/fluke-dmm.h @@ -24,6 +24,9 @@ #define FLUKEDMM_BUFSIZE 256 +/* Always USB-serial, 1ms is plenty. */ +#define SERIAL_WRITE_TIMEOUT_MS 1 + /* Supported models */ enum { FLUKE_187 = 1, diff --git a/src/hardware/fluke-dmm/fluke.c b/src/hardware/fluke-dmm/fluke.c index 4a1d5c82..f86b7d7b 100644 --- a/src/hardware/fluke-dmm/fluke.c +++ b/src/hardware/fluke-dmm/fluke.c @@ -456,7 +456,7 @@ static void handle_line(const struct sr_dev_inst *sdi) /* Slip the request in now, before the main * timer loop asks for metadata again. */ n = sprintf(cmd, "QM %d\r", devc->meas_type); - if (serial_write_blocking(serial, cmd, n, 0) < 0) + if (serial_write_blocking(serial, cmd, n, SERIAL_WRITE_TIMEOUT_MS) < 0) sr_err("Unable to send QM (measurement)."); } } else { @@ -525,7 +525,7 @@ SR_PRIV int fluke_receive_data(int fd, int revents, void *cb_data) * out-of-sync or temporary disconnect issues. */ if ((devc->expect_response == FALSE && elapsed > devc->profile->poll_period) || elapsed > devc->profile->timeout) { - if (serial_write_blocking(serial, "QM\r", 3, 0) < 0) + if (serial_write_blocking(serial, "QM\r", 3, SERIAL_WRITE_TIMEOUT_MS) < 0) sr_err("Unable to send QM."); devc->cmd_sent_at = now; devc->expect_response = TRUE;