From 19ee7dff78f7195bfc82f14ef659751cdd0f6476 Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Mon, 12 Nov 2012 03:00:32 +0100 Subject: [PATCH] tondaj-sl-814: use new serial API --- hardware/tondaj-sl-814/api.c | 51 ++++++++----------------------- hardware/tondaj-sl-814/protocol.c | 8 ++--- hardware/tondaj-sl-814/protocol.h | 2 -- 3 files changed, 17 insertions(+), 44 deletions(-) diff --git a/hardware/tondaj-sl-814/api.c b/hardware/tondaj-sl-814/api.c index 2247e75a..c1d8abf8 100644 --- a/hardware/tondaj-sl-814/api.c +++ b/hardware/tondaj-sl-814/api.c @@ -24,6 +24,8 @@ #include "libsigrok-internal.h" #include "protocol.h" +#define SERIALCOMM "9600/8e1" + static const int hwopts[] = { SR_HWOPT_CONN, SR_HWOPT_SERIALCOMM, @@ -121,6 +123,8 @@ static GSList *hw_scan(GSList *options) sr_dbg("Couldn't determine connection options."); return NULL; } + if (!serialcomm) + serialcomm = SERIALCOMM; if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "Tondaj", "SL-814", NULL))) { @@ -133,14 +137,12 @@ static GSList *hw_scan(GSList *options) return NULL; } - if (!serialcomm) - serialcomm = "9600/8e1"; - - if (!(devc->serial = sr_serial_dev_inst_new(conn, -1))) { - sr_err("Failed to create serial device instance."); + if (!(devc->serial = sr_serial_dev_inst_new(conn, serialcomm))) return NULL; - } - devc->serialcomm = g_strdup(serialcomm); + + if (serial_open(devc->serial, O_RDWR|O_NONBLOCK) != SR_OK) + return NULL; + sdi->priv = devc; sdi->driver = di; probe = sr_probe_new(0, SR_PROBE_ANALOG, TRUE, probe_names[0]); @@ -166,25 +168,12 @@ static GSList *hw_dev_list(void) static int hw_dev_open(struct sr_dev_inst *sdi) { - int ret; struct dev_context *devc; devc = sdi->priv; - sr_dbg("Opening '%s' with '%s'.", devc->serial->port, devc->serialcomm); - - ret = serial_open(devc->serial->port, O_RDWR | O_NONBLOCK); - if (ret < 0) { - sr_err("Unable to open serial port: %d.", ret); + if (serial_open(devc->serial, O_RDWR|O_NONBLOCK) != SR_OK) return SR_ERR; - } - devc->serial->fd = ret; - - ret = serial_set_paramstr(devc->serial->fd, devc->serialcomm); - if (ret < 0) { - sr_err("Unable to set serial parameters: %d.", ret); - return SR_ERR; - } sdi->status = SR_ST_ACTIVE; @@ -193,29 +182,15 @@ static int hw_dev_open(struct sr_dev_inst *sdi) static int hw_dev_close(struct sr_dev_inst *sdi) { - int ret; struct dev_context *devc; devc = sdi->priv; - if (!devc->serial) { - sr_err("Invalid serial device instance, cannot close."); - return SR_ERR_BUG; + if (devc->serial && devc->serial->fd != -1) { + serial_close(devc->serial); + sdi->status = SR_ST_INACTIVE; } - if (devc->serial->fd == -1) { - sr_dbg("Serial device instance FD was -1, no need to close."); - return SR_OK; - } - - if ((ret = serial_close(devc->serial->fd)) < 0) { - sr_err("Error closing serial port: %d.", ret); - return SR_ERR; - } - - devc->serial->fd = -1; - sdi->status = SR_ST_INACTIVE; - return SR_OK; } diff --git a/hardware/tondaj-sl-814/protocol.c b/hardware/tondaj-sl-814/protocol.c index c164289c..2830905c 100644 --- a/hardware/tondaj-sl-814/protocol.c +++ b/hardware/tondaj-sl-814/protocol.c @@ -127,14 +127,14 @@ int tondaj_sl_814_receive_data(int fd, int revents, void *cb_data) buf[2] = 0x0d; sr_spew("Sending init command: %02x %02x %02x.", buf[0], buf[1], buf[2]); - if ((ret = serial_write(fd, buf, 3)) < 0) { + if ((ret = serial_write(devc->serial, buf, 3)) < 0) { sr_err("Error sending init command: %d.", ret); return FALSE; } devc->state = GET_INIT_REPLY; } else if (devc->state == GET_INIT_REPLY) { /* If we just sent the "init" command, get its reply. */ - if ((ret = serial_read(fd, buf, 2)) < 0) { + if ((ret = serial_read(devc->serial, buf, 2)) < 0) { sr_err("Error reading init reply: %d.", ret); return FALSE; } @@ -153,7 +153,7 @@ int tondaj_sl_814_receive_data(int fd, int revents, void *cb_data) buf[2] = 0x0d; sr_spew("Sending data request command: %02x %02x %02x.", buf[0], buf[1], buf[2]); - if ((ret = serial_write(fd, buf, 3)) < 0) { + if ((ret = serial_write(devc->serial, buf, 3)) < 0) { sr_err("Error sending request command: %d.", ret); return FALSE; } @@ -161,7 +161,7 @@ int tondaj_sl_814_receive_data(int fd, int revents, void *cb_data) devc->state = GET_PACKET; } else if (devc->state == GET_PACKET) { /* Read a packet from the device. */ - ret = serial_read(fd, devc->buf + devc->buflen, + ret = serial_read(devc->serial, devc->buf + devc->buflen, 4 - devc->buflen); if (ret < 0) { sr_err("Error reading packet: %d.", ret); diff --git a/hardware/tondaj-sl-814/protocol.h b/hardware/tondaj-sl-814/protocol.h index 69b7c68f..2ab69b65 100644 --- a/hardware/tondaj-sl-814/protocol.h +++ b/hardware/tondaj-sl-814/protocol.h @@ -50,8 +50,6 @@ struct dev_context { struct sr_serial_dev_inst *serial; - char *serialcomm; - int state; uint8_t buf[4];