From: Valentin Ochs Date: Sun, 12 Jul 2020 21:15:29 +0000 (+0200) Subject: Fix #1576 by handling DSO1000B's CHAN#:PROB? responses X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=34ce4d8258e61cb98446e027b2af0d6b522388fc;p=libsigrok.git Fix #1576 by handling DSO1000B's CHAN#:PROB? responses --- diff --git a/src/hardware/rigol-ds/protocol.c b/src/hardware/rigol-ds/protocol.c index fbbd0320..201e0a31 100644 --- a/src/hardware/rigol-ds/protocol.c +++ b/src/hardware/rigol-ds/protocol.c @@ -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;