]> sigrok.org Git - libsigrok.git/blobdiff - hardware/tekpower-dmm/protocol.c
metex14: Pass 'info' as a void pointer.
[libsigrok.git] / hardware / tekpower-dmm / protocol.c
index 87f83c15b5fb39606117c0010012d9320ad4272d..cc7dea8f190f4f2bc402982a91a7bec94ce691e6 100644 (file)
 /* User-defined FS9721_LP3 flag 'c2c1_10' means temperature on this DMM. */
 #define is_temperature info.is_c2c1_10
 
+static void log_dmm_packet(const uint8_t *buf)
+{
+       sr_dbg("DMM packet: %02x %02x %02x %02x %02x %02x %02x"
+              " %02x %02x %02x %02x %02x %02x %02x",
+              buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
+              buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], buf[13]);
+}
+
 /* Now see what the value means, and pass that on. */
 static void fs9721_serial_handle_packet(const uint8_t *buf,
                                        struct dev_context *devc)
@@ -38,22 +46,18 @@ static void fs9721_serial_handle_packet(const uint8_t *buf,
        struct sr_datafeed_analog *analog;
        struct fs9721_info info;
 
+       log_dmm_packet(buf);
+
        if (!(analog = g_try_malloc0(sizeof(struct sr_datafeed_analog)))) {
                sr_err("Analog packet malloc failed.");
                return;
        }
 
-       if (!(analog->data = g_try_malloc(sizeof(float)))) {
-               sr_err("Analog value malloc failed.");
-               g_free(analog);
-               return;
-       }
-
        analog->num_samples = 1;
        analog->mq = -1;
 
        sr_fs9721_parse(buf, &floatval, analog, &info);
-       *analog->data = floatval;
+       analog->data = &floatval;
 
        if (is_temperature) {
                analog->mq = SR_MQ_TEMPERATURE;
@@ -69,17 +73,16 @@ static void fs9721_serial_handle_packet(const uint8_t *buf,
                devc->num_samples++;
        }
 
-       g_free(analog->data);
        g_free(analog);
 }
 
-static void handle_new_data(struct dev_context *devc, int fd)
+static void handle_new_data(struct dev_context *devc)
 {
        int len, i, offset = 0;
 
        /* Try to get as much data as the buffer can hold. */
        len = DMM_BUFSIZE - devc->buflen;
-       len = serial_read(fd, devc->buf + devc->buflen, len);
+       len = serial_read(devc->serial, devc->buf + devc->buflen, len);
        if (len < 1) {
                sr_err("Serial port read error: %d.", len);
                return;
@@ -104,9 +107,11 @@ static void handle_new_data(struct dev_context *devc, int fd)
 
 SR_PRIV int tekpower_dmm_receive_data(int fd, int revents, void *cb_data)
 {
-       const struct sr_dev_inst *sdi;
+       struct sr_dev_inst *sdi;
        struct dev_context *devc;
 
+       (void)fd;
+
        if (!(sdi = cb_data))
                return TRUE;
 
@@ -115,10 +120,11 @@ SR_PRIV int tekpower_dmm_receive_data(int fd, int revents, void *cb_data)
 
        if (revents == G_IO_IN) {
                /* Serial data arrived. */
-               handle_new_data(devc, fd);
+               handle_new_data(devc);
        }
 
        if (devc->num_samples >= devc->limit_samples) {
+               sr_info("Requested number of samples reached, stopping.");
                sdi->driver->dev_acquisition_stop(sdi, cb_data);
                return TRUE;
        }