]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/scpi-dmm/protocol.h
scpi-dmm: avoid get/set range calls for some of the Agilent DMM functions
[libsigrok.git] / src / hardware / scpi-dmm / protocol.h
index 0881074ce9ef2715b381c60d98bbb78bd9fd9955..04b8e683155bde2516d0113d58f63110f8a96419 100644 (file)
@@ -40,6 +40,11 @@ enum scpi_dmm_cmdcode {
        DMM_CMD_STOP_ACQ,
        DMM_CMD_QUERY_VALUE,
        DMM_CMD_QUERY_PREC,
+       DMM_CMD_SETUP_LOCAL,
+       DMM_CMD_QUERY_RANGE_AUTO,
+       DMM_CMD_QUERY_RANGE,
+       DMM_CMD_SETUP_RANGE_AUTO,
+       DMM_CMD_SETUP_RANGE,
 };
 
 struct mqopt_item {
@@ -48,8 +53,11 @@ struct mqopt_item {
        const char *scpi_func_setup;
        const char *scpi_func_query;
        int default_precision;
+       uint32_t drv_flags;
 };
 #define NO_DFLT_PREC   -99
+#define FLAGS_NONE     0
+#define FLAG_NO_RANGE  (1 << 0)
 
 struct scpi_dmm_model {
        const char *vendor;
@@ -60,6 +68,15 @@ struct scpi_dmm_model {
        const struct mqopt_item *mqopts;
        size_t mqopt_size;
        int (*get_measurement)(const struct sr_dev_inst *sdi, size_t ch);
+       const uint32_t *devopts;
+       size_t devopts_size;
+       unsigned int read_timeout_us; /* If zero, use default from src/scpi/scpi.c. */
+       float infinity_limit; /* If zero, use default from protocol.c */
+       gboolean check_opc;
+       const char *(*get_range_text)(const struct sr_dev_inst *sdi);
+       int (*set_range_from_text)(const struct sr_dev_inst *sdi,
+               const char *range);
+       GVariant *(*get_range_text_list)(const struct sr_dev_inst *sdi);
 };
 
 struct dev_context {
@@ -80,6 +97,8 @@ struct dev_context {
                struct sr_analog_meaning meaning[SCPI_DMM_MAX_CHANNELS];
                struct sr_analog_spec spec[SCPI_DMM_MAX_CHANNELS];
        } run_acq_info;
+       gchar *precision;
+       char range_text[32];
 };
 
 SR_PRIV void scpi_dmm_cmd_delay(struct sr_scpi_dev_inst *scpi);
@@ -88,10 +107,16 @@ SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_number(
 SR_PRIV const struct mqopt_item *scpi_dmm_lookup_mq_text(
        const struct sr_dev_inst *sdi, const char *text);
 SR_PRIV int scpi_dmm_get_mq(const struct sr_dev_inst *sdi,
-       enum sr_mq *mq, enum sr_mqflag *flag, char **rsp);
+       enum sr_mq *mq, enum sr_mqflag *flag, char **rsp,
+       const struct mqopt_item **mqitem);
 SR_PRIV int scpi_dmm_set_mq(const struct sr_dev_inst *sdi,
        enum sr_mq mq, enum sr_mqflag flag);
+SR_PRIV const char *scpi_dmm_get_range_text(const struct sr_dev_inst *sdi);
+SR_PRIV int scpi_dmm_set_range_from_text(const struct sr_dev_inst *sdi,
+       const char *range);
+SR_PRIV GVariant *scpi_dmm_get_range_text_list(const struct sr_dev_inst *sdi);
 SR_PRIV int scpi_dmm_get_meas_agilent(const struct sr_dev_inst *sdi, size_t ch);
+SR_PRIV int scpi_dmm_get_meas_gwinstek(const struct sr_dev_inst *sdi, size_t ch);
 SR_PRIV int scpi_dmm_receive_data(int fd, int revents, void *cb_data);
 
 #endif