+static const uint32_t scanopts[] = {
+ SR_CONF_CONN,
+};
+
+static const uint32_t drvopts[] = {
+ SR_CONF_MULTIMETER,
+};
+
+static const uint32_t devopts[] = {
+ SR_CONF_CONTINUOUS,
+ SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET,
+ SR_CONF_LIMIT_MSEC | SR_CONF_GET | SR_CONF_SET,
+ SR_CONF_MEASURED_QUANTITY | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_RANGE | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+ SR_CONF_DIGITS | SR_CONF_GET | SR_CONF_SET | SR_CONF_LIST,
+};
+
+static const struct {
+ enum sr_mq mq;
+ enum sr_mqflag mqflag;
+} mqopts[] = {
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC},
+ {SR_MQ_CURRENT, SR_MQFLAG_DC},
+ {SR_MQ_CURRENT, SR_MQFLAG_AC},
+ {SR_MQ_RESISTANCE, 0},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE},
+};
+
+static const struct {
+ enum sr_mq mq;
+ enum sr_mqflag mqflag;
+ int range_exp;
+ const char *range_str;
+} rangeopts[] = {
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, -99, "Auto"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, -2, "30mV"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, -1, "300mV"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, 0, "3V"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, 1, "30V"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_DC, 2, "300V"},
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC, -99, "Auto"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC, -1, "300mV"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC, 0, "3V"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC, 1, "30V"},
+ {SR_MQ_VOLTAGE, SR_MQFLAG_AC, 2, "300V"},
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_CURRENT, SR_MQFLAG_DC, -99, "Auto"},
+ {SR_MQ_CURRENT, SR_MQFLAG_DC, -1, "300mV"},
+ {SR_MQ_CURRENT, SR_MQFLAG_DC, 0, "3V"},
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_CURRENT, SR_MQFLAG_AC, -99, "Auto"},
+ {SR_MQ_CURRENT, SR_MQFLAG_AC, -1, "300mV"},
+ {SR_MQ_CURRENT, SR_MQFLAG_AC, 0, "3V"},
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_RESISTANCE, 0, -99, "Auto"},
+ {SR_MQ_RESISTANCE, 0, 1, "30"},
+ {SR_MQ_RESISTANCE, 0, 2, "300"},
+ {SR_MQ_RESISTANCE, 0, 3, "3k"},
+ {SR_MQ_RESISTANCE, 0, 4, "30k"},
+ {SR_MQ_RESISTANCE, 0, 5, "300k"},
+ {SR_MQ_RESISTANCE, 0, 6, "3M"},
+ {SR_MQ_RESISTANCE, 0, 7, "30M"},
+ /* -99 is a dummy exponent for auto ranging. */
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, -99, "Auto"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 1, "30R"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 2, "300R"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 3, "3kR"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 4, "30kR"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 5, "300kR"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 6, "3MR"},
+ {SR_MQ_RESISTANCE, SR_MQFLAG_FOUR_WIRE, 7, "30MR"},
+};
+
+/** Available digits as strings. */
+static const char *digits[] = {
+ "3.5", "4.5", "5.5",
+};
+
+/** Mapping between devc->spec_digits and digits string. */
+static const char *digits_map[] = {
+ "", "", "", "", "3.5", "4.5", "5.5",
+};
+
+static struct sr_dev_driver hp_3478a_driver_info;
+
+static int create_front_channel(struct sr_dev_inst *sdi, int chan_idx)