X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fbrymen-dmm%2Fparser.c;h=d42ff45ac80549d8b8540168495283d201573b63;hb=cc835205cdc372de86b233afe3d826371a028901;hp=ad2252baff4168ab59de0e120db68e414c7822db;hpb=6ec6c43b4738dbc7091f4a49a4ec80ea6102cb52;p=libsigrok.git diff --git a/src/hardware/brymen-dmm/parser.c b/src/hardware/brymen-dmm/parser.c index ad2252ba..d42ff45a 100644 --- a/src/hardware/brymen-dmm/parser.c +++ b/src/hardware/brymen-dmm/parser.c @@ -79,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_blocking(serial, &cmdout, sizeof(cmdout), 0); + written = serial_write_blocking(serial, &cmdout, sizeof(cmdout), + serial_timeout(serial, sizeof(cmdout))); if (written != sizeof(cmdout)) return SR_ERR; @@ -129,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; } @@ -203,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; @@ -217,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; } /* @@ -264,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 @@ -275,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!");