* Most probably the simplest multimeter protocol ever ;-) .
*/
+#include <config.h>
#include <string.h>
#include <math.h>
#include <glib.h>
-#include "libsigrok.h"
+#include <libsigrok/libsigrok.h>
#include "libsigrok-internal.h"
#define LOG_PREFIX "m2110"
if (!strncmp((const char *)buf, "OVERRNG", 7))
return TRUE;
- if (sscanf((const char *)buf, "%f", &val) == 1)
+ if (sr_atof_ascii((const char *)buf, &val) == SR_OK)
return TRUE;
else
return FALSE;
SR_PRIV int sr_m2110_parse(const uint8_t *buf, float *floatval,
struct sr_datafeed_analog *analog, void *info)
{
+ int dot_pos, digits = 0;
float val;
(void)info;
/* We don't know the unit, so that's the best we can do. */
- analog->mq = SR_MQ_GAIN;
- analog->unit = SR_UNIT_UNITLESS;
- analog->mqflags = 0;
+ analog->meaning->mq = SR_MQ_GAIN;
+ analog->meaning->unit = SR_UNIT_UNITLESS;
+ analog->meaning->mqflags = 0;
if (!strncmp((const char *)buf, "OVERRNG", 7))
*floatval = INFINITY;
- else if (sscanf((const char *)buf, "%f", &val) == 1)
+ else if (sr_atof_ascii((const char *)buf, &val) == SR_OK) {
*floatval = val;
+ dot_pos = strcspn((const char *)buf, ".");
+ if (dot_pos < 7)
+ digits = 6 - dot_pos;
+ }
+
+ analog->encoding->digits = digits;
+ analog->spec->spec_digits = digits;
return SR_OK;
}