]> sigrok.org Git - libsigrok.git/commitdiff
serial: flush() after open() in the serial core.
authorWolfram Sang <redacted>
Sun, 3 May 2020 20:57:50 +0000 (22:57 +0200)
committerGerhard Sittig <redacted>
Sun, 26 Jul 2020 14:06:42 +0000 (16:06 +0200)
Quite some drivers flush the serial port after opening it. And quite
some don't although they should. Factor this out, so serial_open() will
always flush the port. The removal in the drivers was done with this
small coccinelle script:

@@
struct sr_serial_dev_inst *serial;
@@

        serial_open(serial, ...)
        ... when != serial
-       serial_flush(serial);

and then the results and the unmatched findings of serial_flush() were
audited.

Signed-off-by: Wolfram Sang <redacted>
22 files changed:
src/hardware/agilent-dmm/api.c
src/hardware/appa-55ii/api.c
src/hardware/arachnid-labs-re-load-pro/api.c
src/hardware/atten-pps3xxx/api.c
src/hardware/center-3xx/api.c
src/hardware/conrad-digi-35-cpu/api.c
src/hardware/gmc-mh-1x-2x/api.c
src/hardware/gwinstek-gpd/api.c
src/hardware/kern-scale/api.c
src/hardware/korad-kaxxxxp/api.c
src/hardware/manson-hcs-3xxx/api.c
src/hardware/mastech-ms6514/api.c
src/hardware/mic-985xx/api.c
src/hardware/motech-lps-30x/api.c
src/hardware/norma-dmm/api.c
src/hardware/serial-dmm/api.c
src/hardware/serial-lcr/api.c
src/hardware/teleinfo/api.c
src/hardware/uni-t-ut32x/api.c
src/modbus/modbus_serial_rtu.c
src/scpi/scpi_serial.c
src/serial.c

index f7d30547a20cfc68c5c738d92e273414cf3b742a..8500c43591f44303c109d5a98d1160ccd10b772c 100644 (file)
@@ -131,7 +131,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
        if (serial_write_blocking(serial, "*IDN?\r\n", 7, SERIAL_WRITE_TIMEOUT_MS) < 7) {
                sr_err("Unable to send identification string.");
                return NULL;
index 81eafdce3ff1c809c1e23a1f9d671710ed30a117..50bc37338cc3635d7f28b6d2fe086499ffb8552c 100644 (file)
@@ -79,8 +79,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        sr_info("Probing serial port %s.", conn);
 
-       serial_flush(serial);
-
        /* Let's get a bit of data and see if we can find a packet. */
        if (serial_stream_detect(serial, buf, &len, 25,
                        appa_55ii_packet_valid, 500) != SR_OK)
index d6f95723d83ec9b7603cf4234f34ff1d144c0e8d..fb6f82727dedd9eafe515a5b27310bed96c6075d 100644 (file)
@@ -99,8 +99,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        /*
         * First stop potentially running monitoring and wait for 50ms before
         * next command can be sent.
index b82b9fb333cf9fd460764d638ce325f3e607caaf..dc6e5201977d30769956521c1450ffebfd8eb8b4 100644 (file)
@@ -113,8 +113,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options, int modelid)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        /* This is how the vendor software scans for hardware. */
        memset(packet, 0, PACKET_SIZE);
        packet[0] = 0xaa;
index 4591ae967dc7d0e5e85fede5b37c6dae5a343dc6..76d234ffd980cff708f793607ca00fa6508a7680 100644 (file)
@@ -67,8 +67,6 @@ static GSList *center_scan(const char *conn, const char *serialcomm, int idx)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        sr_info("Found device on port %s.", conn);
 
        sdi = g_malloc0(sizeof(struct sr_dev_inst));
index 1524df0a5bc9437fabd2d8ea7a2c85eb3aed3cb2..84e1779c8d1df0c07c75e66d4eccbead431cc0dc 100644 (file)
@@ -75,7 +75,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
        serial_close(serial);
 
        sr_spew("Conrad DIGI 35 CPU assumed at %s.", conn);
index f2cbd7b20ae4d0b8e4117af4f41a5aabb434df3f..5f029a9e9970e97a272b2bda5005322c96175966 100644 (file)
@@ -102,6 +102,7 @@ static enum model scan_model_sm(struct sr_serial_dev_inst *serial)
         * Try to find message consisting of device code and several
         * (at least 4) data bytes.
         */
+       serial_flush(serial);
        for (bytecnt = 0; bytecnt < 100; bytecnt++) {
                byte = read_byte(serial, timeout_us);
                if ((byte == -1) || (timeout_us < g_get_monotonic_time()))
@@ -175,8 +176,6 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options)
                return NULL;
        }
 
-       serial_flush(serial);
-
        model = scan_model_sm(serial);
 
        /*
@@ -187,10 +186,8 @@ static GSList *scan_1x_2x_rs232(struct sr_dev_driver *di, GSList *options)
                serialcomm = SERIALCOMM_1X_RS232;
                g_free(serial->serialcomm);
                serial->serialcomm = g_strdup(serialcomm);
-               if (serial_set_paramstr(serial, serialcomm) == SR_OK) {
-                       serial_flush(serial);
+               if (serial_set_paramstr(serial, serialcomm) == SR_OK)
                        model = scan_model_sm(serial);
-               }
        }
 
        if (model != METRAHIT_NONE) {
index 3234240fddbb65492ddc4307d7526fde2f7886f4..7406460623fe4d55d53542106c60f68629398e6d 100644 (file)
@@ -107,7 +107,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
        gpd_send_cmd(serial, "*IDN?\n");
        if (gpd_receive_reply(serial, reply, sizeof(reply)) != SR_OK) {
                sr_err("Device did not reply.");
index 70e85a0775f0898f00697599d257334c5490063d..fae1dfe18b58ea56d30d3f555dda314a095f73a3 100644 (file)
@@ -79,7 +79,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sr_info("Probing serial port %s.", conn);
 
        devices = NULL;
-       serial_flush(serial);
 
        sr_spew("Set O1 mode (continuous values, stable and unstable ones).");
        if (serial_write_blocking(serial, "O1\r\n", 4, 0) < 0)
index 1f82f2278631b013c840fd413ab4739aa1da69c4..d5146261551d88a8ab8155452c1bed1119bf2239 100644 (file)
@@ -128,8 +128,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        /* Get the device model. */
        len = 0;
        for (i = 0; models[i].id; i++) {
index 84c6be8b75774de2108558466d20b4d12e53f9f2..9d3c9238ed35e4d82f57f4bce7e435f85c58a6fc 100644 (file)
@@ -118,8 +118,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        sr_info("Probing serial port %s.", conn);
 
        /* Get the device model. */
index 7173cb3c98db1ef47ee4989cf4e3bd871167c290..6e22dd6c344f5f3a646668b525289ea62786fb7a 100644 (file)
@@ -81,8 +81,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        sr_info("Probing serial port %s.", conn);
 
-       serial_flush(serial);
-
        /* Let's get a bit of data and see if we can find a packet. */
        if (serial_stream_detect(serial, buf, &len, (2 * MASTECH_MS6514_FRAME_SIZE),
                        mastech_ms6514_packet_valid, 500) != SR_OK)
index 9e33f0ad83f2e2cd35aa89d6e131691d4d4104c3..14f0c4a8197603c84d6a060531c4b8760d1138e0 100644 (file)
@@ -67,8 +67,6 @@ static GSList *mic_scan(const char *conn, const char *serialcomm, int idx)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        /* TODO: Query device type. */
        // ret = mic_cmd_get_device_info(serial);
 
index 46407cc5f01cd95b498bad0eb744fd9d4a385cd9..e4a1fb6b9859d141e0074e8bdb2f430969fdb4ec 100644 (file)
@@ -378,7 +378,6 @@ static GSList *do_scan(lps_modelid modelid, struct sr_dev_driver *drv, GSList *o
                goto exit_err;
 
        /* Query and verify model string. */
-       serial_flush(serial);
        if (lps_cmd_reply(buf, serial, "MODEL") != SR_OK)
                return NULL;
 
index d155bc36d657b3b24f5f0817ae81caf5caa9e8b2..84ca43ca8351c4761309ffc61a949b671ec9c8de 100644 (file)
@@ -99,8 +99,6 @@ static GSList *scan(struct sr_dev_driver *drv, GSList *options)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return NULL;
 
-       serial_flush(serial);
-
        buf = g_malloc(BUF_MAX);
 
        snprintf(req, sizeof(req), "%s\r\n",
index bf1e695e5a0856b17fc7344b4fc1ae557a9b98cf..edabea787696e6f4da5fbe65e49bee9080115c38 100644 (file)
@@ -85,7 +85,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        sr_info("Probing serial port %s.", conn);
 
        devices = NULL;
-       serial_flush(serial);
 
        /* Request a packet if the DMM requires this. */
        if (dmm->packet_request) {
index d67171d4cdc653ebea95c381840f802eaa4d2da4..25b4e47ffa0c69540182ce322c9274ec27ca50c4 100644 (file)
@@ -105,7 +105,6 @@ static int scan_lcr_port(const struct lcr_info *lcr,
         * send data periodically. So we check if the packets match the
         * probed device's expected format.
         */
-       serial_flush(serial);
        if (lcr->packet_request) {
                ret = lcr->packet_request(serial);
                if (ret < 0) {
index 3de4456ba6687b16def01f928078b6650408f219..92bc27a9e32d8919c784eef76735d90dd2fd73d7 100644 (file)
@@ -75,8 +75,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
 
        sr_info("Probing serial port %s.", conn);
 
-       serial_flush(serial);
-
        /* Let's get a bit of data and see if we can find a packet. */
        if (serial_stream_detect(serial, buf, &len, len,
                                 teleinfo_packet_valid, 3000) != SR_OK)
index ce81b3cc792e32b4da3b9a9d97b35565c4f1761f..0329727fbf5385522e1527af1f4a5d3b3644a8a1 100644 (file)
@@ -90,7 +90,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        devices = NULL;
        serial = sr_serial_dev_inst_new(conn, serialcomm);
        rc = serial_open(serial, SERIAL_RDWR);
-       serial_flush(serial);
        /* Cannot query/identify the device. Successful open shall suffice. */
        serial_close(serial);
        if (rc != SR_OK) {
index 8d6978b1e0bf114f23ee578f329e2653f3161f8b..8123ee9afdeed3abeefb8cc96874a7e2a0d5a6e2 100644 (file)
@@ -57,9 +57,6 @@ static int modbus_serial_rtu_open(void *priv)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return SR_ERR;
 
-       if (serial_flush(serial) != SR_OK)
-               return SR_ERR;
-
        return SR_OK;
 }
 
index 90c01424cbb80054efc671295a619938f2d3ca52..6158f089ed6fd55810357ab671e15ad6edd5d7cc 100644 (file)
@@ -114,9 +114,6 @@ static int scpi_serial_open(struct sr_scpi_dev_inst *scpi)
        if (serial_open(serial, SERIAL_RDWR) != SR_OK)
                return SR_ERR;
 
-       if (serial_flush(serial) != SR_OK)
-               return SR_ERR;
-
        sscpi->got_newline = FALSE;
 
        return SR_OK;
index 106090b72927e230a6dd389f04a640fe312f94ab..fe39effc604f10119dcc822d4b0281557697115a 100644 (file)
@@ -122,10 +122,13 @@ SR_PRIV int serial_open(struct sr_serial_dev_inst *serial, int flags)
        if (ret != SR_OK)
                return ret;
 
-       if (serial->serialcomm)
-               return serial_set_paramstr(serial, serial->serialcomm);
-       else
-               return SR_OK;
+       if (serial->serialcomm) {
+               ret = serial_set_paramstr(serial, serial->serialcomm);
+               if (ret != SR_OK)
+                       return ret;
+       }
+
+       return serial_flush(serial);
 }
 
 /**