]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/norma-dmm/protocol.c
Use ALL_ZERO in a few more places.
[libsigrok.git] / src / hardware / norma-dmm / protocol.c
index d6733b2f961e76ff3a53d43341bc84255194e61f..4dc717c9d0aa9967d992e306a385c0d7b4d813e6 100644 (file)
  *  @internal
  */
 
+#include <config.h>
 #include "protocol.h"
 
+#define LINE_LENGTH 20
+
 SR_PRIV const struct nmadmm_req nmadmm_requests[] = {
        { NMADMM_REQ_IDN, "IDN?" },
        { NMADMM_REQ_IDN, "STATUS?" },
-       { 0, NULL },
+       ALL_ZERO
 };
 
 static int nma_send_req(const struct sr_dev_inst *sdi, int req, char *params)
@@ -48,7 +51,8 @@ static int nma_send_req(const struct sr_dev_inst *sdi, int req, char *params)
        devc->last_req = req;
        devc->last_req_pending = TRUE;
 
-       if (serial_write_blocking(serial, buf, len, 0) < 0) {
+       if (serial_write_blocking(serial, buf, len,
+                       serial_timeout(serial, len)) < 0) {
                sr_err("Unable to send request.");
                devc->last_req_pending = FALSE;
                return SR_ERR;
@@ -87,24 +91,24 @@ static void nma_process_line(const struct sr_dev_inst *sdi)
        int mmode, devstat;     /* Measuring mode, device status */
        float value;    /* Measured value */
        float scale;    /* Scaling factor depending on range and function */
-       struct sr_datafeed_analog analog;
+       struct sr_datafeed_analog_old analog;
        struct sr_datafeed_packet packet;
 
        devc = sdi->priv;
 
-       devc->buf[20] = '\0';
+       devc->buf[LINE_LENGTH] = '\0';
 
        sr_spew("Received line '%s'.", devc->buf);
 
        /* Check line. */
-       if (strlen((const char *)devc->buf) != 20) {
+       if (strlen((const char *)devc->buf) != LINE_LENGTH) {
                sr_err("line: Invalid status '%s', must be 20 hex digits.",
                       devc->buf);
                devc->buflen = 0;
                return;
        }
 
-       for (pos = 0; pos < 20; pos++) {
+       for (pos = 0; pos < LINE_LENGTH; pos++) {
                if (!isxdigit(devc->buf[pos])) {
                        sr_err("line: Expected hex digit in '%s' at pos %d!",
                                devc->buf, pos);
@@ -116,7 +120,7 @@ static void nma_process_line(const struct sr_dev_inst *sdi)
        /* Start decoding. */
        value = 0.0;
        scale = 1.0;
-       memset(&analog, 0, sizeof(analog));
+       memset(&analog, 0, sizeof(struct sr_datafeed_analog_old));
 
        /*
         * The numbers are hex digits, starting from 0.
@@ -317,7 +321,7 @@ static void nma_process_line(const struct sr_dev_inst *sdi)
                sr_warn("Low battery, measurement quality degraded!");
        }
        /* 0x08: SCALED */
-       /* 0x04: RATE (=lower resolution, allows higher rata rate up to 10/s. */
+       /* 0x04: RATE (=lower resolution, allows higher data rate up to 10/s. */
        /* 0x02: Current clamp */
        if (flags & 0x01) { /* dB */
                /*
@@ -359,8 +363,8 @@ static void nma_process_line(const struct sr_dev_inst *sdi)
        analog.num_samples = 1;
        analog.data = &value;
 
-       memset(&packet, 0, sizeof(packet));
-       packet.type = SR_DF_ANALOG;
+       memset(&packet, 0, sizeof(struct sr_datafeed_packet));
+       packet.type = SR_DF_ANALOG_OLD;
        packet.payload = &analog;
        sr_session_send(devc->cb_data, &packet);