summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/indi/webcam/port.h
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/indi/webcam/port.h')
-rw-r--r--kstars/kstars/indi/webcam/port.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/kstars/kstars/indi/webcam/port.h b/kstars/kstars/indi/webcam/port.h
new file mode 100644
index 00000000..c5896858
--- /dev/null
+++ b/kstars/kstars/indi/webcam/port.h
@@ -0,0 +1,122 @@
+/* libcqcam - shared Color Quickcam routines
+ * Copyright (C) 1996-1998 by Patrick Reynolds
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// I/O ports wrapper definitions and prototypes
+// This file might need tweaking if you're trying to port my code to other
+// x86 Unix platforms. Code is already available for Linux, FreeBSD, and
+// QNX; see the Makefile.
+//
+// QNX code by: Anders Arpteg <aa11ac@hik.se>
+// FreeBSD code by: Patrick Reynolds <reynolds@cs.duke.edu> and Charles
+// Henrich <henrich@msu.edu>
+// Inlining implemented by: Philip Blundell <philip.blundell@pobox.com>
+
+#ifndef PORT_H
+#define PORT_H
+
+//#include "config.h"
+
+#include <unistd.h>
+
+#ifdef __linux__
+ #if !defined(arm) && !defined(__hppa__) && !defined(__sparc__) && !defined(__ppc__) && !defined(__powerpc__) && !defined(__s390__) && !defined(__s390x__) && !defined(__mips__) && !defined(__mc68000__)
+ #include <sys/io.h>
+ #endif /* !arm */
+#elif defined(QNX)
+#include <conio.h>
+#elif defined(__FreeBSD__)
+#include <machine/cpufunc.h>
+#include <stdio.h>
+#elif defined(BSDI)
+#include <machine/inline.h>
+#elif defined(OPENBSD)
+#include <machine/pio.h>
+#elif defined(LYNX)
+#include "lynx-io.h"
+#elif defined(SOLARIS)
+#include "solaris-io.h"
+#else
+#error Please define a platform in the Makefile
+#endif
+
+#if defined(arm) || defined(__hppa__) || defined(__sparc__) || defined(__ppc__) || defined(__powerpc__) || defined(__s390__) || defined(__s390x__) || defined(__mips__) || defined(__mc68000__)
+static char ports_temp;
+
+#ifdef inb
+#undef inb
+#endif /* inb */
+#define inb(port) \
+ lseek(devport, port, SEEK_SET), \
+ read(devport, &ports_temp, 1), \
+ ports_temp
+
+#ifdef outb
+#undef outb
+#endif /* inb */
+#define outb(data, port) \
+ lseek(devport, port, SEEK_SET); \
+ ports_temp = data; \
+ write(devport, &ports_temp, 1);
+
+#endif /* arm, hppa */
+
+class port_t {
+public:
+ port_t(int iport);
+ ~port_t(void);
+
+ inline int read_data(void) { return inb(port); }
+ inline int read_status(void) { return inb(port1); }
+ inline int read_control(void) { return inb(port2); }
+
+#if defined(LINUX) || defined(LYNX)
+ inline void write_data(int data) { outb(data, port); }
+ inline void write_control(int data) { outb(control_reg = data, port2); }
+ inline void setbit_control(int data) { outb(control_reg |= data, port2); }
+ inline void clearbit_control(int data) { outb(control_reg &= ~data, port2); }
+#else // Solaris, QNX, and *BSD use (port, data) instead
+ inline void write_data(int data) { outb(port, data); }
+ inline void write_control(int data) { outb(port2, control_reg = data); }
+ inline void setbit_control(int data) { outb(port2, control_reg |= data); }
+ inline void clearbit_control(int data) { outb(port2, control_reg &= ~data); }
+#endif
+
+ inline int get_port() { return port; }
+ inline operator bool () const { return port != -1; }
+
+private:
+ int port; // number of the base port
+ int port1; // port+1, precalculated for speed
+ int port2; // port+2, precalculated for speed
+ int control_reg; // current contents of the control register
+#ifdef LOCKING
+ int lock_fd;
+ int lock(int portnum);
+ void unlock(int portnum);
+#endif
+
+#ifdef FREEBSD
+ FILE *devio;
+#endif
+#if defined(__linux__) && (defined(arm) || defined(__hppa__) || defined(__sparc__) || defined(__ppc__) || defined(__powerpc__) || defined(__s390__) || defined(__s390x__) || defined(__mips__) || defined(__mc68000__))
+ int devport;
+#endif
+};
+
+#endif