summaryrefslogtreecommitdiffstats
path: root/lib/libgpib
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-02-06 16:45:20 +0000
committerphk <phk@FreeBSD.org>2005-02-06 16:45:20 +0000
commitd359ed4a46fe1500d8312016a50ac61fd44e5cd4 (patch)
tree5df8d04b5ff848402145b2abdc629e64434b2b0a /lib/libgpib
parentba0f4166c6965d57d66bcef7a53014d7e2d63dcf (diff)
downloadFreeBSD-src-d359ed4a46fe1500d8312016a50ac61fd44e5cd4.zip
FreeBSD-src-d359ed4a46fe1500d8312016a50ac61fd44e5cd4.tar.gz
Add libgpib containing the glue to get ibfoo() calls into the kernel.
Diffstat (limited to 'lib/libgpib')
-rw-r--r--lib/libgpib/Makefile12
-rw-r--r--lib/libgpib/gpib.h31
-rw-r--r--lib/libgpib/ibfoo.c646
3 files changed, 689 insertions, 0 deletions
diff --git a/lib/libgpib/Makefile b/lib/libgpib/Makefile
new file mode 100644
index 0000000..6009e79
--- /dev/null
+++ b/lib/libgpib/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+LIB = gpib
+SHLIBDIR ?= /lib
+SHLIB_MAJOR = 0
+NO_MAN = sorry
+SRCS = ibfoo.c
+INCS = gpib.h
+INCSDIR = ${INCLUDEDIR}/gpib
+WARNS?= 6
+
+.include <bsd.lib.mk>
diff --git a/lib/libgpib/gpib.h b/lib/libgpib/gpib.h
new file mode 100644
index 0000000..db6e0de
--- /dev/null
+++ b/lib/libgpib/gpib.h
@@ -0,0 +1,31 @@
+/*-
+ * Copyright (c) 2005 Poul-Henning Kamp
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file merely redirects to the file in <dev/ieee488/ugpib.h>
+ *
+ * $FreeBSD$
+ */
+
+#include <dev/ieee488/ugpib.h>
diff --git a/lib/libgpib/ibfoo.c b/lib/libgpib/ibfoo.c
new file mode 100644
index 0000000..a1905c6
--- /dev/null
+++ b/lib/libgpib/ibfoo.c
@@ -0,0 +1,646 @@
+/*-
+ * Copyright (c) 2005 Poul-Henning Kamp
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file merely redirects to the file in <dev/ieee488/ugpib.h>
+ *
+ * $FreeBSD$
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <err.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+#include <dev/ieee488/ugpib.h>
+#include <dev/ieee488/ibfoo_int.h>
+
+int ibcnt, iberr;
+
+static int fd = -1;
+
+static int
+__ibsubmit(struct ibfoo_iocarg *ap)
+{
+ int i;
+
+ if (fd < 0)
+ fd = open("/dev/gpib0ib", O_RDWR);
+ if (fd < 0)
+ err(1, "Could not open /dev/gpib0ib");
+ i = ioctl(fd, GPIB_IBFOO, ap);
+ if (i)
+ err(1, "GPIB_IBFOO(%d, 0x%x) failed", ap->__ident, ap->__field);
+ ibcnt = ap->__ibcnt;
+ iberr = ap->__iberr;
+ return (ap->__retval);
+}
+
+int
+ibask (int handle, int option, int * retval)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBASK;
+ io.handle = handle;
+ io.option = option;
+ io.retval = retval;
+ io.__field = __F_HANDLE | __F_OPTION | __F_RETVAL;
+ return (__ibsubmit(&io));
+}
+
+int
+ibbna (int handle, char * bdname)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBBNA;
+ io.handle = handle;
+ io.bdname = bdname;
+ io.__field = __F_HANDLE | __F_BDNAME;
+ return (__ibsubmit(&io));
+}
+
+int
+ibcac (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBCAC;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibclr (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBCLR;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibcmd (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBCMD;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibcmda (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBCMDA;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibconfig (int handle, int option, int value)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBCONFIG;
+ io.handle = handle;
+ io.option = option;
+ io.value = value;
+ io.__field = __F_HANDLE | __F_OPTION | __F_VALUE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibdev (int boardID, int pad, int sad, int tmo, int eot, int eos)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBDEV;
+ io.boardID = boardID;
+ io.pad = pad;
+ io.sad = sad;
+ io.tmo = tmo;
+ io.eot = eot;
+ io.eos = eos;
+ io.__field = __F_BOARDID | __F_PAD | __F_SAD | __F_TMO | __F_EOT | __F_EOS;
+ return (__ibsubmit(&io));
+}
+
+int
+ibdiag (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBDIAG;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibdma (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBDMA;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibeos (int handle, int eos)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBEOS;
+ io.handle = handle;
+ io.eos = eos;
+ io.__field = __F_HANDLE | __F_EOS;
+ return (__ibsubmit(&io));
+}
+
+int
+ibeot (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBEOT;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibevent (int handle, short * event)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBEVENT;
+ io.handle = handle;
+ io.event = event;
+ io.__field = __F_HANDLE | __F_EVENT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibfind (char * bdname)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBFIND;
+ io.bdname = bdname;
+ io.__field = __F_BDNAME;
+ return (__ibsubmit(&io));
+}
+
+int
+ibgts (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBGTS;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibist (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBIST;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+iblines (int handle, short * lines)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBLINES;
+ io.handle = handle;
+ io.lines = lines;
+ io.__field = __F_HANDLE | __F_LINES;
+ return (__ibsubmit(&io));
+}
+
+int
+ibllo (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBLLO;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibln (int handle, int padval, int sadval, short * listenflag)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBLN;
+ io.handle = handle;
+ io.padval = padval;
+ io.sadval = sadval;
+ io.listenflag = listenflag;
+ io.__field = __F_HANDLE | __F_PADVAL | __F_SADVAL | __F_LISTENFLAG;
+ return (__ibsubmit(&io));
+}
+
+int
+ibloc (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBLOC;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibonl (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBONL;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibpad (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBPAD;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibpct (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBPCT;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibpoke (int handle, int option, int value)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBPOKE;
+ io.handle = handle;
+ io.option = option;
+ io.value = value;
+ io.__field = __F_HANDLE | __F_OPTION | __F_VALUE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibppc (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBPPC;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrd (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRD;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrda (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRDA;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrdf (int handle, char * flname)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRDF;
+ io.handle = handle;
+ io.flname = flname;
+ io.__field = __F_HANDLE | __F_FLNAME;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrdkey (int handle, void * buffer, int cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRDKEY;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrpp (int handle, char * ppr)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRPP;
+ io.handle = handle;
+ io.ppr = ppr;
+ io.__field = __F_HANDLE | __F_PPR;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrsc (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRSC;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrsp (int handle, char * spr)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRSP;
+ io.handle = handle;
+ io.spr = spr;
+ io.__field = __F_HANDLE | __F_SPR;
+ return (__ibsubmit(&io));
+}
+
+int
+ibrsv (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBRSV;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibsad (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSAD;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibsgnl (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSGNL;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibsic (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSIC;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibsre (int handle, int v)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSRE;
+ io.handle = handle;
+ io.v = v;
+ io.__field = __F_HANDLE | __F_V;
+ return (__ibsubmit(&io));
+}
+
+int
+ibsrq (ibsrq_t * func)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSRQ;
+ io.func = func;
+ io.__field = __F_FUNC;
+ return (__ibsubmit(&io));
+}
+
+int
+ibstop (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBSTOP;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibtmo (int handle, int tmo)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBTMO;
+ io.handle = handle;
+ io.tmo = tmo;
+ io.__field = __F_HANDLE | __F_TMO;
+ return (__ibsubmit(&io));
+}
+
+int
+ibtrap (int mask, int mode)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBTRAP;
+ io.mask = mask;
+ io.mode = mode;
+ io.__field = __F_MASK | __F_MODE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibtrg (int handle)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBTRG;
+ io.handle = handle;
+ io.__field = __F_HANDLE;
+ return (__ibsubmit(&io));
+}
+
+int
+ibwait (int handle, int mask)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBWAIT;
+ io.handle = handle;
+ io.mask = mask;
+ io.__field = __F_HANDLE | __F_MASK;
+ return (__ibsubmit(&io));
+}
+
+int
+ibwrt (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBWRT;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibwrta (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBWRTA;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibwrtf (int handle, char * flname)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBWRTF;
+ io.handle = handle;
+ io.flname = flname;
+ io.__field = __F_HANDLE | __F_FLNAME;
+ return (__ibsubmit(&io));
+}
+
+int
+ibwrtkey (int handle, void * buffer, int cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBWRTKEY;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
+int
+ibxtrc (int handle, void * buffer, long cnt)
+{
+ struct ibfoo_iocarg io;
+
+ io.__ident = __ID_IBXTRC;
+ io.handle = handle;
+ io.buffer = buffer;
+ io.cnt = cnt;
+ io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
+ return (__ibsubmit(&io));
+}
+
OpenPOWER on IntegriCloud