X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fopenbench-logic-sniffer%2Fprotocol.c;h=e6adae0ac42dd68360bec7d6767143b3e11886aa;hb=2142a79b53e7fb2d9d050c382b624820601c1bd6;hp=0a9a34a204e6bcb9e13ebc9586cd9b52e57e575b;hpb=4a34a74d738136906200a76980b00881255f3007;p=libsigrok.git diff --git a/src/hardware/openbench-logic-sniffer/protocol.c b/src/hardware/openbench-logic-sniffer/protocol.c index 0a9a34a2..e6adae0a 100644 --- a/src/hardware/openbench-logic-sniffer/protocol.c +++ b/src/hardware/openbench-logic-sniffer/protocol.c @@ -148,11 +148,36 @@ SR_PRIV struct dev_context *ols_dev_new(void) 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 metadata_quirks(struct sr_dev_inst *sdi) +{ + struct dev_context *devc; + gboolean is_shrimp; + + if (!sdi) + return; + devc = sdi->priv; + if (!devc) + return; + + is_shrimp = sdi->model && strcmp(sdi->model, "Shrimp1.0") == 0; + if (is_shrimp) { + if (!devc->max_channels) + ols_channel_new(sdi, 4); + if (!devc->max_samples) + devc->max_samples = 256 * 1024; + if (!devc->max_samplerate) + devc->max_samplerate = SR_MHZ(20); + } } SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial) @@ -287,6 +312,9 @@ SR_PRIV struct sr_dev_inst *get_metadata(struct sr_serial_dev_inst *serial) g_string_free(devname, FALSE); g_string_free(version, FALSE); + /* Optionally amend received metadata, model specific quirks. */ + metadata_quirks(sdi); + return sdi; } @@ -303,13 +331,11 @@ SR_PRIV int ols_set_samplerate(const struct sr_dev_inst *sdi, sr_info("Enabling demux mode."); devc->flag_reg |= FLAG_DEMUX; devc->flag_reg &= ~FLAG_FILTER; - devc->max_channels = NUM_CHANNELS / 2; devc->cur_samplerate_divider = (CLOCK_RATE * 2 / samplerate) - 1; } else { sr_info("Disabling demux mode."); devc->flag_reg &= ~FLAG_DEMUX; devc->flag_reg |= FLAG_FILTER; - devc->max_channels = NUM_CHANNELS; devc->cur_samplerate_divider = (CLOCK_RATE / samplerate) - 1; }