]> sigrok.org Git - libsigrok.git/commitdiff
appa-55ii: properly set encoding digits
authorAurelien Jacobs <redacted>
Tue, 16 Aug 2016 22:52:05 +0000 (00:52 +0200)
committerUwe Hermann <redacted>
Tue, 23 Aug 2016 10:36:19 +0000 (12:36 +0200)
src/hardware/appa-55ii/protocol.c

index 790f95273b7ba6c3bd83458916f499aeb34835d6..a7cfd48dd62ca71bebb31eef61e0f60725c9aed4 100644 (file)
@@ -70,7 +70,7 @@ static uint64_t appa_55ii_flags(const uint8_t *buf)
        return flags;
 }
 
-static float appa_55ii_temp(const uint8_t *buf, int ch)
+static float appa_55ii_temp(const uint8_t *buf, int ch, int *digits)
 {
        const uint8_t *ptr;
        int16_t temp;
@@ -79,12 +79,14 @@ static float appa_55ii_temp(const uint8_t *buf, int ch)
        ptr = buf + 4 + 14 + 3 * ch;
        temp = RL16(ptr);
        flags = ptr[2];
+       *digits = 0;
 
        if (flags & 0x60)
                return INFINITY;
-       else if (flags & 1)
+       else if (flags & 1) {
+               *digits = 1;
                return (float)temp / 10;
-       else
+       else
                return (float)temp;
 }
 
@@ -97,34 +99,34 @@ static void appa_55ii_live_data(struct sr_dev_inst *sdi, const uint8_t *buf)
        struct sr_analog_meaning meaning;
        struct sr_analog_spec spec;
        struct sr_channel *ch;
-       float values[APPA_55II_NUM_CHANNELS], *val_ptr;
-       int i;
+       float value;
+       int i, digits;
 
        devc = sdi->priv;
 
        if (devc->data_source != DATA_SOURCE_LIVE)
                return;
 
-       val_ptr = values;
-       sr_analog_init(&analog, &encoding, &meaning, &spec, 0);
-       analog.num_samples = 1;
-       analog.meaning->mq = SR_MQ_TEMPERATURE;
-       analog.meaning->unit = SR_UNIT_CELSIUS;
-       analog.meaning->mqflags = appa_55ii_flags(buf);
-       analog.data = values;
-
        for (i = 0; i < APPA_55II_NUM_CHANNELS; i++) {
                ch = g_slist_nth_data(sdi->channels, i);
                if (!ch->enabled)
                        continue;
-               analog.meaning->channels = g_slist_append(analog.meaning->channels, ch);
-               *val_ptr++ = appa_55ii_temp(buf, i);
-       }
 
-       packet.type = SR_DF_ANALOG;
-       packet.payload = &analog;
-       sr_session_send(sdi, &packet);
-       g_slist_free(analog.meaning->channels);
+               value = appa_55ii_temp(buf, i, &digits);
+
+               sr_analog_init(&analog, &encoding, &meaning, &spec, digits);
+               analog.num_samples = 1;
+               analog.data = &value;
+               analog.meaning->mq = SR_MQ_TEMPERATURE;
+               analog.meaning->unit = SR_UNIT_CELSIUS;
+               analog.meaning->mqflags = appa_55ii_flags(buf);
+               analog.meaning->channels = g_slist_append(NULL, ch);
+
+               packet.type = SR_DF_ANALOG;
+               packet.payload = &analog;
+               sr_session_send(sdi, &packet);
+               g_slist_free(analog.meaning->channels);
+       }
 
        sr_sw_limits_update_samples_read(&devc->limits, 1);
 }