]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/demo/protocol.h
Demo: Implement multi-frame development feature
[libsigrok.git] / src / hardware / demo / protocol.h
index 2562de9915c4147136f099b18767162ae5037bee..53ad043b17845952d35a8bd72fb8b27bf1948d16 100644 (file)
@@ -17,8 +17,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef LIBSIGROK_HARDWARE_DEMO_PROTOCOL_H
@@ -34,8 +33,9 @@
 #define LOGIC_BUFSIZE                  4096
 /* 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
 
-/* Private, per-device-instance driver context. */
 struct dev_context {
        uint64_t cur_samplerate;
        uint64_t limit_samples;
@@ -55,6 +55,10 @@ struct dev_context {
        GHashTable *ch_ag;
        gboolean avg; /* True if averaging is enabled */
        uint64_t avg_samples;
+       size_t enabled_logic_channels;
+       size_t enabled_analog_channels;
+       size_t first_partial_logic_index;
+       uint8_t first_partial_logic_mask;
 };
 
 /* Logic patterns we can generate. */
@@ -76,18 +80,32 @@ enum {
         */
        PATTERN_INC,
 
+       /**
+        * Single bit "walking" across all logic channels by being
+        * shifted across data lines, restarting after the last line
+        * was used. An all-zero (all-one) state is inserted to prevent
+        * repetitive patterns (e.g. with 8 data lines, every 8th state
+        * would show the same line state)
+        */
+       PATTERN_WALKING_ONE,
+       PATTERN_WALKING_ZERO,
+
        /** All channels have a low logic state. */
        PATTERN_ALL_LOW,
 
        /** All channels have a high logic state. */
        PATTERN_ALL_HIGH,
+
+       /**
+        * Mimics a cable squid. Derived from the "works with" logo
+        * to occupy a larger number of channels yet "painting"
+        * something that can get recognized.
+        */
+       PATTERN_SQUID,
 };
 
 /* Analog patterns we can generate. */
 enum {
-       /**
-        * Square wave.
-        */
        PATTERN_SQUARE,
        PATTERN_SINE,
        PATTERN_TRIANGLE,
@@ -102,6 +120,7 @@ static const char *analog_pattern_str[] = {
 };
 
 struct analog_gen {
+       struct sr_channel *ch;
        int pattern;
        float amplitude;
        float pattern_data[ANALOG_BUFSIZE];