summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/indi/fli/libfli-usb-sys-bsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/indi/fli/libfli-usb-sys-bsd.c')
-rw-r--r--kstars/kstars/indi/fli/libfli-usb-sys-bsd.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/kstars/kstars/indi/fli/libfli-usb-sys-bsd.c b/kstars/kstars/indi/fli/libfli-usb-sys-bsd.c
new file mode 100644
index 00000000..d1f6a2b0
--- /dev/null
+++ b/kstars/kstars/indi/fli/libfli-usb-sys-bsd.c
@@ -0,0 +1,133 @@
+/*
+
+ Copyright (c) 2002 Finger Lakes Instrumentation (FLI), L.L.C.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 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.
+
+ Neither the name of Finger Lakes Instrumentation (FLI), LLC
+ nor the names of its contributors may be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
+ REGENTS 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.
+
+ ======================================================================
+
+ Finger Lakes Instrumentation, L.L.C. (FLI)
+ web: http://www.fli-cam.com
+ email: support@fli-cam.com
+
+*/
+
+#include <sys/types.h>
+#include <dev/usb/usb.h>
+#include <sys/ioctl.h>
+
+#include <unistd.h>
+#include <errno.h>
+
+#include "libfli-libfli.h"
+#include "libfli-sys.h"
+#include "libfli-usb.h"
+
+long unix_usbverifydescriptor(flidev_t dev, fli_unixio_t *io)
+{
+ usb_device_descriptor_t usb_desc;
+ int r;
+
+ if ((r = read(io->fd, &usb_desc, sizeof(usb_device_descriptor_t))) !=
+ sizeof(usb_device_descriptor_t))
+ {
+ debug(FLIDEBUG_FAIL, "linux_usbverifydescriptor(): Could not read descriptor.");
+ return -EIO;
+ }
+ else
+ {
+ debug(FLIDEBUG_INFO, "USB device descriptor:");
+ if(usb_desc.idVendor != 0x0f18)
+ {
+ debug(FLIDEBUG_FAIL, "linux_usbverifydescriptor(): Not a FLI device!");
+ return -ENODEV;
+ }
+
+ switch(DEVICE->domain)
+ {
+ case FLIDOMAIN_USB:
+ if(usb_desc.idProduct != 0x0002)
+ {
+ return -ENODEV;
+ }
+ break;
+
+ default:
+ return -EINVAL;
+ break;
+ }
+
+ DEVICE->devinfo.fwrev = usb_desc.bcdDevice;
+ }
+
+ return 0;
+}
+
+long bsd_bulkwrite(flidev_t dev, void *buf, long *wlen)
+{
+ fli_unixio_t *io;
+ long org_wlen = *wlen;
+ int to;
+
+ io = DEVICE->io_data;
+ to = DEVICE->io_timeout;
+
+ if (ioctl(io->fd, USB_SET_TIMEOUT, &to) == -1)
+ return -errno;
+
+ *wlen = write(io->fd, buf, *wlen);
+
+ if (*wlen != org_wlen)
+ return -errno;
+ else
+ return 0;
+}
+
+long bsd_bulkread(flidev_t dev, void *buf, long *rlen)
+{
+ fli_unixio_t *io;
+ long org_rlen = *rlen;
+ int to;
+
+ io = DEVICE->io_data;
+ to = DEVICE->io_timeout;
+
+ if (ioctl(io->fd, USB_SET_TIMEOUT, &to) == -1)
+ return -errno;
+
+ *rlen = read(io->fd, buf, *rlen);
+
+ if (*rlen != org_rlen)
+ return -errno;
+ else
+ return 0;
+}