X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fappa-55ii%2Fprotocol.c;h=f31b08b806b9199669467d5bec567c9b16c260db;hb=0f96d9bc50555adf662904230e6ef860b0baad12;hp=790f95273b7ba6c3bd83458916f499aeb34835d6;hpb=0417ada03e6dc816472802c8263a1d23d872c618;p=libsigrok.git diff --git a/src/hardware/appa-55ii/protocol.c b/src/hardware/appa-55ii/protocol.c index 790f9527..f31b08b8 100644 --- a/src/hardware/appa-55ii/protocol.c +++ b/src/hardware/appa-55ii/protocol.c @@ -23,11 +23,11 @@ #include "protocol.h" typedef enum { - LIVE_DATA = 0x00, - LOG_METADATA = 0x11, - LOG_DATA = 0x14, - LOG_START = 0x18, - LOG_END = 0x19, + LIVE_DATA = 0x00, + LOG_METADATA = 0x11, + LOG_DATA = 0x14, + LOG_START = 0x18, + LOG_END = 0x19, } packet_type; static gboolean appa_55ii_checksum(const uint8_t *buf) @@ -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); } @@ -161,7 +163,7 @@ static void appa_55ii_log_data_parse(struct sr_dev_inst *sdi) /* FIXME: Timestamp should be sent in the packet. */ sr_dbg("Timestamp: %02d:%02d:%02d", buf[2], buf[3], buf[4]); - sr_analog_init(&analog, &encoding, &meaning, &spec, 0); + sr_analog_init(&analog, &encoding, &meaning, &spec, 1); analog.num_samples = 1; analog.meaning->mq = SR_MQ_TEMPERATURE; analog.meaning->unit = SR_UNIT_CELSIUS; @@ -222,7 +224,7 @@ static void appa_55ii_log_end(struct sr_dev_inst *sdi) if (devc->data_source != DATA_SOURCE_MEMORY) return; - sdi->driver->dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); } static const uint8_t *appa_55ii_parse_data(struct sr_dev_inst *sdi, @@ -307,7 +309,7 @@ SR_PRIV int appa_55ii_receive_data(int fd, int revents, void *cb_data) } if (sr_sw_limits_check(&devc->limits)) { - sdi->driver->dev_acquisition_stop(sdi); + sr_dev_acquisition_stop(sdi); return TRUE; }