From: Bert Vermeulen Date: Fri, 5 Sep 2014 16:33:48 +0000 (+0200) Subject: scpi/gpib: Rename backend to scpi_libgpib. X-Git-Tag: libsigrok-0.4.0~1042 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=7343ad1ec72860b5d11ca8f35c4d014a1fa5b643;p=libsigrok.git scpi/gpib: Rename backend to scpi_libgpib. libgpib is the userspace component to linux-gpib's kernel modules that implement low-level interface drivers. When libsigrok gets userspace GPIB interface drivers, that backend will be the "official" scpi_gpib. --- diff --git a/Makefile.am b/Makefile.am index f5ccd0e3..2628fbcc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -93,7 +93,7 @@ libsigrok_la_SOURCES += \ endif if NEED_GPIB libsigrok_la_SOURCES += \ - src/scpi/scpi_gpib.c + src/scpi/scpi_libgpib.c endif # Hardware (DMM chip parsers) diff --git a/src/scpi/scpi.c b/src/scpi/scpi.c index 84db9dac..38e322f5 100644 --- a/src/scpi/scpi.c +++ b/src/scpi/scpi.c @@ -71,7 +71,7 @@ SR_PRIV extern const struct sr_scpi_dev_inst scpi_tcp_rigol_dev; SR_PRIV extern const struct sr_scpi_dev_inst scpi_usbtmc_libusb_dev; SR_PRIV extern const struct sr_scpi_dev_inst scpi_vxi_dev; SR_PRIV extern const struct sr_scpi_dev_inst scpi_visa_dev; -SR_PRIV extern const struct sr_scpi_dev_inst scpi_gpib_dev; +SR_PRIV extern const struct sr_scpi_dev_inst scpi_libgpib_dev; static const struct sr_scpi_dev_inst *scpi_devs[] = { &scpi_tcp_raw_dev, @@ -86,7 +86,7 @@ static const struct sr_scpi_dev_inst *scpi_devs[] = { &scpi_visa_dev, #endif #ifdef HAVE_LIBGPIB - &scpi_gpib_dev, + &scpi_libgpib_dev, #endif #ifdef HAVE_LIBSERIALPORT &scpi_serial_dev, /* must be last as it matches any resource */ diff --git a/src/scpi/scpi_gpib.c b/src/scpi/scpi_gpib.c deleted file mode 100644 index 06ae1dd2..00000000 --- a/src/scpi/scpi_gpib.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * This file is part of the libsigrok project. - * - * Copyright (C) 2014 Martin Ling - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "libsigrok.h" -#include "libsigrok-internal.h" - -#include -#include - -#define LOG_PREFIX "scpi_gpib" - -struct scpi_gpib { - char *name; - int descriptor; - int read_started; -}; - -static int scpi_gpib_dev_inst_new(void *priv, struct drv_context *drvc, - const char *resource, char **params, const char *serialcomm) -{ - struct scpi_gpib *gscpi = priv; - - (void)drvc; - (void)resource; - (void)serialcomm; - - if (!params || !params[1]) - return SR_ERR; - - gscpi->name = g_strdup(params[1]); - - return SR_OK; -} - -static int scpi_gpib_open(void *priv) -{ - struct scpi_gpib *gscpi = priv; - - if ((gscpi->descriptor = ibfind(gscpi->name)) < 0) - return SR_ERR; - - return SR_OK; -} - -static int scpi_gpib_source_add(struct sr_session *session, void *priv, - int events, int timeout, sr_receive_data_callback cb, void *cb_data) -{ - (void) priv; - - /* Hook up a dummy handler to receive data from the device. */ - return sr_session_source_add(session, -1, events, timeout, cb, cb_data); -} - -static int scpi_gpib_source_remove(struct sr_session *session, void *priv) -{ - (void) priv; - - return sr_session_source_remove(session, -1); -} - -static int scpi_gpib_send(void *priv, const char *command) -{ - struct scpi_gpib *gscpi = priv; - int len = strlen(command); - - ibwrt(gscpi->descriptor, command, len); - - if (ibsta & ERR) - { - sr_err("Error while sending SCPI command: '%s': iberr = %d.", - command, iberr); - return SR_ERR; - } - - if (ibcnt < len) - { - sr_err("Failed to send all of SCPI command: '%s': " - "len = %d, ibcnt = .", command, len, ibcnt); - return SR_ERR; - } - - sr_spew("Successfully sent SCPI command: '%s'.", command); - - return SR_OK; -} - -static int scpi_gpib_read_begin(void *priv) -{ - struct scpi_gpib *gscpi = priv; - - gscpi->read_started = 0; - - return SR_OK; -} - -static int scpi_gpib_read_data(void *priv, char *buf, int maxlen) -{ - struct scpi_gpib *gscpi = priv; - - ibrd(gscpi->descriptor, buf, maxlen); - - if (ibsta & ERR) - { - sr_err("Error while reading SCPI response: iberr = %d.", iberr); - return SR_ERR; - } - - gscpi->read_started = 1; - - return ibcnt; -} - -static int scpi_gpib_read_complete(void *priv) -{ - struct scpi_gpib *gscpi = priv; - - return gscpi->read_started && (ibsta & END); -} - -static int scpi_gpib_close(void *priv) -{ - struct scpi_gpib *gscpi = priv; - - ibonl(gscpi->descriptor, 0); - - return SR_OK; -} - -static void scpi_gpib_free(void *priv) -{ - struct scpi_gpib *gscpi = priv; - - g_free(gscpi->name); -} - -SR_PRIV const struct sr_scpi_dev_inst scpi_gpib_dev = { - .name = "GPIB", - .prefix = "gpib", - .priv_size = sizeof(struct scpi_gpib), - .dev_inst_new = scpi_gpib_dev_inst_new, - .open = scpi_gpib_open, - .source_add = scpi_gpib_source_add, - .source_remove = scpi_gpib_source_remove, - .send = scpi_gpib_send, - .read_begin = scpi_gpib_read_begin, - .read_data = scpi_gpib_read_data, - .read_complete = scpi_gpib_read_complete, - .close = scpi_gpib_close, - .free = scpi_gpib_free, -}; diff --git a/src/scpi/scpi_libgpib.c b/src/scpi/scpi_libgpib.c new file mode 100644 index 00000000..5df90413 --- /dev/null +++ b/src/scpi/scpi_libgpib.c @@ -0,0 +1,166 @@ +/* + * This file is part of the libsigrok project. + * + * Copyright (C) 2014 Martin Ling + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "libsigrok.h" +#include "libsigrok-internal.h" + +#include +#include + +#define LOG_PREFIX "scpi_gpib" + +struct scpi_gpib { + char *name; + int descriptor; + int read_started; +}; + +static int scpi_gpib_dev_inst_new(void *priv, struct drv_context *drvc, + const char *resource, char **params, const char *serialcomm) +{ + struct scpi_gpib *gscpi = priv; + + (void)drvc; + (void)resource; + (void)serialcomm; + + if (!params || !params[1]) + return SR_ERR; + + gscpi->name = g_strdup(params[1]); + + return SR_OK; +} + +static int scpi_gpib_open(void *priv) +{ + struct scpi_gpib *gscpi = priv; + + if ((gscpi->descriptor = ibfind(gscpi->name)) < 0) + return SR_ERR; + + return SR_OK; +} + +static int scpi_gpib_source_add(struct sr_session *session, void *priv, + int events, int timeout, sr_receive_data_callback cb, void *cb_data) +{ + (void) priv; + + /* Hook up a dummy handler to receive data from the device. */ + return sr_session_source_add(session, -1, events, timeout, cb, cb_data); +} + +static int scpi_gpib_source_remove(struct sr_session *session, void *priv) +{ + (void) priv; + + return sr_session_source_remove(session, -1); +} + +static int scpi_gpib_send(void *priv, const char *command) +{ + struct scpi_gpib *gscpi = priv; + int len = strlen(command); + + ibwrt(gscpi->descriptor, command, len); + + if (ibsta & ERR) + { + sr_err("Error while sending SCPI command: '%s': iberr = %d.", + command, iberr); + return SR_ERR; + } + + if (ibcnt < len) + { + sr_err("Failed to send all of SCPI command: '%s': " + "len = %d, ibcnt = .", command, len, ibcnt); + return SR_ERR; + } + + sr_spew("Successfully sent SCPI command: '%s'.", command); + + return SR_OK; +} + +static int scpi_gpib_read_begin(void *priv) +{ + struct scpi_gpib *gscpi = priv; + + gscpi->read_started = 0; + + return SR_OK; +} + +static int scpi_gpib_read_data(void *priv, char *buf, int maxlen) +{ + struct scpi_gpib *gscpi = priv; + + ibrd(gscpi->descriptor, buf, maxlen); + + if (ibsta & ERR) + { + sr_err("Error while reading SCPI response: iberr = %d.", iberr); + return SR_ERR; + } + + gscpi->read_started = 1; + + return ibcnt; +} + +static int scpi_gpib_read_complete(void *priv) +{ + struct scpi_gpib *gscpi = priv; + + return gscpi->read_started && (ibsta & END); +} + +static int scpi_gpib_close(void *priv) +{ + struct scpi_gpib *gscpi = priv; + + ibonl(gscpi->descriptor, 0); + + return SR_OK; +} + +static void scpi_gpib_free(void *priv) +{ + struct scpi_gpib *gscpi = priv; + + g_free(gscpi->name); +} + +SR_PRIV const struct sr_scpi_dev_inst scpi_libgpib_dev = { + .name = "GPIB", + .prefix = "libgpib", + .priv_size = sizeof(struct scpi_gpib), + .dev_inst_new = scpi_gpib_dev_inst_new, + .open = scpi_gpib_open, + .source_add = scpi_gpib_source_add, + .source_remove = scpi_gpib_source_remove, + .send = scpi_gpib_send, + .read_begin = scpi_gpib_read_begin, + .read_data = scpi_gpib_read_data, + .read_complete = scpi_gpib_read_complete, + .close = scpi_gpib_close, + .free = scpi_gpib_free, +};