- if (devc->reply_size >= 7) {
- packet_size = 7 + devc->reply[6] * 7 + 2;
- if (devc->reply_size >= packet_size) {
- testo_receive_packet(sdi);
- devc->num_samples++;
- devc->reply_size = 0;
- if (devc->limit_samples && devc->num_samples >= devc->limit_samples)
- dev_acquisition_stop(sdi, devc->cb_data);
- else
- testo_request_packet(sdi);
- }
+ if (devc->reply_size < 7)
+ return;
+
+ packet_size = 7 + devc->reply[6] * 7 + 2;
+ if (devc->reply_size < packet_size)
+ return;
+
+ if (!testo_check_packet_prefix(devc->reply, devc->reply_size))
+ return;
+
+ crc = crc16_mcrf4xx(0xffff, devc->reply, devc->reply_size - 2);
+ if (crc == RL16(&devc->reply[devc->reply_size - 2])) {
+ testo_receive_packet(sdi);
+ devc->num_samples++;
+ } else {
+ sr_dbg("Packet has invalid CRC.");