]> sigrok.org Git - libsigrok.git/commitdiff
demo: Unbreak execution with all analog channels disabled
authorGerhard Sittig <redacted>
Sat, 17 Jun 2017 15:58:45 +0000 (17:58 +0200)
committerUwe Hermann <redacted>
Fri, 23 Jun 2017 17:33:24 +0000 (19:33 +0200)
The 'demo' driver supports scan options to adjust the number of
supported channels, and runtime control for the enabled state of
channels.

Starting with zero analog channels created (scan option) resulted in a
runtime assertion. Creating but disabling analog channels (GUI checkbox,
CLI option) resulted in unexpected output for disabled channels.

Move the creation of a hash table out of the conditional loop that
iterates over created analog channels. Which results in the table's
always being valid, and iteration during data acquisition yields no
analog output as is expected.

This fixes bug #625.

src/hardware/demo/api.c

index 1f2e950ef4a71bd8122d9fe82a66ce2aa382d31e..17890f3f1f22e059cc5bcbe5465f9d79169e614a 100644 (file)
@@ -135,6 +135,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        }
 
        /* Analog channels, channel groups and pattern generators. */
+       devc->ch_ag = g_hash_table_new(g_direct_hash, g_direct_equal);
        if (num_analog_channels > 0) {
                pattern = 0;
                /* An "Analog" channel group with all analog channels in it. */
@@ -142,7 +143,6 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                acg->name = g_strdup("Analog");
                sdi->channel_groups = g_slist_append(sdi->channel_groups, acg);
 
-               devc->ch_ag = g_hash_table_new(g_direct_hash, g_direct_equal);
                for (i = 0; i < num_analog_channels; i++) {
                        snprintf(channel_name, 16, "A%d", i);
                        ch = sr_channel_new(sdi, i + num_logic_channels, SR_CHANNEL_ANALOG,