]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/scpi-dmm/api.c
scpi-dmm: Add Agilent 34410A.
[libsigrok.git] / src / hardware / scpi-dmm / api.c
index 1b62fb4385dcb11e045d10fcbf81379e16136f01..9cf4c339c84d6a0df0794774eb77c920ed7195e2 100644 (file)
@@ -50,18 +50,21 @@ static const struct scpi_command cmdset_agilent[] = {
 };
 
 /*
- * cmdset_hp is used for the 34401A, which was added to this code after the 
+ * cmdset_hp is used for the 34401A, which was added to this code after the
  * 34405A and 34465A. It differs in starting the measurement with INIT: using
  * MEAS without a trailing '?' (as used for the 34405A) is not valid for the
- * 34401A and gives an error. 
- * I'm surprised the same instruction sequence doesn't work and INIT may 
- * work for both, but I don't have the others to re-test. 
+ * 34401A and gives an error.
+ * I'm surprised the same instruction sequence doesn't work and INIT may
+ * work for both, but I don't have the others to re-test.
  *
- * On the 34401A, 
- *  MEAS <optional parameters> ? configures, arms, triggers and waits 
+ * cmdset_hp also works well for the 34410A, using cmdset_agilent throws an
+ * error on 'MEAS' without a '?'.
+ *
+ * On the 34401A,
+ *  MEAS <optional parameters> ? configures, arms, triggers and waits
  *       for a reading
  *  CONF <parameters> configures
- *  INIT prepares for triggering (trigger mode is not set, assumed 
+ *  INIT prepares for triggering (trigger mode is not set, assumed
  *       internal - external might time out)
  *  *OPC waits for completion, and
  *  READ? retrieves the result
@@ -109,14 +112,21 @@ SR_PRIV const struct scpi_dmm_model models[] = {
                1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
                scpi_dmm_get_meas_agilent,
                ARRAY_AND_SIZE(devopts_generic),
-                0,
+               0,
+       },
+       {
+               "Agilent", "34410A",
+               1, 6, cmdset_hp, ARRAY_AND_SIZE(mqopts_agilent_34405a),
+               scpi_dmm_get_meas_agilent,
+               ARRAY_AND_SIZE(devopts_generic),
+               0,
        },
        {
                "Keysight", "34465A",
                1, 5, cmdset_agilent, ARRAY_AND_SIZE(mqopts_agilent_34405a),
                scpi_dmm_get_meas_agilent,
                ARRAY_AND_SIZE(devopts_generic),
-                0,
+               0,
        },
        {
                "HP", "34401A",
@@ -124,7 +134,7 @@ SR_PRIV const struct scpi_dmm_model models[] = {
                scpi_dmm_get_meas_agilent,
                ARRAY_AND_SIZE(devopts_generic),
                /* 34401A: typ. 1020ms for AC readings (default is 1000ms). */
-               1000 * 1500, 
+               1000 * 1500,
        },
 };
 
@@ -180,7 +190,7 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi)
        sdi->driver = &scpi_dmm_driver_info;
        sdi->inst_type = SR_INST_SCPI;
        sr_scpi_hw_info_free(hw_info);
-        if (model->read_timeout_us)  /* non-default read timeout */
+       if (model->read_timeout_us)  /* non-default read timeout */
                scpi->read_timeout_us = model->read_timeout_us;
        devc = g_malloc0(sizeof(*devc));
        sdi->priv = devc;
@@ -280,6 +290,7 @@ static int config_set(uint32_t key, GVariant *data,
        case SR_CONF_MEASURED_QUANTITY:
                tuple_child = g_variant_get_child_value(data, 0);
                mq = g_variant_get_uint32(tuple_child);
+               g_variant_unref(tuple_child);
                tuple_child = g_variant_get_child_value(data, 1);
                mqflag = g_variant_get_uint64(tuple_child);
                g_variant_unref(tuple_child);