X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Flcr%2Fes51919.c;h=b9894a1b439cc7edbe3af2acc6b93f7cfb2bcb29;hb=94f364ec11c938934f68cde067ee590218177140;hp=eeb724ec20cef49de7992374d84c0860cafa33f6;hpb=05199c0ac9f15f229d43e50e86c4c1eadc55deac;p=libsigrok.git diff --git a/src/lcr/es51919.c b/src/lcr/es51919.c index eeb724ec..b9894a1b 100644 --- a/src/lcr/es51919.c +++ b/src/lcr/es51919.c @@ -255,15 +255,20 @@ static int send_config_update(struct sr_dev_inst *sdi, struct sr_config *cfg) { struct sr_datafeed_packet packet; struct sr_datafeed_meta meta; + int ret; memset(&meta, 0, sizeof(meta)); packet.type = SR_DF_META; packet.payload = &meta; - meta.config = g_slist_append(meta.config, cfg); + meta.config = g_slist_append(NULL, cfg); + + ret = sr_session_send(sdi, &packet); + + g_slist_free(meta.config); - return sr_session_send(sdi, &packet); + return ret; } static int send_config_update_key(struct sr_dev_inst *sdi, uint32_t key, @@ -387,15 +392,11 @@ static const char *const models[] = { "NONE", "PARALLEL", "SERIES", "AUTO", }; -/** Private, per-device-instance driver context. */ struct dev_context { - /** The number of frames. */ struct dev_limit_counter frame_count; - /** The time limit counter. */ struct dev_time_counter time_count; - /** Data buffer. */ struct dev_buffer *buf; /** The frequency of the test signal (index to frequencies[]). */ @@ -597,6 +598,7 @@ static void handle_packet(struct sr_dev_inst *sdi, const uint8_t *pkt) unsigned int val; float floatval; gboolean frame; + struct sr_channel *channel; devc = sdi->priv; @@ -624,10 +626,11 @@ static void handle_packet(struct sr_dev_inst *sdi, const uint8_t *pkt) analog.num_samples = 1; analog.data = &floatval; - analog.meaning->channels = g_slist_append(NULL, sdi->channels->data); + channel = sdi->channels->data; + analog.meaning->channels = g_slist_append(NULL, channel); parse_measurement(pkt, &floatval, &analog, 0); - if (analog.meaning->mq != 0) { + if (analog.meaning->mq != 0 && channel->enabled) { if (!frame) { packet.type = SR_DF_FRAME_BEGIN; sr_session_send(sdi, &packet); @@ -641,10 +644,12 @@ static void handle_packet(struct sr_dev_inst *sdi, const uint8_t *pkt) } g_slist_free(analog.meaning->channels); - analog.meaning->channels = g_slist_append(NULL, sdi->channels->next->data); + + channel = sdi->channels->next->data; + analog.meaning->channels = g_slist_append(NULL, channel); parse_measurement(pkt, &floatval, &analog, 1); - if (analog.meaning->mq != 0) { + if (analog.meaning->mq != 0 && channel->enabled) { if (!frame) { packet.type = SR_DF_FRAME_BEGIN; sr_session_send(sdi, &packet); @@ -730,7 +735,6 @@ SR_PRIV void es51919_serial_clean(void *priv) return; dev_buffer_destroy(devc->buf); - g_free(devc); } SR_PRIV struct sr_dev_inst *es51919_serial_scan(GSList *options, @@ -861,10 +865,10 @@ SR_PRIV int es51919_serial_config_list(uint32_t key, GVariant **data, return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); case SR_CONF_OUTPUT_FREQUENCY: *data = g_variant_new_fixed_array(G_VARIANT_TYPE_DOUBLE, - frequencies, ARRAY_SIZE(frequencies), sizeof(double)); + ARRAY_AND_SIZE(frequencies), sizeof(double)); break; case SR_CONF_EQUIV_CIRCUIT_MODEL: - *data = g_variant_new_strv(models, ARRAY_SIZE(models)); + *data = g_variant_new_strv(ARRAY_AND_SIZE(models)); break; default: return SR_ERR_NA; @@ -886,7 +890,6 @@ SR_PRIV int es51919_serial_acquisition_start(const struct sr_dev_inst *sdi) std_session_send_df_header(sdi); - /* Poll every 50ms, or whenever some data comes in. */ serial = sdi->conn; serial_source_add(sdi->session, serial, G_IO_IN, 50, receive_data, (void *)sdi);