#include <glib.h>
#include "libsigrok.h"
#include "libsigrok-internal.h"
-#include "config.h"
#include "radioshack-dmm.h"
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <errno.h>
-
static gboolean rs_22_812_is_checksum_valid(const rs_22_812_packet *data)
{
uint8_t *raw = (void *) data;
return((rs_packet->digit2 & ~RS_22_812_DP_MASK) == RS_22_812_LCD_h);
}
+static gboolean rs_22_812_is_logic_high(rs_22_812_packet *rs_packet)
+{
+ sr_spew("digit 2: %x", rs_packet->digit2 & ~RS_22_812_DP_MASK);
+ return((rs_packet->digit2 & ~RS_22_812_DP_MASK) == RS_22_812_LCD_H);
+}
+
static void rs_22_812_handle_packet(rs_22_812_packet *rs_packet,
rs_dev_ctx *devc)
{
struct sr_datafeed_packet packet;
struct sr_datafeed_analog *analog;
+ /* TODO: Check malloc return value. */
analog = g_try_malloc0(sizeof(struct sr_datafeed_analog));
analog->num_samples = 1;
+ /* TODO: Check malloc return value. */
analog->data = g_try_malloc(sizeof(float));
*analog->data = (float)rawval;
analog->mq = -1;
analog->unit = SR_UNIT_HERTZ;
break;
case RS_22_812_MODE_LOGIC:
- analog->mq = 0; /* FIXME */
- analog->unit = SR_UNIT_BOOLEAN;
- sr_warn("radioshack-dmm: LOGIC mode not supported yet");
- g_free(analog->data);
- g_free(analog);
- return;
+ /* No matter whether or not we have an actual voltage reading,
+ * we are measuring voltage, so we set our MQ as VOLTAGE */
+ analog->mq = SR_MQ_VOLTAGE;
+ if(!isnan(rawval)) {
+ /* We have an actual voltage */
+ analog->unit = SR_UNIT_VOLT;
+ } else {
+ /* We have either HI or LOW */
+ analog->unit = SR_UNIT_BOOLEAN;
+ *analog->data = rs_22_812_is_logic_high(rs_packet);
+ }
break;
case RS_22_812_MODE_HFE:
analog->mq = SR_MQ_GAIN;
analog->mqflags |= SR_MQFLAG_AC;
break;
default:
- sr_warn("radioshack-dmm: unkown mode: %d", rs_packet->mode);
+ sr_warn("Unknown mode: %d.", rs_packet->mode);
break;
}
if (analog->mq != -1) {
/* Got a measurement. */
- sr_spew("radioshack-dmm: val %f", rawval);
+ sr_spew("Value: %f.", rawval);
packet.type = SR_DF_ANALOG;
packet.payload = analog;
sr_session_send(devc->cb_data, &packet);
len = RS_DMM_BUFSIZE - devc->buflen;
len = serial_read(fd, devc->buf + devc->buflen, len);
if (len < 1) {
- sr_err("radioshack-dmm: serial port read error!");
+ sr_err("Serial port read error!");
return;
}
devc->buflen += len;
SR_PRIV int radioshack_receive_data(int fd, int revents, void *cb_data)
{
- const struct sr_dev_inst *sdi;
+ struct sr_dev_inst *sdi;
struct dev_context *devc;
if (!(sdi = cb_data))
return TRUE;
}
-