X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fbrymen-dmm%2Fparser.c;h=d42ff45ac80549d8b8540168495283d201573b63;hb=4fff7b3c8a84a5593ddf780992355d9ebf434a90;hp=e4b12274d41d862b3f08c6b85182545a300e39d5;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git
diff --git a/src/hardware/brymen-dmm/parser.c b/src/hardware/brymen-dmm/parser.c
index e4b12274..d42ff45a 100644
--- a/src/hardware/brymen-dmm/parser.c
+++ b/src/hardware/brymen-dmm/parser.c
@@ -17,6 +17,7 @@
* along with this program. If not, see .
*/
+#include
#include "protocol.h"
#define MAX_PACKET_LEN 22
@@ -78,7 +79,8 @@ static int bm_send_command(uint8_t command, uint8_t arg1, uint8_t arg2,
/* TODO: How to compute the checksum? Hardware seems to ignore it. */
/* Request reading. */
- written = serial_write(serial, &cmdout, sizeof(cmdout));
+ written = serial_write_blocking(serial, &cmdout, sizeof(cmdout),
+ serial_timeout(serial, sizeof(cmdout)));
if (written != sizeof(cmdout))
return SR_ERR;
@@ -128,21 +130,21 @@ SR_PRIV gboolean brymen_packet_is_valid(const uint8_t *buf)
int i;
uint8_t chksum = 0;
uint8_t *payload;
-
+
payload = (uint8_t *)(buf + sizeof(struct brymen_header));
hdr = (void *)buf;
tail = (void *)(payload + hdr->len);
-
+
for (i = 0; i< hdr->len; i++)
chksum ^= payload[i];
-
+
if (tail->checksum != chksum) {
sr_dbg("Packet has invalid checksum 0x%.2x. Expected 0x%.2x.",
chksum, tail->checksum);
return FALSE;
}
-
+
return TRUE;
}
@@ -202,7 +204,7 @@ SR_PRIV int brymen_parse(const uint8_t *buf, float *floatval,
hdr = (void *)buf;
bfunc = (uint8_t *)(buf + sizeof(struct brymen_header));
- analog->mqflags = 0;
+ analog->meaning->mqflags = 0;
/* Give some debug info about the package. */
asciilen = hdr->len - 4;
@@ -216,43 +218,43 @@ SR_PRIV int brymen_parse(const uint8_t *buf, float *floatval,
return SR_ERR;
if (flags.is_volt) {
- analog->mq = SR_MQ_VOLTAGE;
- analog->unit = SR_UNIT_VOLT;
+ analog->meaning->mq = SR_MQ_VOLTAGE;
+ analog->meaning->unit = SR_UNIT_VOLT;
}
if (flags.is_amp) {
- analog->mq = SR_MQ_CURRENT;
- analog->unit = SR_UNIT_AMPERE;
+ analog->meaning->mq = SR_MQ_CURRENT;
+ analog->meaning->unit = SR_UNIT_AMPERE;
}
if (flags.is_ohm) {
if (flags.is_beep)
- analog->mq = SR_MQ_CONTINUITY;
+ analog->meaning->mq = SR_MQ_CONTINUITY;
else
- analog->mq = SR_MQ_RESISTANCE;
- analog->unit = SR_UNIT_OHM;
+ analog->meaning->mq = SR_MQ_RESISTANCE;
+ analog->meaning->unit = SR_UNIT_OHM;
}
if (flags.is_hertz) {
- analog->mq = SR_MQ_FREQUENCY;
- analog->unit = SR_UNIT_HERTZ;
+ analog->meaning->mq = SR_MQ_FREQUENCY;
+ analog->meaning->unit = SR_UNIT_HERTZ;
}
if (flags.is_duty_cycle) {
- analog->mq = SR_MQ_DUTY_CYCLE;
- analog->unit = SR_UNIT_PERCENTAGE;
+ analog->meaning->mq = SR_MQ_DUTY_CYCLE;
+ analog->meaning->unit = SR_UNIT_PERCENTAGE;
}
if (flags.is_capacitance) {
- analog->mq = SR_MQ_CAPACITANCE;
- analog->unit = SR_UNIT_FARAD;
+ analog->meaning->mq = SR_MQ_CAPACITANCE;
+ analog->meaning->unit = SR_UNIT_FARAD;
}
if (flags.is_fahrenheit) {
- analog->mq = SR_MQ_TEMPERATURE;
- analog->unit = SR_UNIT_FAHRENHEIT;
+ analog->meaning->mq = SR_MQ_TEMPERATURE;
+ analog->meaning->unit = SR_UNIT_FAHRENHEIT;
}
if (flags.is_celsius) {
- analog->mq = SR_MQ_TEMPERATURE;
- analog->unit = SR_UNIT_CELSIUS;
+ analog->meaning->mq = SR_MQ_TEMPERATURE;
+ analog->meaning->unit = SR_UNIT_CELSIUS;
}
if (flags.is_capacitance) {
- analog->mq = SR_MQ_CAPACITANCE;
- analog->unit = SR_UNIT_FARAD;
+ analog->meaning->mq = SR_MQ_CAPACITANCE;
+ analog->meaning->unit = SR_UNIT_FARAD;
}
/*
@@ -263,8 +265,8 @@ SR_PRIV int brymen_parse(const uint8_t *buf, float *floatval,
* identify the value as ohm, not dBmW.
*/
if (flags.is_decibel && !flags.is_ohm) {
- analog->mq = SR_MQ_POWER;
- analog->unit = SR_UNIT_DECIBEL_MW;
+ analog->meaning->mq = SR_MQ_POWER;
+ analog->meaning->unit = SR_UNIT_DECIBEL_MW;
/*
* For some reason, dBm measurements are sent by the multimeter
* with a value three orders of magnitude smaller than the
@@ -274,12 +276,12 @@ SR_PRIV int brymen_parse(const uint8_t *buf, float *floatval,
}
if (flags.is_diode)
- analog->mqflags |= SR_MQFLAG_DIODE;
+ analog->meaning->mqflags |= SR_MQFLAG_DIODE | SR_MQFLAG_DC;
/* We can have both AC+DC in a single measurement. */
if (flags.is_ac)
- analog->mqflags |= SR_MQFLAG_AC;
+ analog->meaning->mqflags |= SR_MQFLAG_AC;
if (flags.is_dc)
- analog->mqflags |= SR_MQFLAG_DC;
+ analog->meaning->mqflags |= SR_MQFLAG_DC;
if (flags.is_low_batt)
sr_info("Low battery!");