From: Gerhard Sittig Date: Sun, 14 Aug 2022 19:17:29 +0000 (+0200) Subject: ols: add support for "probe names" scan option X-Git-Url: https://sigrok.org/gitweb/?a=commitdiff_plain;h=2007770270caa64b74ed4012bdf189211e1e02c5;p=libsigrok.git ols: add support for "probe names" scan option Add support for the SR_CONF_PROBE_NAMES scan option. Optionally assign user specified channel names instead of the driver's builtin names. --- diff --git a/src/hardware/openbench-logic-sniffer/api.c b/src/hardware/openbench-logic-sniffer/api.c index 6e06f7e5..09ef0659 100644 --- a/src/hardware/openbench-logic-sniffer/api.c +++ b/src/hardware/openbench-logic-sniffer/api.c @@ -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) diff --git a/src/hardware/openbench-logic-sniffer/protocol.h b/src/hardware/openbench-logic-sniffer/protocol.h index 96917743..00ed35be 100644 --- a/src/hardware/openbench-logic-sniffer/protocol.h +++ b/src/hardware/openbench-logic-sniffer/protocol.h @@ -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;