X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=src%2Finput%2Ffeed_queue.c;h=ca91af3756602d7ccb50fe47de365d2eef817e8f;hp=b25fa77affdc8b7f90731dafa62ed5ef6b6ab9ab;hb=43e6f7a7798f579c97f34f77c586a4962a41c29a;hpb=b7721913feb5f4dfdbbe0ad60dd6cf931757998b diff --git a/src/input/feed_queue.c b/src/input/feed_queue.c index b25fa77a..ca91af37 100644 --- a/src/input/feed_queue.c +++ b/src/input/feed_queue.c @@ -132,6 +132,7 @@ struct feed_queue_analog { struct sr_analog_meaning meaning; struct sr_analog_spec spec; GSList *channels; + float scale_factor; }; SR_API struct feed_queue_analog *feed_queue_analog_alloc( @@ -162,11 +163,37 @@ SR_API struct feed_queue_analog *feed_queue_analog_alloc( return q; } +SR_API int feed_queue_analog_params(struct feed_queue_analog *q, + float scale_factor, + enum sr_mq mq, enum sr_mqflag mq_flag, enum sr_unit unit) +{ + int ret; + + if (!q) + return SR_ERR_ARG; + + ret = feed_queue_analog_flush(q); + if (ret != SR_OK) + return ret; + + q->scale_factor = scale_factor; + if (q->scale_factor == 1.0) + q->scale_factor = 0.0; + + q->meaning->mq = mq; + q->meaning->mqflags = mqflags; + q->meaning->unit = unit; + + return SR_OK; +} + SR_API int feed_queue_analog_submit(struct feed_queue_analog *q, float data, size_t count) { int ret; + if (q->scale_factor) + data *= q->scale_factor; while (count--) { q->data_values[q->fill_count++] = data; if (q->fill_count == q->alloc_count) {