const char *conn, *serialcomm;
char buf[4] = { 0, 0, 0, 0 };
struct dev_context *devc;
+ size_t ch_max;
conn = serialcomm = NULL;
for (l = options; l; l = l->next) {
/*
* Definitely using the OLS protocol, check if it supports
- * the metadata command.
+ * the metadata command. Otherwise assign generic values.
+ * Create as many sigrok channels as was determined when
+ * the device was probed.
*/
send_shortcommand(serial, CMD_METADATA);
g_usleep(RESPONSE_DELAY_US);
/* Got metadata. */
(void)ols_get_metadata(sdi);
} else {
- /* Not an OLS -- some other board that uses the sump protocol. */
+ /* Not an OLS -- some other board using the SUMP protocol. */
sr_info("Device does not support metadata.");
sdi->vendor = g_strdup("Sump");
sdi->model = g_strdup("Logic Analyzer");
sdi->version = g_strdup("v1.0");
- for (i = 0; i < ARRAY_SIZE(ols_channel_names); i++)
- sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
- ols_channel_names[i]);
+ devc->max_channels = ARRAY_SIZE(ols_channel_names);
+ }
+ 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]);
}
/* Configure samplerate and divider. */
if (ols_set_samplerate(sdi, DEFAULT_SAMPLERATE) != SR_OK)
return SR_OK;
}
-static void ols_channel_new(struct sr_dev_inst *sdi, int num_chan)
-{
- struct dev_context *devc = sdi->priv;
- int i;
-
- for (i = 0; i < num_chan; i++)
- sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE,
- ols_channel_names[i]);
-
- devc->max_channels = num_chan;
-}
-
static void ols_metadata_quirks(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
is_shrimp = sdi->model && strcmp(sdi->model, "Shrimp1.0") == 0;
if (is_shrimp) {
if (!devc->max_channels)
- ols_channel_new(sdi, 4);
+ devc->max_channels = 4;
if (!devc->max_samples)
devc->max_samples = 256 * 1024;
if (!devc->max_samplerate)
switch (key) {
case METADATA_TOKEN_NUM_PROBES_LONG:
/* Number of usable channels */
- ols_channel_new(sdi, tmp_int);
+ devc->max_channels = tmp_int;
break;
case METADATA_TOKEN_SAMPLE_MEMORY_BYTES:
/* Amount of sample memory available (bytes) */
switch (key) {
case METADATA_TOKEN_NUM_PROBES_SHORT:
/* Number of usable channels */
- ols_channel_new(sdi, tmp_c);
+ devc->max_channels = tmp_c;
break;
case METADATA_TOKEN_PROTOCOL_VERSION_SHORT:
/* protocol version */