]> sigrok.org Git - libsigrok.git/commitdiff
demo: support up to 128 logic channels, enable the lower 8 by default
authorGerhard Sittig <redacted>
Fri, 5 May 2017 21:20:43 +0000 (23:20 +0200)
committerUwe Hermann <redacted>
Sun, 21 May 2017 16:35:01 +0000 (18:35 +0200)
Bump the number of supported logic channels from 8 to 128. This is
mostly motivated to test the 64 channels limit which some of the
components/subprojects of the sigrok project might have (input/output
modules, user interfaces).

Only automatically enable the first 8 of the 128 total logic channels,
i.e. default to the previous behaviour. Prepare to only enable part of
the set of analog channels, but stick with their being active by default
as well.

Factor out the choice for the default logic pattern, too. This allows
for easier adjustment of the default configuration, when settings are
concentrated in a single spot.

src/hardware/demo/api.c

index 9aa6559744008387b5c42a24b97305176003716e..769c87e6845afb4eda145435e11d05132b66138e 100644 (file)
 #include "libsigrok-internal.h"
 #include "protocol.h"
 
-#define DEFAULT_NUM_LOGIC_CHANNELS     8
-#define DEFAULT_NUM_ANALOG_CHANNELS    4
+#define DEFAULT_NUM_LOGIC_CHANNELS     128
+#define DEFAULT_ENABLED_LOGIC_CHANNELS 8
+#define DEFAULT_LOGIC_PATTERN          PATTERN_SIGROK
 
+#define DEFAULT_NUM_ANALOG_CHANNELS    4
+#define DEFAULT_ENABLED_ANALOG_CHANNELS        4
 #define DEFAULT_ANALOG_AMPLITUDE       10
 
 static const char *logic_pattern_str[] = {
@@ -92,6 +95,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        GSList *l;
        int num_logic_channels, num_analog_channels, pattern, i;
        char channel_name[16];
+       gboolean enabled;
 
        num_logic_channels = DEFAULT_NUM_LOGIC_CHANNELS;
        num_analog_channels = DEFAULT_NUM_ANALOG_CHANNELS;
@@ -115,7 +119,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        devc->cur_samplerate = SR_KHZ(200);
        devc->num_logic_channels = num_logic_channels;
        devc->logic_unitsize = (devc->num_logic_channels + 7) / 8;
-       devc->logic_pattern = PATTERN_SIGROK;
+       devc->logic_pattern = DEFAULT_LOGIC_PATTERN;
        devc->num_analog_channels = num_analog_channels;
 
        if (num_logic_channels > 0) {
@@ -124,7 +128,8 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                cg->name = g_strdup("Logic");
                for (i = 0; i < num_logic_channels; i++) {
                        sprintf(channel_name, "D%d", i);
-                       ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, channel_name);
+                       enabled = (i < DEFAULT_ENABLED_LOGIC_CHANNELS) ? TRUE : FALSE;
+                       ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, enabled, channel_name);
                        cg->channels = g_slist_append(cg->channels, ch);
                }
                sdi->channel_groups = g_slist_append(NULL, cg);
@@ -141,8 +146,9 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                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);
+                       enabled = (i < DEFAULT_ENABLED_ANALOG_CHANNELS) ? TRUE : FALSE;
                        ch = sr_channel_new(sdi, i + num_logic_channels, SR_CHANNEL_ANALOG,
-                                       TRUE, channel_name);
+                                       enabled, channel_name);
                        acg->channels = g_slist_append(acg->channels, ch);
 
                        /* Every analog channel gets its own channel group as well. */