The previous implementation unconditionally submitted analog data
whenever values could get extracted out of received serial packets.
This commit checks the channels' enabled state before submission. Care
is taken to obey the user's acquisition limits, exclusively counting
submitted not received values.
struct sr_analog_encoding encoding[2];
struct sr_analog_meaning meaning[2];
struct sr_analog_spec spec[2];
struct sr_analog_encoding encoding[2];
struct sr_analog_meaning meaning[2];
struct sr_analog_spec spec[2];
+ struct sr_channel *channel;
+ int sent_ch1, sent_ch2;
float floatval[2];
devc = sdi->priv;
float floatval[2];
devc = sdi->priv;
sr_analog_init(&analog[1], &encoding[1], &meaning[1], &spec[1], 0);
brymen_bm86x_parse(buf, floatval, analog);
sr_analog_init(&analog[1], &encoding[1], &meaning[1], &spec[1], 0);
brymen_bm86x_parse(buf, floatval, analog);
+ sent_ch1 = sent_ch2 = 0;
- if (analog[0].meaning->mq != 0) {
+ channel = sdi->channels->data;
+ if (analog[0].meaning->mq != 0 && channel->enabled) {
analog[0].num_samples = 1;
analog[0].data = &floatval[0];
analog[0].num_samples = 1;
analog[0].data = &floatval[0];
- analog[0].meaning->channels = g_slist_append(NULL, sdi->channels->data);
+ analog[0].meaning->channels = g_slist_append(NULL, channel);
packet.type = SR_DF_ANALOG;
packet.payload = &analog[0];
sr_session_send(sdi, &packet);
g_slist_free(analog[0].meaning->channels);
}
packet.type = SR_DF_ANALOG;
packet.payload = &analog[0];
sr_session_send(sdi, &packet);
g_slist_free(analog[0].meaning->channels);
}
- if (analog[1].meaning->mq != 0) {
+ channel = sdi->channels->next->data;
+ if (analog[1].meaning->mq != 0 && channel->enabled) {
analog[1].num_samples = 1;
analog[1].data = &floatval[1];
analog[1].num_samples = 1;
analog[1].data = &floatval[1];
- analog[1].meaning->channels = g_slist_append(NULL, sdi->channels->next->data);
+ analog[1].meaning->channels = g_slist_append(NULL, channel);
packet.type = SR_DF_ANALOG;
packet.payload = &analog[1];
sr_session_send(sdi, &packet);
g_slist_free(analog[1].meaning->channels);
}
packet.type = SR_DF_ANALOG;
packet.payload = &analog[1];
sr_session_send(sdi, &packet);
g_slist_free(analog[1].meaning->channels);
}
- if (analog[0].meaning->mq != 0 || analog[1].meaning->mq != 0)
+ if (sent_ch1 || sent_ch2)
sr_sw_limits_update_samples_read(&devc->sw_limits, 1);
}
sr_sw_limits_update_samples_read(&devc->sw_limits, 1);
}