+ packet.type = SR_DF_ANALOG;
+ packet.payload = &analog;
+ analog.mqflags = 0;
+ if (!(temp = g_try_malloc(sizeof(float) * samples)))
+ break;
+ if (!(rh = g_try_malloc(sizeof(float) * samples)))
+ break;
+ for (i = 0, j = 0; i < samples; i++) {
+ /* Both Celcius and Fahrenheit stored at base -40. */
+ if (devc->temp_unit == 0)
+ /* Celcius is stored in half-degree increments. */
+ temp[j] = buf[i * 2] / 2 - 40;
+ else
+ temp[j] = buf[i * 2] - 40;
+
+ rh[j] = buf[i * 2 + 1] / 2;
+
+ if (temp[j] == 0.0 && rh[j] == 0.0)
+ /* Skip invalid measurement. */
+ continue;
+ j++;
+ }
+ analog.num_samples = j;
+
+ analog.mq = SR_MQ_TEMPERATURE;
+ if (devc->temp_unit == 1)
+ analog.unit = SR_UNIT_FAHRENHEIT;
+ else
+ analog.unit = SR_UNIT_CELSIUS;
+ analog.data = temp;
+ sr_session_send(devc->cb_data, &packet);
+
+ analog.mq = SR_MQ_RELATIVE_HUMIDITY;
+ analog.unit = SR_UNIT_PERCENTAGE;
+ analog.data = rh;
+ sr_session_send(devc->cb_data, &packet);
+ g_free(temp);
+ g_free(rh);