if (!probe->enabled)
continue;
+ if (probe->index >= devc->max_probes) {
+ sr_err("Channels over the limit of %d\n", devc->max_probes);
+ return SR_ERR;
+ }
+
/*
* Set up the probe mask for later configuration into the
* flag register.
return SR_ERR_SAMPLERATE;
if (samplerate > CLOCK_RATE) {
+ sr_info("Enabling demux mode.");
devc->flag_reg |= FLAG_DEMUX;
+ devc->flag_reg &= ~FLAG_FILTER;
+ devc->max_probes = NUM_PROBES / 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_probes = NUM_PROBES;
devc->cur_samplerate_divider = (CLOCK_RATE / samplerate) - 1;
}
}
num_channels = 0;
- for (i = 0x20; i > 0x02; i /= 2) {
- if ((devc->flag_reg & i) == 0)
+
+ for (i = NUM_PROBES; i > 0x02; i /= 2) {
+ if ((devc->flag_reg & i) == 0) {
num_channels++;
+ }
}
if (revents == G_IO_IN && devc->num_samples < devc->limit_samples) {
* sample.
*/
devc->tmp_sample[i] = devc->sample[j++];
+ } else if (devc->flag_reg & FLAG_DEMUX && (i > 2)) {
+ /* group 2 & 3 get added to 0 & 1 */
+ devc->tmp_sample[i - 2] = devc->sample[j++];
}
}
memcpy(devc->sample, devc->tmp_sample, 4);