X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Ftesto%2Fprotocol.c;h=92bb286e1c1ca71d7dab29766918118e2369e4a6;hb=b0e1a1ecc4be698fb2cd48179ee48cf41e8f7f52;hp=b043eecf7ed59ac98d42191aa08ae323f07f5208;hpb=176d18cab10f930c021e605cb3fc33754f8bddce;p=libsigrok.git diff --git a/src/hardware/testo/protocol.c b/src/hardware/testo/protocol.c index b043eecf..92bb286e 100644 --- a/src/hardware/testo/protocol.c +++ b/src/hardware/testo/protocol.c @@ -170,8 +170,8 @@ SR_PRIV int testo_request_packet(const struct sr_dev_inst *sdi) * Testo 175/177/400/650/950/435/635/735/445/645/945/946/545. */ SR_PRIV gboolean testo_check_packet_prefix(unsigned char *buf, int len) { + static const unsigned char check[] = { 0x21, 0, 0, 0, 1 }; int i; - unsigned char check[] = { 0x21, 0, 0, 0, 1 }; if (len < 5) return FALSE; @@ -222,7 +222,10 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi) { struct dev_context *devc; struct sr_datafeed_packet packet; - struct sr_datafeed_analog_old analog; + struct sr_datafeed_analog analog; + struct sr_analog_encoding encoding; + struct sr_analog_meaning meaning; + struct sr_analog_spec spec; struct sr_channel *ch; GString *dbg; float value; @@ -241,10 +244,12 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi) g_string_free(dbg, TRUE); } - packet.type = SR_DF_ANALOG_OLD; + packet.type = SR_DF_ANALOG; packet.payload = &analog; + /* TODO: Use proper 'digits' value for this device (and its modes). */ + sr_analog_init(&analog, &encoding, &meaning, &spec, 2); analog.num_samples = 1; - analog.mqflags = 0; + analog.meaning->mqflags = 0; analog.data = &value; /* Decode 7-byte values */ for (i = 0; i < devc->reply[6]; i++) { @@ -252,20 +257,20 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi) value = binary32_le_to_float(buf); switch (buf[4]) { case 1: - analog.mq = SR_MQ_TEMPERATURE; - analog.unit = SR_UNIT_CELSIUS; + analog.meaning->mq = SR_MQ_TEMPERATURE; + analog.meaning->unit = SR_UNIT_CELSIUS; break; case 3: - analog.mq = SR_MQ_RELATIVE_HUMIDITY; - analog.unit = SR_UNIT_HUMIDITY_293K; + analog.meaning->mq = SR_MQ_RELATIVE_HUMIDITY; + analog.meaning->unit = SR_UNIT_HUMIDITY_293K; break; case 5: - analog.mq = SR_MQ_WIND_SPEED; - analog.unit = SR_UNIT_METER_SECOND; + analog.meaning->mq = SR_MQ_WIND_SPEED; + analog.meaning->unit = SR_UNIT_METER_SECOND; break; case 24: - analog.mq = SR_MQ_PRESSURE; - analog.unit = SR_UNIT_HECTOPASCAL; + analog.meaning->mq = SR_MQ_PRESSURE; + analog.meaning->unit = SR_UNIT_HECTOPASCAL; break; default: sr_dbg("Unsupported measurement unit %d.", buf[4]); @@ -283,8 +288,8 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi) return; } ch = g_slist_nth_data(sdi->channels, i); - analog.channels = g_slist_append(NULL, ch); + analog.meaning->channels = g_slist_append(NULL, ch); sr_session_send(sdi, &packet); - g_slist_free(analog.channels); + g_slist_free(analog.meaning->channels); } }