X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fteleinfo%2Fprotocol.c;h=a610173d1aaaa20421d2716bf44b3e7eaf8f42cd;hb=543d041dc16c134db18f34764cfd134335d04be2;hp=28dfcfa1fbd3b950ebb22a6ce9945dbfce3ea9b8;hpb=5542bee61b0e18e9ae3fa6edb361b8ed1bb77425;p=libsigrok.git diff --git a/hardware/teleinfo/protocol.c b/hardware/teleinfo/protocol.c index 28dfcfa1..a610173d 100644 --- a/hardware/teleinfo/protocol.c +++ b/hardware/teleinfo/protocol.c @@ -39,33 +39,37 @@ static gboolean teleinfo_control_check(char *label, char *data, char control) return ((sum & 0x3F) + ' ') == control; } -static gint teleinfo_probe_compare(gconstpointer a, gconstpointer b) +static gint teleinfo_channel_compare(gconstpointer a, gconstpointer b) { - const struct sr_probe *probe = a; + const struct sr_channel *ch = a; const char *name = b; - return strcmp(probe->name, name); + return strcmp(ch->name, name); } -static struct sr_probe *teleinfo_find_probe(struct sr_dev_inst *sdi, +static struct sr_channel *teleinfo_find_channel(struct sr_dev_inst *sdi, const char *name) { - GSList *elem = g_slist_find_custom(sdi->probes, name, - teleinfo_probe_compare); + GSList *elem = g_slist_find_custom(sdi->channels, name, + teleinfo_channel_compare); return elem ? elem->data : NULL; } -static void teleinfo_send_value(struct sr_dev_inst *sdi, const char *probe_name, +static void teleinfo_send_value(struct sr_dev_inst *sdi, const char *channel_name, float value, int mq, int unit) { - struct dev_context *devc = sdi->priv; + struct dev_context *devc; struct sr_datafeed_packet packet; - struct sr_datafeed_analog analog = { 0 }; - struct sr_probe *probe = teleinfo_find_probe(sdi, probe_name); + struct sr_datafeed_analog analog; + struct sr_channel *ch; + + devc = sdi->priv; + ch = teleinfo_find_channel(sdi, channel_name); - if (!probe || !probe->enabled) + if (!ch || !ch->enabled) return; - analog.probes = g_slist_append(analog.probes, probe); + memset(&analog, 0, sizeof(struct sr_datafeed_analog)); + analog.channels = g_slist_append(analog.channels, ch); analog.num_samples = 1; analog.mq = mq; analog.unit = unit; @@ -74,7 +78,7 @@ static void teleinfo_send_value(struct sr_dev_inst *sdi, const char *probe_name, packet.type = SR_DF_ANALOG; packet.payload = &analog; sr_session_send(devc->session_cb_data, &packet); - g_slist_free(analog.probes); + g_slist_free(analog.channels); } static void teleinfo_handle_mesurement(struct sr_dev_inst *sdi, @@ -125,7 +129,7 @@ static gboolean teleinfo_parse_group(struct sr_dev_inst *sdi, const uint8_t *group, char *optarif) { char label[9], data[13], control, cr; - const char *str = (const char *) group; + const char *str = (const char *)group; if (sscanf(str, "\x0A%8s %13s %c%c", label, data, &control, &cr) != 4 || cr != CR) return FALSE; @@ -139,12 +143,13 @@ static const uint8_t *teleinfo_parse_data(struct sr_dev_inst *sdi, const uint8_t *buf, int len, char *optarif) { - const uint8_t *group_start = memchr(buf, LF, len); + const uint8_t *group_start, *group_end; + + group_start = memchr(buf, LF, len); if (!group_start) return NULL; - const uint8_t *group_end = memchr(group_start, CR, - len - (group_start - buf)); + group_end = memchr(group_start, CR, len - (group_start - buf)); if (!group_end) return NULL; @@ -181,6 +186,7 @@ SR_PRIV int teleinfo_receive_data(int fd, int revents, void *cb_data) struct sr_serial_dev_inst *serial; const uint8_t *ptr, *next_ptr, *end_ptr; int len; + int64_t time; (void)fd; @@ -220,7 +226,7 @@ SR_PRIV int teleinfo_receive_data(int fd, int revents, void *cb_data) } if (devc->limit_msec) { - int64_t time = (g_get_monotonic_time() - devc->start_time) / 1000; + time = (g_get_monotonic_time() - devc->start_time) / 1000; if (time > (int64_t)devc->limit_msec) { sr_info("Requested time limit reached."); sdi->driver->dev_acquisition_stop(sdi, devc->session_cb_data);