summaryrefslogtreecommitdiff
path: root/libsigrokdecode.h
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2016-08-26 15:09:17 +0200
committerUwe Hermann <uwe@hermann-uwe.de>2016-12-07 22:37:49 +0100
commit21dfd91d99836bdc6c0da939b601dd8a52358f21 (patch)
tree54e380dc67e1cd73273679d04c4c5a8af3036e4f /libsigrokdecode.h
parentee9304c667bf98b3c4e3a767943e3d8f6964601e (diff)
downloadlibsigrokdecode-21dfd91d99836bdc6c0da939b601dd8a52358f21.tar.gz
libsigrokdecode-21dfd91d99836bdc6c0da939b601dd8a52358f21.zip
Add support for the new query-based PD v3 decoder API.
For the time being, both APIs (2 and 3) will remain supported until all decoders have been converted to API version 3. Then, support for API version 2 will be dropped. Decoders using PD v3 API can benefit from both readability improvements as well as performance improvements. Up to 10x speedup has been measured in some situations (depends a lot on the decoder, the amount of data, the amount of edges in the signals, the amount of oversampling etc. etc.). This is only the first set of (basic) performance improvements for libsigrokdecode, there are various additional opportunities for further changes to improve performance. This changeset has been tested to survive a run of all the test-cases in the sigrok-test repo without issues (for the converted PDs), however it is not very well-tested yet, so there might be regressions that need to be addressed.
Diffstat (limited to 'libsigrokdecode.h')
-rw-r--r--libsigrokdecode.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/libsigrokdecode.h b/libsigrokdecode.h
index 03a5de0..a4d28d4 100644
--- a/libsigrokdecode.h
+++ b/libsigrokdecode.h
@@ -228,6 +228,43 @@ struct srd_decoder_inst {
int data_unitsize;
uint8_t *channel_samples;
GSList *next_di;
+
+ /** List of conditions a PD wants to wait for. */
+ GSList *condition_list;
+
+ /** Array of booleans denoting which conditions matched. */
+ GArray *match_array;
+
+ /** Absolute start sample number. */
+ uint64_t start_samplenum;
+
+ /** Absolute end sample number. */
+ uint64_t end_samplenum;
+
+ /** Pointer to the buffer/chunk of input samples. */
+ const uint8_t *inbuf;
+
+ /** Length (in bytes) of the input sample buffer. */
+ uint64_t inbuflen;
+
+ /** Absolute current samplenumber. */
+ uint64_t cur_samplenum;
+
+ /** Array of "old" (previous sample) pin values. */
+ GArray *old_pins_array;
+
+ /** Handle for this PD stack's worker thread. */
+ GThread *thread_handle;
+
+ /** Indicates whether new samples are available for processing. */
+ gboolean got_new_samples;
+
+ /** Indicates whether the worker thread has handled all samples. */
+ gboolean handled_all_samples;
+
+ GCond got_new_samples_cond;
+ GCond handled_all_samples_cond;
+ GMutex data_mutex;
};
struct srd_pd_output {