]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/center-3xx/protocol.c
center-3xx: Fix incorrect values due to endianness issue.
[libsigrok.git] / src / hardware / center-3xx / protocol.c
index 2a02b68e50c6890e3602cec85cb0943bf6f9a2b7..35fe15538642ee71fa43372d92ca0f07d11bf2ed 100644 (file)
@@ -64,7 +64,7 @@ static void log_packet(const uint8_t *buf, int idx)
 static int packet_parse(const uint8_t *buf, int idx, struct center_info *info)
 {
        int i;
-       uint16_t temp_u16;
+       int16_t temp_i16;
 
        log_packet(buf, idx);
 
@@ -89,9 +89,8 @@ static int packet_parse(const uint8_t *buf, int idx, struct center_info *info)
 
        /* Byte 7+8/9+10/11+12/13+14: channel T1/T2/T3/T4 temperature. */
        for (i = 0; i < NUM_CHANNELS; i++) {
-               temp_u16 = buf[8 + (i * 2)];
-               temp_u16 |= ((uint16_t)buf[7 + (i * 2)] << 8);
-               info->temp[i] = (float)temp_u16;
+               temp_i16 = RB16S(&buf[7 + 2 * i]);
+               info->temp[i] = (float)temp_i16;
        }
 
        /* Byte 43: Specifies whether we need to divide the value(s) by 10. */
@@ -177,7 +176,7 @@ static gboolean handle_new_data(struct sr_dev_inst *sdi, int idx)
 {
        struct dev_context *devc;
        struct sr_serial_dev_inst *serial;
-       int len, i, offset = 0, ret = FALSE;
+       int len, offset, ret = FALSE;
 
        devc = sdi->priv;
        serial = sdi->conn;
@@ -193,6 +192,7 @@ static gboolean handle_new_data(struct sr_dev_inst *sdi, int idx)
        devc->buflen += len;
 
        /* Now look for packets in that data. */
+       offset = 0;
        while ((devc->buflen - offset) >= center_devs[idx].packet_size) {
                if (center_devs[idx].packet_valid(devc->buf + offset)) {
                        handle_packet(devc->buf + offset, sdi, idx);
@@ -204,8 +204,8 @@ static gboolean handle_new_data(struct sr_dev_inst *sdi, int idx)
        }
 
        /* If we have any data left, move it to the beginning of our buffer. */
-       for (i = 0; i < devc->buflen - offset; i++)
-               devc->buf[i] = devc->buf[offset + i];
+       if (offset < devc->buflen)
+               memmove(devc->buf, devc->buf + offset, devc->buflen - offset);
        devc->buflen -= offset;
 
        return ret;