]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/testo/protocol.c
Mark some arrays as const
[libsigrok.git] / src / hardware / testo / protocol.c
index b043eecf7ed59ac98d42191aa08ae323f07f5208..92bb286e1c1ca71d7dab29766918118e2369e4a6 100644 (file)
@@ -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);
        }
 }