SR_CONF_SERIALCOMM,
};
-static const uint32_t devopts[] = {
+static const uint32_t drvopts[] = {
SR_CONF_MULTIMETER,
+};
+
+static const uint32_t devopts[] = {
SR_CONF_CONTINUOUS,
SR_CONF_LIMIT_SAMPLES | SR_CONF_SET,
SR_CONF_LIMIT_MSEC | SR_CONF_SET,
int dropped, ret;
size_t len;
uint8_t buf[128];
+ size_t ch_idx;
+ char ch_name[12];
dmm = (struct dmm_info *)di;
sdi->inst_type = SR_INST_SERIAL;
sdi->conn = serial;
sdi->priv = devc;
- sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1");
+ dmm->channel_count = 1;
+ if (dmm->packet_parse == sr_metex14_4packets_parse)
+ dmm->channel_count = 4;
+ if (dmm->packet_parse == sr_eev121gw_3displays_parse) {
+ dmm->channel_count = EEV121GW_DISPLAY_COUNT;
+ dmm->channel_formats = eev121gw_channel_formats;
+ }
+ for (ch_idx = 0; ch_idx < dmm->channel_count; ch_idx++) {
+ size_t ch_num;
+ const char *fmt;
+ fmt = "P%zu";
+ if (dmm->channel_formats && dmm->channel_formats[ch_idx])
+ fmt = dmm->channel_formats[ch_idx];
+ ch_num = ch_idx + 1;
+ snprintf(ch_name, sizeof(ch_name), fmt, ch_num);
+ sr_channel_new(sdi, ch_idx, SR_CHANNEL_ANALOG, TRUE, ch_name);
+ }
devices = g_slist_append(devices, sdi);
scan_cleanup:
return std_scan_complete(di, devices);
}
-static int config_set(uint32_t key, GVariant *data, const struct sr_dev_inst *sdi,
- const struct sr_channel_group *cg)
+static int config_set(uint32_t key, GVariant *data,
+ const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
{
struct dev_context *devc;
return sr_sw_limits_config_set(&devc->limits, key, data);
}
-static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
- const struct sr_channel_group *cg)
+static int config_list(uint32_t key, GVariant **data,
+ const struct sr_dev_inst *sdi, const struct sr_channel_group *cg)
{
- (void)sdi;
- (void)cg;
-
- switch (key) {
- case SR_CONF_SCAN_OPTIONS:
- *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
- scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t));
- break;
- case SR_CONF_DEVICE_OPTIONS:
- *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32,
- devopts, ARRAY_SIZE(devopts), sizeof(uint32_t));
- break;
- default:
- return SR_ERR_NA;
- }
-
- return SR_OK;
+ return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts);
}
static int dev_acquisition_start(const struct sr_dev_inst *sdi)
sr_sw_limits_acquisition_start(&devc->limits);
std_session_send_df_header(sdi);
- /* Poll every 50ms, or whenever some data comes in. */
serial = sdi->conn;
serial_source_add(sdi->session, serial, G_IO_IN, 50,
receive_data, (void *)sdi);
.context = NULL, \
}, \
VENDOR, MODEL, CONN, BAUDRATE, PACKETSIZE, TIMEOUT, DELAY, \
- REQUEST, VALID, PARSE, DETAILS, sizeof(struct CHIPSET##_info) \
+ REQUEST, 1, NULL, VALID, PARSE, DETAILS, sizeof(struct CHIPSET##_info) \
}).di
SR_REGISTER_DEV_DRIVER_LIST(serial_dmm_drivers,
sr_dtm0660_packet_valid, sr_dtm0660_parse, NULL
),
/* }}} */
+ /* eev121gw based meters {{{ */
+ DMM(
+ "eevblog-121gw", eev121gw, "EEVblog", "121GW",
+ "115200/8n1", 115200, EEV121GW_PACKET_SIZE, 0, 0, NULL,
+ sr_eev121gw_packet_valid, sr_eev121gw_3displays_parse, NULL
+ ),
+ /* }}} */
/* es519xx based meters {{{ */
DMM(
"iso-tech-idm103n", es519xx,
2400, FS9922_PACKET_SIZE, 0, 0, NULL,
sr_fs9922_packet_valid, sr_fs9922_parse, NULL
),
+ DMM(
+ "victor-dmm-ser", fs9922,
+ "Victor", "Victor DMMs (Mini-USB cable)", "2400/8n1",
+ 2400, FS9922_PACKET_SIZE, 0, 0, NULL,
+ sr_fs9922_packet_valid, sr_fs9922_parse, NULL
+ ),
DMM(
/*
* Note: The VC830 doesn't set the 'volt' and 'diode' bits of
NULL
),
/* }}} */
+ /* ms8250d based meters {{{ */
+ DMM(
+ "mastech-ms8250d", ms8250d,
+ "MASTECH", "MS8250D", "2400/8n1/rts=0/dtr=1",
+ 2400, MS8250D_PACKET_SIZE, 0, 0, NULL,
+ sr_ms8250d_packet_valid, sr_ms8250d_parse,
+ NULL
+ ),
+ /* }}} */
/* metex14 based meters {{{ */
DMM(
"mastech-mas345", metex14,
sr_metex14_packet_valid, sr_metex14_parse,
NULL
),
+ DMM(
+ "metex-m3860m", metex14,
+ "Metex", "M-3860M", "9600/7n2/rts=0/dtr=1", 9600,
+ 4 * METEX14_PACKET_SIZE, 0, 0, sr_metex14_packet_request,
+ sr_metex14_4packets_valid, sr_metex14_4packets_parse,
+ NULL
+ ),
DMM(
"metex-m4650cr", metex14,
"Metex", "M-4650CR", "1200/7n2/rts=0/dtr=1", 1200,
sr_metex14_packet_valid, sr_metex14_parse,
NULL
),
+ DMM(
+ "peaktech-4390a", metex14,
+ "PeakTech", "4390A", "9600/7n2/rts=0/dtr=1", 9600,
+ 4 * METEX14_PACKET_SIZE, 0, 0, sr_metex14_packet_request,
+ sr_metex14_4packets_valid, sr_metex14_4packets_parse,
+ NULL
+ ),
DMM(
"radioshack-22-168", metex14,
"RadioShack", "22-168", "1200/7n2/rts=0/dtr=1", 1200,
sr_vc870_packet_valid, sr_vc870_parse, NULL
),
/* }}} */
+ /* vc96 based meters {{{ */
+ DMM(
+ "voltcraft-vc96", vc96,
+ "Voltcraft", "VC-96", "1200/8n2", 1200,
+ VC96_PACKET_SIZE, 0, 0, NULL,
+ sr_vc96_packet_valid, sr_vc96_parse,
+ NULL
+ ),
+ /* }}} */
/*
* The list is sorted. Add new items in the respective chip's group.
*/