X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=hardware%2Fmic-985xx%2Fprotocol.c;h=ce5f0209649e3afc00a4f4f5c6b3accf508ff7a5;hb=7079c078df97af1ee6f4f47f46504a341a812865;hp=828a91cc24084a7f02e17b63a0564cfcc2cd747e;hpb=6f3e5335adc5ba4488c5f7dcb791f929c20f2049;p=libsigrok.git diff --git a/hardware/mic-985xx/protocol.c b/hardware/mic-985xx/protocol.c index 828a91cc..ce5f0209 100644 --- a/hardware/mic-985xx/protocol.c +++ b/hardware/mic-985xx/protocol.c @@ -108,15 +108,18 @@ static int handle_packet(const uint8_t *buf, struct sr_dev_inst *sdi, int idx) return SR_ERR; } - /* Common values for both probes. */ + /* Clear 'analog', otherwise it'll contain random garbage. */ + memset(&analog, 0, sizeof(struct sr_datafeed_analog)); + + /* Common values for both channels. */ packet.type = SR_DF_ANALOG; packet.payload = &analog; analog.num_samples = 1; /* Temperature. */ - l = g_slist_copy(sdi->probes); + l = g_slist_copy(sdi->channels); l = g_slist_remove_link(l, g_slist_nth(l, 1)); - analog.probes = l; + analog.channels = l; analog.mq = SR_MQ_TEMPERATURE; analog.unit = SR_UNIT_CELSIUS; /* TODO: Use C/F correctly. */ analog.data = &temperature; @@ -125,9 +128,9 @@ static int handle_packet(const uint8_t *buf, struct sr_dev_inst *sdi, int idx) /* Humidity. */ if (mic_devs[idx].has_humidity) { - l = g_slist_copy(sdi->probes); + l = g_slist_copy(sdi->channels); l = g_slist_remove_link(l, g_slist_nth(l, 0)); - analog.probes = l; + analog.channels = l; analog.mq = SR_MQ_RELATIVE_HUMIDITY; analog.unit = SR_UNIT_PERCENTAGE; analog.data = &humidity; @@ -143,13 +146,15 @@ static int handle_packet(const uint8_t *buf, struct sr_dev_inst *sdi, int idx) static void handle_new_data(struct sr_dev_inst *sdi, int idx) { struct dev_context *devc; + struct sr_serial_dev_inst *serial; int len, i, offset = 0; devc = sdi->priv; + serial = sdi->conn; /* Try to get as much data as the buffer can hold. */ len = SERIAL_BUFSIZE - devc->buflen; - len = serial_read(devc->serial, devc->buf + devc->buflen, len); + len = serial_read(serial, devc->buf + devc->buflen, len); if (len < 1) { sr_err("Serial port read error: %d.", len); return; @@ -179,6 +184,7 @@ static int receive_data(int fd, int revents, int idx, void *cb_data) struct dev_context *devc; int64_t t; static gboolean first_time = TRUE; + struct sr_serial_dev_inst *serial; (void)fd; @@ -188,13 +194,15 @@ static int receive_data(int fd, int revents, int idx, void *cb_data) if (!(devc = sdi->priv)) return TRUE; + serial = sdi->conn; + if (revents == G_IO_IN) { /* New data arrived. */ handle_new_data(sdi, idx); } else { /* Timeout. */ if (first_time) { - mic_cmd_set_realtime_mode(devc->serial); + mic_cmd_set_realtime_mode(serial); first_time = FALSE; } }