- if (buf[0] != 0xf0) {
- /* First time: Synchronize to the start of a packet. */
- if (!synced_on_first_packet) {
- if (!udmms[dmm].packet_valid(buf))
- return TRUE;
- synced_on_first_packet = TRUE;
- sr_spew("Successfully synchronized on first packet.");
+ /* If there are no data bytes just return (without error). */
+ if (buf[0] == 0xf0)
+ return SR_OK;
+
+ devc->bufoffset = 0;
+
+ /* Append the 1-7 data bytes of this chunk to pbuf. */
+ num_databytes_in_chunk = buf[0] & 0x0f;
+ for (i = 0; i < num_databytes_in_chunk; i++)
+ pbuf[devc->buflen++] = buf[1 + i];
+
+ /* Now look for packets in that data. */
+ while ((devc->buflen - devc->bufoffset) >= udmms[dmm].packet_size) {
+ if (udmms[dmm].packet_valid(pbuf + devc->bufoffset)) {
+ log_dmm_packet(pbuf + devc->bufoffset);
+ decode_packet(sdi, dmm, pbuf + devc->bufoffset, info);
+ devc->bufoffset += udmms[dmm].packet_size;
+ } else {
+ devc->bufoffset++;