agilent-dmm: tentative support for all U123x and U125x models
Only tested on U1233A, but it just might work. The U125x protocol decoding only supports voltage, current, resistance, capacitance and diode measurements for now.
This commit is contained in:
parent
a4394fb3d9
commit
8c0152f29b
|
@ -47,11 +47,18 @@ static const char *probe_names[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct agdmm_job agdmm_u123x_jobs[];
|
extern const struct agdmm_job agdmm_jobs_u123x[];
|
||||||
extern const struct agdmm_recv agdmm_recvs[];
|
extern const struct agdmm_recv agdmm_recvs_u123x[];
|
||||||
|
extern const struct agdmm_job agdmm_jobs_u125x[];
|
||||||
|
extern const struct agdmm_recv agdmm_recvs_u125x[];
|
||||||
|
|
||||||
static const struct agdmm_profile supported_agdmm[] = {
|
static const struct agdmm_profile supported_agdmm[] = {
|
||||||
{ AGILENT_U1232A, "U1232A", 9600, agdmm_u123x_jobs, agdmm_recvs },
|
{ AGILENT_U1232A, "U1231A", 9600, agdmm_jobs_u123x, agdmm_recvs_u123x },
|
||||||
|
{ AGILENT_U1232A, "U1232A", 9600, agdmm_jobs_u123x, agdmm_recvs_u123x },
|
||||||
|
{ AGILENT_U1232A, "U1233A", 9600, agdmm_jobs_u123x, agdmm_recvs_u123x },
|
||||||
|
{ AGILENT_U1232A, "U1251A", 9600, agdmm_jobs_u125x, agdmm_recvs_u125x },
|
||||||
|
{ AGILENT_U1232A, "U1252A", 9600, agdmm_jobs_u125x, agdmm_recvs_u125x },
|
||||||
|
{ AGILENT_U1232A, "U1253A", 9600, agdmm_jobs_u125x, agdmm_recvs_u125x },
|
||||||
{ 0, NULL, 0, NULL, NULL }
|
{ 0, NULL, 0, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ static int send_stat(const struct sr_dev_inst *sdi)
|
||||||
return agdmm_send(sdi, "STAT?");
|
return agdmm_send(sdi, "STAT?");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int recv_stat(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
static int recv_stat_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
{
|
{
|
||||||
struct dev_context *devc;
|
struct dev_context *devc;
|
||||||
char *s;
|
char *s;
|
||||||
|
@ -197,6 +197,32 @@ static int recv_stat(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int recv_stat_u125x(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
|
{
|
||||||
|
struct dev_context *devc;
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
devc = sdi->priv;
|
||||||
|
s = g_match_info_fetch(match, 1);
|
||||||
|
sr_spew("agilent-dmm: STAT response '%s'", s);
|
||||||
|
|
||||||
|
/* Peak hold mode. */
|
||||||
|
if (s[4] == '1')
|
||||||
|
devc->cur_mqflags |= SR_MQFLAG_MAX;
|
||||||
|
else
|
||||||
|
devc->cur_mqflags &= ~SR_MQFLAG_MAX;
|
||||||
|
|
||||||
|
/* Triggered hold mode. */
|
||||||
|
if (s[7] == '1')
|
||||||
|
devc->cur_mqflags |= SR_MQFLAG_HOLD;
|
||||||
|
else
|
||||||
|
devc->cur_mqflags &= ~SR_MQFLAG_HOLD;
|
||||||
|
|
||||||
|
g_free(s);
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static int send_fetc(const struct sr_dev_inst *sdi)
|
static int send_fetc(const struct sr_dev_inst *sdi)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -335,6 +361,52 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int recv_conf_u125x(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
|
{
|
||||||
|
struct dev_context *devc;
|
||||||
|
char *mstr;
|
||||||
|
|
||||||
|
sr_spew("agilent-dmm: CONF? response '%s'", g_match_info_get_string(match));
|
||||||
|
devc = sdi->priv;
|
||||||
|
mstr = g_match_info_fetch(match, 1);
|
||||||
|
if (!strncmp(mstr, "VOLT", 4)) {
|
||||||
|
devc->cur_mq = SR_MQ_VOLTAGE;
|
||||||
|
devc->cur_unit = SR_UNIT_VOLT;
|
||||||
|
devc->cur_mqflags = 0;
|
||||||
|
devc->cur_divider = 0;
|
||||||
|
if (mstr[4] == ':') {
|
||||||
|
if (!strcmp(mstr + 4, "AC"))
|
||||||
|
devc->cur_mqflags |= SR_MQFLAG_AC;
|
||||||
|
else if (!strcmp(mstr + 4, "DC"))
|
||||||
|
devc->cur_mqflags |= SR_MQFLAG_DC;
|
||||||
|
else
|
||||||
|
/* "ACDC" appears as well, no idea what it means. */
|
||||||
|
devc->cur_mqflags &= ~(SR_MQFLAG_AC | SR_MQFLAG_DC);
|
||||||
|
} else
|
||||||
|
devc->cur_mqflags &= ~(SR_MQFLAG_AC | SR_MQFLAG_DC);
|
||||||
|
} else if(!strcmp(mstr, "CURR")) {
|
||||||
|
devc->cur_mq = SR_MQ_CURRENT;
|
||||||
|
devc->cur_unit = SR_UNIT_AMPERE;
|
||||||
|
devc->cur_mqflags = 0;
|
||||||
|
devc->cur_divider = 0;
|
||||||
|
} else if(!strcmp(mstr, "RES")) {
|
||||||
|
if (devc->mode_continuity) {
|
||||||
|
devc->cur_mq = SR_MQ_CONTINUITY;
|
||||||
|
devc->cur_unit = SR_UNIT_BOOLEAN;
|
||||||
|
} else {
|
||||||
|
devc->cur_mq = SR_MQ_RESISTANCE;
|
||||||
|
devc->cur_unit = SR_UNIT_OHM;
|
||||||
|
}
|
||||||
|
devc->cur_mqflags = 0;
|
||||||
|
devc->cur_divider = 0;
|
||||||
|
} else
|
||||||
|
sr_dbg("agilent-dmm: unknown first argument");
|
||||||
|
g_free(mstr);
|
||||||
|
|
||||||
|
|
||||||
|
return SR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* At least the 123x and 125x appear to have this. */
|
/* At least the 123x and 125x appear to have this. */
|
||||||
static int recv_conf(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
static int recv_conf(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
{
|
{
|
||||||
|
@ -349,7 +421,8 @@ static int recv_conf(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
devc->cur_unit = SR_UNIT_VOLT;
|
devc->cur_unit = SR_UNIT_VOLT;
|
||||||
devc->cur_mqflags = SR_MQFLAG_DIODE;
|
devc->cur_mqflags = SR_MQFLAG_DIODE;
|
||||||
devc->cur_divider = 0;
|
devc->cur_divider = 0;
|
||||||
}
|
} else
|
||||||
|
sr_dbg("agilent-dmm: unknown single argument");
|
||||||
g_free(mstr);
|
g_free(mstr);
|
||||||
|
|
||||||
return SR_OK;
|
return SR_OK;
|
||||||
|
@ -370,15 +443,15 @@ static int recv_switch(const struct sr_dev_inst *sdi, GMatchInfo *match)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SR_PRIV const struct agdmm_job agdmm_u123x_jobs[] = {
|
SR_PRIV const struct agdmm_job agdmm_jobs_u123x[] = {
|
||||||
{ 143, send_stat },
|
{ 143, send_stat },
|
||||||
{ 1000, send_conf },
|
{ 1000, send_conf },
|
||||||
{ 143, send_fetc },
|
{ 143, send_fetc },
|
||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
SR_PRIV const struct agdmm_recv agdmm_recvs[] = {
|
SR_PRIV const struct agdmm_recv agdmm_recvs_u123x[] = {
|
||||||
{ "^\"(\\d\\d.{18}\\d)\"$", recv_stat },
|
{ "^\"(\\d\\d.{18}\\d)\"$", recv_stat_u123x },
|
||||||
{ "^\\*([0-9])$", recv_switch },
|
{ "^\\*([0-9])$", recv_switch },
|
||||||
{ "^([-+][0-9]\\.[0-9]{8}E[-+][0-9]{2})$", recv_fetc },
|
{ "^([-+][0-9]\\.[0-9]{8}E[-+][0-9]{2})$", recv_fetc },
|
||||||
{ "^\"(V|MV|A|UA|FREQ),(\\d),(AC|DC)\"$", recv_conf_u123x },
|
{ "^\"(V|MV|A|UA|FREQ),(\\d),(AC|DC)\"$", recv_conf_u123x },
|
||||||
|
@ -387,4 +460,21 @@ SR_PRIV const struct agdmm_recv agdmm_recvs[] = {
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SR_PRIV const struct agdmm_job agdmm_jobs_u125x[] = {
|
||||||
|
{ 143, send_stat },
|
||||||
|
{ 1000, send_conf },
|
||||||
|
{ 143, send_fetc },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
SR_PRIV const struct agdmm_recv agdmm_recvs_u125x[] = {
|
||||||
|
{ "^\"(\\d\\d.{18}\\d)\"$", recv_stat_u125x },
|
||||||
|
{ "^\\*([0-9])$", recv_switch },
|
||||||
|
{ "^([-+][0-9]\\.[0-9]{8}E[-+][0-9]{2})$", recv_fetc },
|
||||||
|
{ "^(VOLT|CURR|RES|CAP) ([-+][0-9\\.E\\-+]+),([-+][0-9\\.E\\-+]+)$", recv_conf_u125x },
|
||||||
|
{ "^(VOLT:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9\\.E\\-+]+)$", recv_conf_u125x },
|
||||||
|
{ "^\"(DIOD)\"$", recv_conf },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue