X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ftondaj-sl-814%2Fapi.c;h=5c72c6a29221a8424f6a5f5814c62bf440cb3360;hb=cbc8cbd8bbd664043c349133818e0ab41422c751;hp=2247e75a4dec483b2b59b91da0eb3dff7acfa66f;hpb=c073af80f89d8bce8675068d084c96e0cf37bb4f;p=libsigrok.git diff --git a/hardware/tondaj-sl-814/api.c b/hardware/tondaj-sl-814/api.c index 2247e75a..5c72c6a2 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, @@ -71,7 +73,7 @@ static int clear_instances(void) return SR_OK; } -static int hw_init(void) +static int hw_init(struct sr_context *sr_ctx) { struct drv_context *drvc; @@ -80,6 +82,7 @@ static int hw_init(void) return SR_ERR_MALLOC; } + drvc->sr_ctx = sr_ctx; di->priv = drvc; return SR_OK; @@ -117,10 +120,10 @@ static GSList *hw_scan(GSList *options) break; } } - if (!conn) { - sr_dbg("Couldn't determine connection options."); + if (!conn) return NULL; - } + if (!serialcomm) + serialcomm = SERIALCOMM; if (!(sdi = sr_dev_inst_new(0, SR_ST_INACTIVE, "Tondaj", "SL-814", NULL))) { @@ -133,14 +136,12 @@ static GSList *hw_scan(GSList *options) return NULL; } - if (!serialcomm) - serialcomm = "9600/8e1"; + if (!(devc->serial = sr_serial_dev_inst_new(conn, serialcomm))) + return NULL; - if (!(devc->serial = sr_serial_dev_inst_new(conn, -1))) { - sr_err("Failed to create serial device instance."); + if (serial_open(devc->serial, SERIAL_RDWR | SERIAL_NONBLOCK) != SR_OK) return NULL; - } - devc->serialcomm = g_strdup(serialcomm); + sdi->priv = devc; sdi->driver = di; probe = sr_probe_new(0, SR_PROBE_ANALOG, TRUE, probe_names[0]); @@ -166,25 +167,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, SERIAL_RDWR | SERIAL_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 +181,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->fd == -1) { - sr_dbg("Serial device instance FD was -1, no need to close."); - return SR_OK; + if (devc->serial && devc->serial->fd != -1) { + serial_close(devc->serial); + sdi->status = SR_ST_INACTIVE; } - 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; }