X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fdemo%2Fprotocol.h;h=230d8f3528f6fe93bed4adbb6af2ccc0a09c26d9;hb=4fad41a8a4f3;hp=285a127dd02f6fef7a1aea3bc4be98cb6c53e37a;hpb=03733430464abbc8eb23d50c8bef822dcd2ee20b;p=libsigrok.git diff --git a/src/hardware/demo/protocol.h b/src/hardware/demo/protocol.h index 285a127d..230d8f35 100644 --- a/src/hardware/demo/protocol.h +++ b/src/hardware/demo/protocol.h @@ -5,6 +5,7 @@ * Copyright (C) 2011 Olivier Fauchon * Copyright (C) 2012 Alexandru Gagniuc * Copyright (C) 2015 Bartosz Golaszewski + * Copyright (C) 2019 Frank Stettner * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,7 +35,13 @@ /* Size of the analog pattern space per channel. */ #define ANALOG_BUFSIZE 4096 /* This is a development feature: it starts a new frame every n samples. */ -#define SAMPLES_PER_FRAME 0 +#define SAMPLES_PER_FRAME 1000UL +#define DEFAULT_LIMIT_FRAMES 0 + +#define DEFAULT_ANALOG_ENCODING_DIGITS 4 +#define DEFAULT_ANALOG_SPEC_DIGITS 4 +#define DEFAULT_ANALOG_AMPLITUDE 10 +#define DEFAULT_ANALOG_OFFSET 0. /* Logic patterns we can generate. */ enum logic_pattern_type { @@ -88,12 +95,27 @@ enum analog_pattern_type { PATTERN_SINE, PATTERN_TRIANGLE, PATTERN_SAWTOOTH, + PATTERN_ANALOG_RANDOM, +}; + +static const char *analog_pattern_str[] = { + "square", + "sine", + "triangle", + "sawtooth", + "random", +}; + +struct analog_pattern { + float data[ANALOG_BUFSIZE]; + unsigned int num_samples; }; struct dev_context { uint64_t cur_samplerate; uint64_t limit_samples; uint64_t limit_msec; + uint64_t limit_frames; uint64_t sent_samples; uint64_t sent_frame_samples; /* Number of samples that were sent for current frame. */ int64_t start_us; @@ -107,6 +129,7 @@ struct dev_context { enum logic_pattern_type logic_pattern; uint8_t logic_data[LOGIC_BUFSIZE]; /* Analog */ + struct analog_pattern *analog_patterns[ARRAY_SIZE(analog_pattern_str)]; int32_t num_analog_channels; GHashTable *ch_ag; gboolean avg; /* True if averaging is enabled */ @@ -115,21 +138,20 @@ struct dev_context { size_t enabled_analog_channels; size_t first_partial_logic_index; uint8_t first_partial_logic_mask; -}; - -static const char *analog_pattern_str[] = { - "square", - "sine", - "triangle", - "sawtooth", + /* Triggers */ + uint64_t capture_ratio; + gboolean trigger_fired; + struct soft_trigger_logic *stl; }; struct analog_gen { struct sr_channel *ch; + enum sr_mq mq; + enum sr_mqflag mq_flags; + enum sr_unit unit; enum analog_pattern_type pattern; float amplitude; - float pattern_data[ANALOG_BUFSIZE]; - unsigned int num_samples; + float offset; struct sr_datafeed_analog packet; struct sr_analog_encoding encoding; struct sr_analog_meaning meaning; @@ -138,7 +160,8 @@ struct analog_gen { unsigned int num_avgs; /* Number of samples averaged */ }; -SR_PRIV void demo_generate_analog_pattern(struct analog_gen *ag, uint64_t sample_rate); +SR_PRIV void demo_generate_analog_pattern(struct dev_context *devc); +SR_PRIV void demo_free_analog_pattern(struct dev_context *devc); SR_PRIV int demo_prepare_data(int fd, int revents, void *cb_data); #endif