]> sigrok.org Git - libsigrok.git/commitdiff
ols: add support for "probe names" scan option
authorGerhard Sittig <redacted>
Sun, 14 Aug 2022 19:17:29 +0000 (21:17 +0200)
committerGerhard Sittig <redacted>
Wed, 24 Aug 2022 18:05:25 +0000 (20:05 +0200)
Add support for the SR_CONF_PROBE_NAMES scan option. Optionally assign
user specified channel names instead of the driver's builtin names.

src/hardware/openbench-logic-sniffer/api.c
src/hardware/openbench-logic-sniffer/protocol.h

index 6e06f7e5b98acc74b961b31357d52c5bbd67a3be..09ef065939c22e6511775c1bc3f25fa62ea6bd3a 100644 (file)
@@ -25,6 +25,7 @@
 static const uint32_t scanopts[] = {
        SR_CONF_CONN,
        SR_CONF_SERIALCOMM,
+       SR_CONF_PROBE_NAMES,
 };
 
 static const uint32_t drvopts[] = {
@@ -100,12 +101,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        GSList *l;
        int num_read;
        unsigned int i;
-       const char *conn, *serialcomm;
+       const char *conn, *serialcomm, *probe_names;
        char buf[4] = { 0, 0, 0, 0 };
        struct dev_context *devc;
        size_t ch_max;
 
        conn = serialcomm = NULL;
+       probe_names = NULL;
        for (l = options; l; l = l->next) {
                src = l->data;
                switch (src->key) {
@@ -115,6 +117,9 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                case SR_CONF_SERIALCOMM:
                        serialcomm = g_variant_get_string(src->data, NULL);
                        break;
+               case SR_CONF_PROBE_NAMES:
+                       probe_names = g_variant_get_string(src->data, NULL);
+                       break;
                }
        }
        if (!conn)
@@ -183,6 +188,9 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
        devc = g_malloc0(sizeof(*devc));
        sdi->priv = devc;
        devc->trigger_at_smpl = OLS_NO_TRIGGER;
+       devc->channel_names = sr_parse_probe_names(probe_names,
+               ols_channel_names, ARRAY_SIZE(ols_channel_names),
+               ARRAY_SIZE(ols_channel_names), &ch_max);
 
        /*
         * Definitely using the OLS protocol, check if it supports
@@ -201,14 +209,13 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
                sdi->vendor = g_strdup("Sump");
                sdi->model = g_strdup("Logic Analyzer");
                sdi->version = g_strdup("v1.0");
-               devc->max_channels = ARRAY_SIZE(ols_channel_names);
+               devc->max_channels = ch_max;
        }
-       ch_max = ARRAY_SIZE(ols_channel_names);
        if (devc->max_channels && ch_max > devc->max_channels)
                ch_max = devc->max_channels;
        for (i = 0; i < ch_max; i++) {
                sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
-                       ols_channel_names[i]);
+                       devc->channel_names[i]);
        }
        /* Configure samplerate and divider. */
        if (ols_set_samplerate(sdi, DEFAULT_SAMPLERATE) != SR_OK)
index 96917743f72aabc951aa0c5957d64cfe1d7e6e7b..00ed35bed177fdba2b031b8c5d579cbdd04b15fb 100644 (file)
@@ -99,6 +99,8 @@
 #define OLS_NO_TRIGGER (-1)
 
 struct dev_context {
+       char **channel_names;
+
        /* constant device properties: */
        size_t max_channels;
        uint32_t max_samples;