]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/demo/protocol.h
fluke-45: free memory that was allocated by SCPI get routines
[libsigrok.git] / src / hardware / demo / protocol.h
index c35ea2d4c618db1a19da649f737e91c26d30e40e..230d8f3528f6fe93bed4adbb6af2ccc0a09c26d9 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright (C) 2011 Olivier Fauchon <olivier@aixmarseille.com>
  * Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com>
  * Copyright (C) 2015 Bartosz Golaszewski <bgolaszewski@baylibre.com>
+ * Copyright (C) 2019 Frank Stettner <frank-stettner@gmx.net>
  *
  * 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
 /* 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 {
@@ -77,6 +84,9 @@ enum logic_pattern_type {
         * something that can get recognized.
         */
        PATTERN_SQUID,
+
+       /** Gray encoded data, like rotary encoder signals. */
+       PATTERN_GRAYCODE,
 };
 
 /* Analog patterns we can generate. */
@@ -85,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;
@@ -104,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 */
@@ -112,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;
@@ -135,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