]> sigrok.org Git - libsigrok.git/commitdiff
Fix #1576 by handling DSO1000B's CHAN#:PROB? responses
authorValentin Ochs <redacted>
Sun, 12 Jul 2020 21:15:29 +0000 (23:15 +0200)
committerSoeren Apel <redacted>
Sun, 12 Jul 2020 21:30:20 +0000 (23:30 +0200)
src/hardware/rigol-ds/protocol.c

index fbbd03209cc1162e56464258707b269ca9ee2202..201e0a31b920d6761c6c7104e01a52e14e3431cd 100644 (file)
@@ -905,7 +905,21 @@ SR_PRIV int rigol_ds_get_dev_cfg(const struct sr_dev_inst *sdi)
        /* Probe attenuation. */
        for (i = 0; i < devc->model->analog_channels; i++) {
                cmd = g_strdup_printf(":CHAN%d:PROB?", i + 1);
-               res = sr_scpi_get_float(sdi->conn, cmd, &devc->attenuation[i]);
+
+               /* DSO1000B series prints an X after the probe factor, so
+                * we get a string and check for that instead of only handling
+                * floats. */
+               char *response;
+               res = sr_scpi_get_string(sdi->conn, cmd, &response);
+               if (res != SR_OK)
+                       return SR_ERR;
+
+               int len = strlen(response);
+               if (response[len-1] == 'X')
+                       response[len-1] = 0;
+
+               res = sr_atof_ascii(response, &devc->attenuation[i]);
+               g_free(response);
                g_free(cmd);
                if (res != SR_OK)
                        return SR_ERR;