Have remaining drivers default to digits=2 for analog values.

The default so far was 0, which meant there would be no significant
digits at all, yielding results that looked strange/wrong to the user.

Long-term all remaining drivers should be fixed to use the actual,
correct digits and spec_digits values according to the device's
capabilities and/or datasheet/manual. Until that is done, a default
of digits=2 is used as a temporary workaround.

This fixes the remaining parts of bug #815.
This commit is contained in:
Uwe Hermann 2016-08-28 23:52:48 +02:00
parent 869c837511
commit 7dcaddd3f0
8 changed files with 22 additions and 11 deletions

View File

@ -32,7 +32,8 @@ static void handle_packet(const uint8_t *buf, struct sr_dev_inst *sdi)
devc = sdi->priv; devc = sdi->priv;
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.num_samples = 1; analog.num_samples = 1;
analog.meaning->mq = 0; analog.meaning->mq = 0;

View File

@ -63,7 +63,8 @@ static struct sr_datafeed_analog *handle_qm_18x(const struct sr_dev_inst *sdi,
e++; e++;
analog = g_malloc0(sizeof(struct sr_datafeed_analog)); analog = g_malloc0(sizeof(struct sr_datafeed_analog));
sr_analog_init(analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(analog, &encoding, &meaning, &spec, 2);
analog->data = g_malloc(sizeof(float)); analog->data = g_malloc(sizeof(float));
analog->meaning->channels = sdi->channels; analog->meaning->channels = sdi->channels;
analog->num_samples = 1; analog->num_samples = 1;
@ -176,7 +177,8 @@ static struct sr_datafeed_analog *handle_qm_28x(const struct sr_dev_inst *sdi,
} }
analog = g_malloc0(sizeof(struct sr_datafeed_analog)); analog = g_malloc0(sizeof(struct sr_datafeed_analog));
sr_analog_init(analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(analog, &encoding, &meaning, &spec, 2);
analog->data = g_malloc(sizeof(float)); analog->data = g_malloc(sizeof(float));
analog->meaning->channels = sdi->channels; analog->meaning->channels = sdi->channels;
analog->num_samples = 1; analog->num_samples = 1;
@ -401,7 +403,8 @@ static void handle_qm_19x_data(const struct sr_dev_inst *sdi, char **tokens)
fvalue = 1.0; fvalue = 1.0;
} }
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.meaning->channels = sdi->channels; analog.meaning->channels = sdi->channels;
analog.num_samples = 1; analog.num_samples = 1;
analog.data = &fvalue; analog.data = &fvalue;

View File

@ -764,7 +764,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
encoding.is_signed = TRUE; encoding.is_signed = TRUE;
encoding.is_float = TRUE; encoding.is_float = TRUE;
encoding.is_bigendian = FALSE; encoding.is_bigendian = FALSE;
encoding.digits = 0; /* TODO: Use proper 'digits' value for this device (and its modes). */
encoding.digits = 2;
encoding.is_digits_decimal = FALSE; encoding.is_digits_decimal = FALSE;
encoding.scale.p = 1; encoding.scale.p = 1;
encoding.scale.q = 1; encoding.scale.q = 1;
@ -779,7 +780,8 @@ SR_PRIV int hmo_receive_data(int fd, int revents, void *cb_data)
} }
meaning.mqflags = 0; meaning.mqflags = 0;
meaning.channels = g_slist_append(NULL, ch); meaning.channels = g_slist_append(NULL, ch);
spec.spec_digits = 0; /* TODO: Use proper 'digits' value for this device (and its modes). */
spec.spec_digits = 2;
packet.payload = &analog; packet.payload = &analog;
sr_session_send(sdi, &packet); sr_session_send(sdi, &packet);
g_slist_free(meaning.channels); g_slist_free(meaning.channels);

View File

@ -123,7 +123,8 @@ static void nma_process_line(const struct sr_dev_inst *sdi)
/* Start decoding. */ /* Start decoding. */
value = 0.0; value = 0.0;
scale = 1.0; scale = 1.0;
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
/* /*
* The numbers are hex digits, starting from 0. * The numbers are hex digits, starting from 0.

View File

@ -246,7 +246,8 @@ SR_PRIV void testo_receive_packet(const struct sr_dev_inst *sdi)
packet.type = SR_DF_ANALOG; packet.type = SR_DF_ANALOG;
packet.payload = &analog; packet.payload = &analog;
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.num_samples = 1; analog.num_samples = 1;
analog.meaning->mqflags = 0; analog.meaning->mqflags = 0;
analog.data = &value; analog.data = &value;

View File

@ -995,7 +995,8 @@ static int dlm_analog_samples_send(GArray *data,
g_array_append_val(float_data, voltage); g_array_append_val(float_data, voltage);
} }
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.meaning->channels = g_slist_append(NULL, ch); analog.meaning->channels = g_slist_append(NULL, ch);
analog.num_samples = float_data->len; analog.num_samples = float_data->len;
analog.data = (float*)float_data->data; analog.data = (float*)float_data->data;

View File

@ -227,7 +227,8 @@ static void send_chunk(const struct sr_input *in, int offset, int num_samples)
d += inc->unitsize; d += inc->unitsize;
} }
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
packet.type = SR_DF_ANALOG; packet.type = SR_DF_ANALOG;
packet.payload = &analog; packet.payload = &analog;
analog.num_samples = num_samples; analog.num_samples = num_samples;

View File

@ -142,7 +142,8 @@ static gboolean stream_session_data(struct sr_dev_inst *sdi)
if (vdev->cur_analog_channel != 0) { if (vdev->cur_analog_channel != 0) {
packet.type = SR_DF_ANALOG; packet.type = SR_DF_ANALOG;
packet.payload = &analog; packet.payload = &analog;
sr_analog_init(&analog, &encoding, &meaning, &spec, 0); /* TODO: Use proper 'digits' value for this device (and its modes). */
sr_analog_init(&analog, &encoding, &meaning, &spec, 2);
analog.meaning->channels = g_slist_prepend(NULL, analog.meaning->channels = g_slist_prepend(NULL,
g_array_index(vdev->analog_channels, g_array_index(vdev->analog_channels,
struct sr_channel *, vdev->cur_analog_channel - 1)); struct sr_channel *, vdev->cur_analog_channel - 1));