X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fopenbench-logic-sniffer%2Fprotocol.c;h=1caf7c1a8ca0c5681c14a1fb14ee407e4a1a6b7c;hb=f51acd69d74b007281f6016e466d026d61a375f3;hp=6082fb3e41adcdcf29429a2f2b905f62e060b5fd;hpb=7b0a57fd1c1d1b658864b81df2357849ccc4715c;p=libsigrok.git diff --git a/hardware/openbench-logic-sniffer/protocol.c b/hardware/openbench-logic-sniffer/protocol.c index 6082fb3e..1caf7c1a 100644 --- a/hardware/openbench-logic-sniffer/protocol.c +++ b/hardware/openbench-logic-sniffer/protocol.c @@ -341,7 +341,7 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) GSList *l; uint32_t sample; int num_channels, offset, j; - unsigned int i; + unsigned int i, max_channels; unsigned char byte; drvc = di->priv; @@ -379,9 +379,16 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) } num_channels = 0; - for (i = 0x20; i > 0x02; i /= 2) { - if ((devc->flag_reg & i) == 0) + max_channels = NUM_PROBES / (devc->flag_reg & FLAG_DEMUX ? 2 : 1); + + for (i = NUM_PROBES; i > 0x02; i /= 2) { + if ((devc->flag_reg & i) == 0) { + if (i >= max_channels) { + sr_err("Channels over the limit of %d\n", max_channels); + return FALSE; + } num_channels++; + } } if (revents == G_IO_IN && devc->num_samples < devc->limit_samples) { @@ -442,6 +449,9 @@ SR_PRIV int ols_receive_data(int fd, int revents, void *cb_data) * sample. */ devc->tmp_sample[i] = devc->sample[j++]; + } else if (devc->flag_reg & FLAG_DEMUX && (i > 2)) { + /* group 3 & 4 get added to 1 & 2 */ + devc->tmp_sample[i - 2] = devc->sample[j++]; } } memcpy(devc->sample, devc->tmp_sample, 4);