]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/agilent-dmm/protocol.c
output/csv: use intermediate time_t var, silence compiler warning
[libsigrok.git] / src / hardware / agilent-dmm / protocol.c
index 8778c711c427ca9d07badd27017f0b54c4d302b4..f004ec4b751531d525f22196b664d20b4632ebe3 100644 (file)
@@ -77,7 +77,7 @@ static const struct agdmm_job *job_next(struct dev_context *devc)
                devc->current_job++;
                if (!job_current(devc)->send)
                        devc->current_job = 0;
-       } while(job_in_interval(devc) && devc->current_job != current_job);
+       } while (job_in_interval(devc) && devc->current_job != current_job);
        return job_current(devc);
 }
 
@@ -574,6 +574,12 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match)
                devc->cur_mqflags[i] = 0;
                devc->cur_exponent[i] = 0;
                devc->cur_digits[i] = 3 - resolution;
+       } else if (!strcmp(mstr, "MA")) {
+               devc->cur_mq[i] = SR_MQ_CURRENT;
+               devc->cur_unit[i] = SR_UNIT_AMPERE;
+               devc->cur_mqflags[i] = 0;
+               devc->cur_exponent[i] = -3;
+               devc->cur_digits[i] = 8 - resolution;
        } else if (!strcmp(mstr, "UA")) {
                devc->cur_mq[i] = SR_MQ_CURRENT;
                devc->cur_unit[i] = SR_UNIT_AMPERE;
@@ -600,9 +606,15 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match)
        } else if (!strcmp(mstr, "DIOD")) {
                devc->cur_mq[i] = SR_MQ_VOLTAGE;
                devc->cur_unit[i] = SR_UNIT_VOLT;
-               devc->cur_mqflags[i] = SR_MQFLAG_DIODE;
+               devc->cur_mqflags[i] = SR_MQFLAG_DIODE | SR_MQFLAG_DC;
                devc->cur_exponent[i] = 0;
                devc->cur_digits[i] = 3;
+       } else if (!strcmp(mstr, "TEMP")) {
+               devc->cur_mq[i] = SR_MQ_TEMPERATURE;
+               devc->cur_unit[i] = SR_UNIT_CELSIUS;
+               devc->cur_mqflags[i] = 0;
+               devc->cur_exponent[i] = 0;
+               devc->cur_digits[i] = 1;
        } else if (!strcmp(mstr, "CAP")) {
                devc->cur_mq[i] = SR_MQ_CAPACITANCE;
                devc->cur_unit[i] = SR_UNIT_FARAD;
@@ -625,14 +637,23 @@ static int recv_conf_u123x(const struct sr_dev_inst *sdi, GMatchInfo *match)
                                devc->cur_mqflags[i] |= SR_MQFLAG_RMS;
                } else if (!strcmp(mstr, "DC")) {
                        devc->cur_mqflags[i] |= SR_MQFLAG_DC;
+               } else if (!strcmp(mstr, "ACDC")) {
+                       devc->cur_mqflags[i] |= SR_MQFLAG_AC | SR_MQFLAG_DC | SR_MQFLAG_RMS;
                } else {
-               sr_dbg("Unknown first argument '%s'.", mstr);
+                       sr_dbg("Unknown first argument '%s'.", mstr);
                }
                g_free(mstr);
        } else
                devc->cur_mqflags[i] &= ~(SR_MQFLAG_AC | SR_MQFLAG_DC);
 
-       return JOB_CONF;
+       struct sr_channel *prev_conf = devc->cur_conf;
+       devc->cur_conf = sr_next_enabled_channel(sdi, devc->cur_conf);
+       if (devc->cur_conf->index >= MIN(devc->profile->nb_channels, 2))
+               devc->cur_conf = sr_next_enabled_channel(sdi, devc->cur_conf);
+       if (devc->cur_conf->index > prev_conf->index)
+               return JOB_AGAIN;
+       else
+               return JOB_CONF;
 }
 
 static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match)
@@ -738,7 +759,7 @@ static int recv_conf_u124x_5x(const struct sr_dev_inst *sdi, GMatchInfo *match)
        } else if (!strcmp(mstr, "DIOD")) {
                devc->cur_mq[i] = SR_MQ_VOLTAGE;
                devc->cur_unit[i] = SR_UNIT_VOLT;
-               devc->cur_mqflags[i] = SR_MQFLAG_DIODE;
+               devc->cur_mqflags[i] = SR_MQFLAG_DIODE | SR_MQFLAG_DC;
                devc->cur_exponent[i] = 0;
                if (devc->profile->model == KEYSIGHT_U1281 ||
                    devc->profile->model == KEYSIGHT_U1282) {
@@ -871,7 +892,7 @@ static int recv_log(const struct sr_dev_inst *sdi, GMatchInfo *match,
        if (mstr[12] & 1)  mqflags |= SR_MQFLAG_AVG;
        if (mstr[12] & 2)  mqflags |= SR_MQFLAG_MIN;
        if (mstr[12] & 4)  mqflags |= SR_MQFLAG_MAX;
-       if (function == 5) mqflags |= SR_MQFLAG_DIODE;
+       if (function == 5) mqflags |= SR_MQFLAG_DIODE | SR_MQFLAG_DC;
        g_free(mstr);
 
        mq = mqs[function];
@@ -990,11 +1011,12 @@ SR_PRIV const struct agdmm_recv agdmm_recvs_u124x[] = {
        { "^\"(\\d\\d.{18}\\d)\"$", recv_stat_u124x },
        { "^\\*([0-9])$", recv_switch },
        { "^([-+][0-9]\\.[0-9]{8}E[-+][0-9]{2})$", recv_fetc },
-       { "^\"(VOLT|CURR|RES|CAP|FREQ) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(VOLT:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(CURR:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(CPER:[40]-20mA) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(VOLT|CURR|RES|CAP|FREQ) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6,8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(VOLT:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6,8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(CURR:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6,8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(CPER:[40]-20mA) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6,8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
        { "^\"(T[0-9]:[A-Z]+) ([A-Z]+)\"$", recv_conf_u124x_5x },
+       { "^\"(TEMP:[A-Z]+) ([A-Z]+)\"$", recv_conf_u124x_5x },
        { "^\"(DIOD)\"$", recv_conf_u124x_5x },
        ALL_ZERO
 };
@@ -1017,12 +1039,24 @@ 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|FREQ) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(VOLT:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(CURR:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
-       { "^\"(CPER:[40]-20mA) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{8}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(VOLT|CURR|RES|CONT|COND|CAP|FREQ) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(VOLT:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(CURR:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(CPER:[40]-20mA) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(PULS:PWID|PULS:PWID:[ACD]+) ([-+][0-9\\.E\\-+]+),([-+][0-9]\\.[0-9]{6}E([-+][0-9]{2}))\"$", recv_conf_u124x_5x },
+       { "^\"(TEMP:[A-Z]+) ([A-Z]+)\"$", recv_conf_u124x_5x },
        { "^\"(T[0-9]:[A-Z]+) ([A-Z]+)\"$", recv_conf_u124x_5x },
-       { "^\"(DIOD)\"$", recv_conf_u124x_5x },
+       { "^\"(DIOD|PULS:[PN]DUT)\"$", recv_conf_u124x_5x },
+       ALL_ZERO
+};
+
+SR_PRIV const struct agdmm_recv agdmm_recvs_u127x[] = {
+       { "^\"(\\d\\d.{18}\\d)\"$", recv_stat_u123x },
+       { "^\\*([0-9]+)$", recv_switch },
+       { "^([-+][0-9]\\.[0-9]{8}E[-+][0-9]{2})$", recv_fetc },
+       { "^\"(V|MV|A|MA|UA|FREQ),(\\d),(AC|DC|ACDC)\"$", recv_conf_u123x },
+       { "^\"(RES|CAP),(\\d)\"$", recv_conf_u123x},
+       { "^\"(DIOD|TEMP)\"$", recv_conf_u123x },
        ALL_ZERO
 };