Updated usbdux firmware files. The udev hotplug mechanism
authorBernd Porr <berndporr@f2s.com>
Mon, 23 Apr 2012 13:03:12 +0000 (14:03 +0100)
committerBernd Porr <berndporr@f2s.com>
Mon, 23 Apr 2012 13:03:12 +0000 (14:03 +0100)
now takes binary files and no longer hex files. Also
added the firmware for usbduxsigma.

17 files changed:
configure.ac
etc/hotplug/usb/Makefile.am
etc/hotplug/usb/usbdux/Makefile.am
etc/hotplug/usb/usbdux/Makefile_asm
etc/hotplug/usb/usbdux/usbdux_firmware.bin [new file with mode: 0644]
etc/hotplug/usb/usbduxfast/Makefile.am
etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/Makefile [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/Makefile.am [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/Makefile.in [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/Makefile_asm [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/README [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/fx2-include.asm [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/usbduxsigma [new file with mode: 0755]
etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.asm [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin [new file with mode: 0644]
etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex [new file with mode: 0644]

index 2d610cff1006a7828ebe1655e5c32ae7a4809f55..900978ee5ffa28fc0e9111112e95920ec8ad27fd 100644 (file)
@@ -259,6 +259,7 @@ etc/hotplug/Makefile
 etc/hotplug/usb/Makefile
 etc/hotplug/usb/usbdux/Makefile
 etc/hotplug/usb/usbduxfast/Makefile
+etc/hotplug/usb/usbduxsigma/Makefile
 etc/udev/Makefile
 doc/Makefile
 demo/Makefile
index 1aae36b1c6fcc24983caddecc440aafeac5f554d..44cf7750c77c91b4be45d9e093d8eb131143a06e 100644 (file)
@@ -1 +1 @@
-SUBDIRS = usbdux usbduxfast
+SUBDIRS = usbdux usbduxfast usbduxsigma
index b3e22e61146fc7de8bcb8c8eccf3a14114a9ffe2..e9d8fe04b6e775a7b52b4ed448d84950e73acc05 100644 (file)
@@ -1,7 +1,7 @@
-EXTRA_DIST = usbdux usbdux_firmware.hex
+EXTRA_DIST = usbdux usbdux_firmware.hex usbdux_firmware.bin
 
 if INSTALL_UDEVHOTPLUG
-udevfirmware_DATA = usbdux_firmware.hex
+udevfirmware_DATA = usbdux_firmware.bin
 endif
 
 if INSTALL_ETCHOTPLUG
index 65ac22d7b5bae6708c41de5900a1c2d48f2617ef..39b80c717b5198c33107cf9b1aba1edefc4bb84d 100644 (file)
@@ -17,10 +17,3 @@ usbdux_firmware.hex: fx2-include.asm usbdux_firmware.asm as31
 clean:
        rm -f *.bin *~ *.lst *.bin *.hex
        make -C as31-2.1 clean
-
-install:
-       mkdir -p /usr/share/usb/
-       install usbdux_firmware.hex /usr/share/usb/usbdux_firmware.hex
-       mkdir -p /etc/hotplug/usb
-       install hotplug/usbdux /etc/hotplug/usb/usbdux
-
diff --git a/etc/hotplug/usb/usbdux/usbdux_firmware.bin b/etc/hotplug/usb/usbdux/usbdux_firmware.bin
new file mode 100644 (file)
index 0000000..7f537fc
Binary files /dev/null and b/etc/hotplug/usb/usbdux/usbdux_firmware.bin differ
index 7c5754a5f7b2fe7974d3ce8646c05dd98f674250..9f2785bf6ea0658c9eeeefe649657a56a51d6e95 100644 (file)
@@ -1,7 +1,7 @@
-EXTRA_DIST = usbduxfast usbduxfast_firmware.hex
+EXTRA_DIST = usbduxfast usbduxfast_firmware.hex usbduxfast_firmware.bin
 
 if INSTALL_UDEVHOTPLUG
-udevfirmware_DATA = usbduxfast_firmware.hex
+udevfirmware_DATA = usbduxfast_firmware.bin
 endif
 
 if INSTALL_ETCHOTPLUG
diff --git a/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin b/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin
new file mode 100644 (file)
index 0000000..3a6441d
Binary files /dev/null and b/etc/hotplug/usb/usbduxfast/usbduxfast_firmware.bin differ
diff --git a/etc/hotplug/usb/usbduxsigma/Makefile b/etc/hotplug/usb/usbduxsigma/Makefile
new file mode 100644 (file)
index 0000000..7855483
--- /dev/null
@@ -0,0 +1,511 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# etc/hotplug/usb/usbduxsigma/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+
+pkgdatadir = $(datadir)/comedilib
+pkgincludedir = $(includedir)/comedilib
+pkglibdir = $(libdir)/comedilib
+pkglibexecdir = $(libexecdir)/comedilib
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = i686-pc-linux-gnu
+host_triplet = i686-pc-linux-gnu
+target_triplet = i686-pc-linux-gnu
+subdir = etc/hotplug/usb/usbduxsigma
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \
+       $(top_srcdir)/m4/as-compiler-flag.m4 \
+       $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(usbhotplugdir)" \
+       "$(DESTDIR)$(udevfirmwaredir)" "$(DESTDIR)$(usbfirmwaredir)"
+SCRIPTS = $(usbhotplug_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DATA = $(udevfirmware_DATA) $(usbfirmware_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/bp1/sandbox/comedilib/missing --run aclocal-1.11 -I m4
+AMTAR = ${SHELL} /home/bp1/sandbox/comedilib/missing --run tar
+AR = ar
+AUTOCONF = ${SHELL} /home/bp1/sandbox/comedilib/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/bp1/sandbox/comedilib/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/bp1/sandbox/comedilib/missing --run automake-1.11
+AWK = gawk
+CC = gcc -std=gnu99
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+COMEDILIB_AGE = 10
+COMEDILIB_CFLAGS =  -I$(top_srcdir)/include -I$(top_builddir)/include -Wall
+COMEDILIB_CURRENT = 10
+COMEDILIB_LIBS =  $(top_builddir)/lib/libcomedi.la -lm
+COMEDILIB_LIBVERSION = 10:0:10
+COMEDILIB_LT_LDFLAGS =  -version-info 10:0:10
+COMEDILIB_REVISION = 0
+COMEDILIB_VERSION_MAJOR = 0
+COMEDILIB_VERSION_MICRO = 0
+COMEDILIB_VERSION_MINOR = 10
+CPP = gcc -E
+CPPFLAGS = 
+CYGPATH_W = echo
+DBLATEX = /usr/bin/dblatex
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LD = /usr/bin/ld
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+MAINT = #
+MAKEINFO = ${SHELL} /home/bp1/sandbox/comedilib/missing --run makeinfo
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = comedilib
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = comedilib
+PACKAGE_STRING = comedilib 0.10.0
+PACKAGE_TARNAME = comedilib
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.10.0
+PATH_SEPARATOR = :
+PYTHON = /usr/bin/python
+PYTHON_EXEC_PREFIX = ${exec_prefix}
+PYTHON_INCLUDES = -I/usr/include/python2.6
+PYTHON_PLATFORM = linux2
+PYTHON_PREFIX = ${prefix}
+PYTHON_QUIET =  -fno-strict-aliasing -Wno-unused-function
+PYTHON_VERSION = 2.6
+RANLIB = ranlib
+RUBY = 
+RUBY_CONFIG_OPTIONS = 
+RUBY_PREFIX = 
+RUBY_SO_DIR = 
+SCXI_SO_VERSION = 9:0:9
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+STRIP = strip
+SWIG = /usr/bin/swig
+VERSION = 0.10.0
+XMLTO = /usr/bin/xmlto
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/bp1/sandbox/comedilib/etc/hotplug/usb/usbduxsigma
+abs_srcdir = /home/bp1/sandbox/comedilib/etc/hotplug/usb/usbduxsigma
+abs_top_builddir = /home/bp1/sandbox/comedilib
+abs_top_srcdir = /home/bp1/sandbox/comedilib
+ac_ct_CC = gcc
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build = i686-pc-linux-gnu
+build_alias = 
+build_cpu = i686
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = i686-pc-linux-gnu
+host_alias = 
+host_cpu = i686
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/bp1/sandbox/comedilib/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+lt_ECHO = echo
+mandir = ${datarootdir}/man
+mkdir_p = /bin/mkdir -p
+oldincludedir = /usr/include
+pcmciadir = ${sysconfdir}/pcmcia
+pdfdir = ${docdir}
+pkgpyexecdir = ${pyexecdir}/comedilib
+pkgpythondir = ${pythondir}/comedilib
+prefix = /tmp/comedi
+program_transform_name = s,x,x,
+psdir = ${docdir}
+pyexecdir = ${exec_prefix}/lib/python2.6/site-packages
+pythondir = ${prefix}/lib/python2.6/site-packages
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target = i686-pc-linux-gnu
+target_alias = 
+target_cpu = i686
+target_os = linux-gnu
+target_vendor = pc
+top_build_prefix = ../../../../
+top_builddir = ../../../..
+top_srcdir = ../../../..
+udevfirmwaredir = /tmp/comedi/lib/firmware
+udevrulesdir = /tmp/comedi/lib/udev/rules.d/
+udevscriptsdir = /tmp/comedi/lib/udev
+usbfirmwaredir = 
+usbhotplugdir = 
+EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin
+udevfirmware_DATA = usbduxsigma_firmware.bin
+#usbfirmware_DATA = usbduxsigma_firmware.hex
+#usbhotplug_SCRIPTS = usbduxsigma
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: # $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-usbhotplugSCRIPTS: $(usbhotplug_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(usbhotplugdir)" || $(MKDIR_P) "$(DESTDIR)$(usbhotplugdir)"
+       @list='$(usbhotplug_SCRIPTS)'; test -n "$(usbhotplugdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(usbhotplugdir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(usbhotplugdir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-usbhotplugSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(usbhotplug_SCRIPTS)'; test -n "$(usbhotplugdir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(usbhotplugdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(usbhotplugdir)" && rm -f $$files
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-udevfirmwareDATA: $(udevfirmware_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(udevfirmwaredir)" || $(MKDIR_P) "$(DESTDIR)$(udevfirmwaredir)"
+       @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevfirmwaredir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(udevfirmwaredir)" || exit $$?; \
+       done
+
+uninstall-udevfirmwareDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(udevfirmwaredir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(udevfirmwaredir)" && rm -f $$files
+install-usbfirmwareDATA: $(usbfirmware_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(usbfirmwaredir)" || $(MKDIR_P) "$(DESTDIR)$(usbfirmwaredir)"
+       @list='$(usbfirmware_DATA)'; test -n "$(usbfirmwaredir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(usbfirmwaredir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(usbfirmwaredir)" || exit $$?; \
+       done
+
+uninstall-usbfirmwareDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(usbfirmware_DATA)'; test -n "$(usbfirmwaredir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(usbfirmwaredir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(usbfirmwaredir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(usbhotplugdir)" "$(DESTDIR)$(udevfirmwaredir)" "$(DESTDIR)$(usbfirmwaredir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-udevfirmwareDATA install-usbfirmwareDATA \
+       install-usbhotplugSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-udevfirmwareDATA uninstall-usbfirmwareDATA \
+       uninstall-usbhotplugSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       install-udevfirmwareDATA install-usbfirmwareDATA \
+       install-usbhotplugSCRIPTS installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am uninstall uninstall-am uninstall-udevfirmwareDATA \
+       uninstall-usbfirmwareDATA uninstall-usbhotplugSCRIPTS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/hotplug/usb/usbduxsigma/Makefile.am b/etc/hotplug/usb/usbduxsigma/Makefile.am
new file mode 100644 (file)
index 0000000..8fd1f3e
--- /dev/null
@@ -0,0 +1,10 @@
+EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin
+
+if INSTALL_UDEVHOTPLUG
+udevfirmware_DATA = usbduxsigma_firmware.bin
+endif
+
+if INSTALL_ETCHOTPLUG
+usbfirmware_DATA =  usbduxsigma_firmware.hex
+usbhotplug_SCRIPTS = usbduxsigma
+endif
diff --git a/etc/hotplug/usb/usbduxsigma/Makefile.in b/etc/hotplug/usb/usbduxsigma/Makefile.in
new file mode 100644 (file)
index 0000000..c269275
--- /dev/null
@@ -0,0 +1,511 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = etc/hotplug/usb/usbduxsigma
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/am-check-python-headers.m4 \
+       $(top_srcdir)/m4/as-compiler-flag.m4 \
+       $(top_srcdir)/m4/as-libtool.m4 $(top_srcdir)/m4/ax_tls.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(usbhotplugdir)" \
+       "$(DESTDIR)$(udevfirmwaredir)" "$(DESTDIR)$(usbfirmwaredir)"
+SCRIPTS = $(usbhotplug_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DATA = $(udevfirmware_DATA) $(usbfirmware_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMEDILIB_AGE = @COMEDILIB_AGE@
+COMEDILIB_CFLAGS = @COMEDILIB_CFLAGS@
+COMEDILIB_CURRENT = @COMEDILIB_CURRENT@
+COMEDILIB_LIBS = @COMEDILIB_LIBS@
+COMEDILIB_LIBVERSION = @COMEDILIB_LIBVERSION@
+COMEDILIB_LT_LDFLAGS = @COMEDILIB_LT_LDFLAGS@
+COMEDILIB_REVISION = @COMEDILIB_REVISION@
+COMEDILIB_VERSION_MAJOR = @COMEDILIB_VERSION_MAJOR@
+COMEDILIB_VERSION_MICRO = @COMEDILIB_VERSION_MICRO@
+COMEDILIB_VERSION_MINOR = @COMEDILIB_VERSION_MINOR@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DBLATEX = @DBLATEX@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_QUIET = @PYTHON_QUIET@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+RUBY_CONFIG_OPTIONS = @RUBY_CONFIG_OPTIONS@
+RUBY_PREFIX = @RUBY_PREFIX@
+RUBY_SO_DIR = @RUBY_SO_DIR@
+SCXI_SO_VERSION = @SCXI_SO_VERSION@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SWIG = @SWIG@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pcmciadir = @pcmciadir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+udevfirmwaredir = @udevfirmwaredir@
+udevrulesdir = @udevrulesdir@
+udevscriptsdir = @udevscriptsdir@
+usbfirmwaredir = @usbfirmwaredir@
+usbhotplugdir = @usbhotplugdir@
+EXTRA_DIST = usbduxsigma usbduxsigma_firmware.hex usbduxsigma_firmware.bin
+@INSTALL_UDEVHOTPLUG_TRUE@udevfirmware_DATA = usbduxsigma_firmware.bin
+@INSTALL_ETCHOTPLUG_TRUE@usbfirmware_DATA = usbduxsigma_firmware.hex
+@INSTALL_ETCHOTPLUG_TRUE@usbhotplug_SCRIPTS = usbduxsigma
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu etc/hotplug/usb/usbduxsigma/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-usbhotplugSCRIPTS: $(usbhotplug_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(usbhotplugdir)" || $(MKDIR_P) "$(DESTDIR)$(usbhotplugdir)"
+       @list='$(usbhotplug_SCRIPTS)'; test -n "$(usbhotplugdir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(usbhotplugdir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(usbhotplugdir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-usbhotplugSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(usbhotplug_SCRIPTS)'; test -n "$(usbhotplugdir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(usbhotplugdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(usbhotplugdir)" && rm -f $$files
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-udevfirmwareDATA: $(udevfirmware_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(udevfirmwaredir)" || $(MKDIR_P) "$(DESTDIR)$(udevfirmwaredir)"
+       @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevfirmwaredir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(udevfirmwaredir)" || exit $$?; \
+       done
+
+uninstall-udevfirmwareDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(udevfirmware_DATA)'; test -n "$(udevfirmwaredir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(udevfirmwaredir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(udevfirmwaredir)" && rm -f $$files
+install-usbfirmwareDATA: $(usbfirmware_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(usbfirmwaredir)" || $(MKDIR_P) "$(DESTDIR)$(usbfirmwaredir)"
+       @list='$(usbfirmware_DATA)'; test -n "$(usbfirmwaredir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(usbfirmwaredir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(usbfirmwaredir)" || exit $$?; \
+       done
+
+uninstall-usbfirmwareDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(usbfirmware_DATA)'; test -n "$(usbfirmwaredir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(usbfirmwaredir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(usbfirmwaredir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(usbhotplugdir)" "$(DESTDIR)$(udevfirmwaredir)" "$(DESTDIR)$(usbfirmwaredir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-udevfirmwareDATA install-usbfirmwareDATA \
+       install-usbhotplugSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-udevfirmwareDATA uninstall-usbfirmwareDATA \
+       uninstall-usbhotplugSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       install-udevfirmwareDATA install-usbfirmwareDATA \
+       install-usbhotplugSCRIPTS installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am uninstall uninstall-am uninstall-udevfirmwareDATA \
+       uninstall-usbfirmwareDATA uninstall-usbhotplugSCRIPTS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/hotplug/usb/usbduxsigma/Makefile_asm b/etc/hotplug/usb/usbduxsigma/Makefile_asm
new file mode 100644 (file)
index 0000000..2010654
--- /dev/null
@@ -0,0 +1,23 @@
+# (c) Bernd Porr
+# GNU public license
+# no warranty
+#
+
+all: as31 usbduxsigma_firmware.hex usbduxsigma_firmware.bin
+
+as31:
+       make -C as31-2.1
+
+usbduxsigma_firmware.bin: fx2-include.asm usbduxsigma_firmware.asm as31
+       as31-2.1/as31 -Fbin usbduxsigma_firmware.asm
+
+usbduxsigma_firmware.hex: fx2-include.asm usbduxsigma_firmware.asm as31
+       as31-2.1/as31 -l usbduxsigma_firmware.asm
+
+clean:
+       rm -f *.bin *~ *.lst *.bin *.hex
+       make -C as31-2.1 clean
+
+install:
+       install usbduxsigma_firmware.bin /lib/firmware/usbduxsigma_firmware.bin
+       install usbduxsigma_firmware.hex /lib/firmware/usbduxsigma_firmware.hex
diff --git a/etc/hotplug/usb/usbduxsigma/README b/etc/hotplug/usb/usbduxsigma/README
new file mode 100644 (file)
index 0000000..acc432e
--- /dev/null
@@ -0,0 +1,17 @@
+To compile the firmware:
+------------------------
+Download the as31 from:
+
+http://www.berndporr.me.uk/as31/
+
+(this is a patched version of as31 which supports an
+include directive).
+
+Install it in this directory.
+
+Then run "make -f Makefile_asm".
+
+
+
+Feedback:
+BerndPorr@f2s.com
diff --git a/etc/hotplug/usb/usbduxsigma/fx2-include.asm b/etc/hotplug/usb/usbduxsigma/fx2-include.asm
new file mode 100644 (file)
index 0000000..13f7e38
--- /dev/null
@@ -0,0 +1,164 @@
+; rev 0.9
+; (c) Bernd Porr, Bernd.Porr@cn.stir.ac.uk
+; GPL, GNU public license
+;
+;   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 2 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, write to the Free Software
+;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;
+; In conjunction with the as31.
+; Include-file for the FX2 by Cypress. The rest of the regs is defined
+; by the as31 itself.
+;
+; from the TRM of the FX2:
+;
+       ;;  CPU control
+       .equ    CPUCS,0E600H
+       .equ    REVCTL,0E60BH
+       ;; interface config
+       .equ    IFCONFIG,0E601H
+       .equ    FIFORESET,0E604H
+       ;; Endpoint configs
+       .equ    EP1OUTCFG,0E610H
+       .equ    EP1INCFG,0E611H
+       .equ    EP2CFG,0E612H
+       .equ    EP4CFG,0E613H
+       .equ    EP6CFG,0E614H
+       .equ    EP8CFG,0E615H
+       ;; packets per frame, always one for USB 1.1
+       .equ    EP2ISOINPKTS,0E640H
+       .equ    EP4ISOINPKTS,0E641H
+       .equ    EP6ISOINPKTS,0E642H
+       .equ    EP8ISOINPKTS,0E643H
+       ;; endpoint byte counts
+       .equ    EP1OUTBC,0E68DH
+       .equ    EP2BCH,0E690H
+       .equ    EP2BCL,0E691H
+       .equ    EP4BCH,0E694H
+       .equ    EP4BCL,0E695H
+       .equ    EP6BCH,0E698H
+       .equ    EP6BCL,0E699H
+       .equ    EP8BCH,0E69CH
+       .equ    EP8BCL,0E69DH
+       ;;
+       .equ    EP4AUTOINLENH,0E622H
+       .equ    EP4AUTOINLENL,0E623H
+       .equ    EP6AUTOINLENH,0E624H
+       .equ    EP6AUTOINLENL,0E625H
+       .equ    EP2FIFOCFG,0E618H
+       .equ    EP4FIFOCFG,0E619H
+       .equ    EP6FIFOCFG,0E61AH
+       .equ    EP8FIFOCFG,0E61BH
+       ;; 
+       .equ    INPKTEND,0E648H
+       .equ    OUTPKTEND,0E649H
+       .equ    GPIFCTLCFG,0E6C3H
+       .equ    GPIFABORT,0E6F5H
+       .equ    GPIFIDLECTL,0E6C2H
+       .equ    GPIFWFSELECT,0E6C0H
+       .equ    GPIFREADYCFG,0E6F3H
+       .equ    GPIFIDLECS,0E6C1H
+       .equ    EP6GPIFFLGSEL,0E6E2H
+       .equ    EP6GPIFPDFSTOP,0E6E3H
+       .equ    EP6GPIFTRIG,0E6E4H
+       .equ    GPIFTCB3,0E6CEH
+       .equ    GPIFTCB2,0E6CFH
+       .equ    GPIFTCB1,0E6D0H
+       .equ    GPIFTCB0,0E6D1H
+       .equ    EP4GPIFFLGSEL,0E6DAH
+       .equ    EP4GPIFPFSTOP,0E6DBH
+       ;; 
+       ;; endpoint control
+       .equ    EP2CS,0E6A3H
+       .equ    EP4CS,0E6A4H
+       .equ    EP6CS,0E6A5H
+       .equ    EP8CS,0E6A6H
+       ;; endpoint buffers
+       .equ    EP2FIFOBUF,0F000H
+       .equ    EP4FIFOBUF,0F400H
+       .equ    EP6FIFOBUF,0F800H
+       .equ    EP8FIFOBUF,0FC00H
+       ;; IRQ enable for bulk NAK
+       .equ    IBNIE,0E658H
+       ;; interrupt requ for NAK
+       .equ    IBNIRQ,0E659H
+       ;; USB INT enables
+       .equ    USBIE,0E65CH
+       ;; USB interrupt request
+       .equ    USBIRQ,0E65DH
+       ;; endpoint IRQ enable
+       .equ    EPIE,0E65EH
+       ;; endpoint IRQ requests
+       .equ    EPIRQ,0E65FH
+       ;; USB error IRQ requests
+       .equ    USBERRIE,0E662H
+       ;; USB error IRQ request
+       .equ    USBERRIRQ,0E663H
+       ;; USB interrupt 2 autovector
+       .equ    INT2IVEC,0E666H
+       ;; autovector enable
+       .equ    INTSETUP,0E668H
+       ;; port cfg
+       .equ    PORTACFG,0E670H
+       .equ    PORTCCFG,0E671H
+       .equ    PORTECFG,0E672H
+       ;; I2C bus
+       .equ    I2CS,0E678H
+       .equ    I2DAT,0E679H
+       .equ    I2CTL,0E67AH
+       ;; auto pointers, read/write is directed to the pointed address
+       .equ    XAUTODAT1,0E67BH
+       .equ    XAUTODAT2,0E67CH
+       ;; USB-control
+       .equ    USBCS,0E680H
+
+       .equ    IOA,80H
+       .equ    DPL0,82H
+       .equ    DPH0,83H
+       .equ    DPL1,84H
+       .equ    DPH1,85H
+       .equ    DPS,86H
+       .equ    CKCON,8Eh
+       .equ    IOB,90H
+       .equ    EXIF,91h
+       .equ    MPAGE,92h
+       .equ    AUTOPTRH1,9AH
+       .equ    AUTOPTRL1,9BH
+       .equ    AUTOPTRH2,9DH
+       .equ    AUTOPTRL2,9EH
+       .equ    IOC,0A0H
+       .equ    INT2CLR,0A1H
+       .equ    INT4CLR,0A2H
+       .equ    EP2468STAT,0AAH
+       .equ    EP24FIFOFLGS,0ABH
+       .equ    EP68FIFOFLGS,0ACH
+       .equ    AUTOPTRSETUP,0AFH
+       .equ    IOD,0B0H
+       .equ    IOE,0B1H
+       .equ    OEA,0B2H
+       .equ    OEB,0B3H
+       .equ    OEC,0B4H
+       .equ    OED,0B5H
+       .equ    OEE,0B6H
+       .equ    GPIFTRIG,0BBH
+       .equ    EIE,0E8h
+       .equ    EIP,0F8h
+
+
+;;; serial control
+       .equ    SCON0,098h
+       .equ    SBUF0,099h
+
+       ;;; end of file
+       
+
diff --git a/etc/hotplug/usb/usbduxsigma/usbduxsigma b/etc/hotplug/usb/usbduxsigma/usbduxsigma
new file mode 100755 (executable)
index 0000000..b3ecbd8
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# hotplug script for USBDUXsigma. Mon Apr 23 13:38:43 GMT 2012
+# Bernd.Porr@gla.ac.uk
+#
+#
+#
+#look for comedi config
+COMEDI_CONFIG=
+#
+if [ -e /usr/local/sbin/comedi_config ]; then
+       COMEDI_CONFIG=/usr/local/sbin/comedi_config
+fi
+if [ -e /usr/sbin/comedi_config ]; then 
+        COMEDI_CONFIG=/usr/sbin/comedi_config
+fi
+if [ -e /sbin/comedi_config ]; then 
+        COMEDI_CONFIG=/sbin/comedi_config
+fi
+#
+#
+#look for the firmware
+USBDUX_FIRMWARE=
+if [ -e /usr/share/usb/usbduxsigma_firmware.hex ]; then 
+        USBDUX_FIRMWARE=/usr/share/usb/usbduxsigma_firmware.hex
+fi
+if [ -e /usr/local/share/usb/usbduxsigma_firmware.hex ]; then
+        USBDUX_FIRMWARE=/usr/local/share/usb/usbduxsigma_firmware.hex
+fi
+#
+#
+# If you have more than one device please add/uncomment
+# 
+# just to make sure we remove the comedi device
+$COMEDI_CONFIG -r /dev/comedi0
+# $COMEDI_CONFIG -r /dev/comedi1
+#
+# connecting the comedi device comedi0 with the module usbdux
+$COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi0 usbduxsigma
+# $COMEDI_CONFIG -i $USBDUX_FIRMWARE /dev/comedi1 usbduxsigma
+#
+#
diff --git a/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.asm b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.asm
new file mode 100644 (file)
index 0000000..a2305e5
--- /dev/null
@@ -0,0 +1,1220 @@
+;   usbdux_firmware.asm
+;   Copyright (C) 2010,2011 Bernd Porr, Bernd.Porr@f2s.com
+;   For usbduxsigma.c 0.5+
+;
+;   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 2 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, write to the Free Software
+;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+;
+;
+; Firmware: usbduxsigma_firmware.asm for usbduxsigma.c
+; Description: University of Stirling USB DAQ & INCITE Technology Limited
+; Devices: [ITL] USB-DUX-SIGMA (usbduxsigma.ko)
+; Author: Bernd Porr <Bernd.Porr@f2s.com>
+; Updated: 24 Jul 2011
+; Status: testing
+;
+;;;
+;;;
+;;;
+       
+       .inc    fx2-include.asm
+
+;;; a couple of flags
+       .equ    CMD_FLAG,80h    ; flag for the next in transfer
+       .equ    PWMFLAG,81h     ; PWM on or off?
+       .equ    MAXSMPL,82H     ; maximum number of samples, n channellist
+       .equ    MUXSG0,83H      ; content of the MUXSG0 register
+
+;;; actual code
+       .org    0000h           ; after reset the processor starts here
+       ljmp    main            ; jump to the main loop
+
+       .org    0043h           ; the IRQ2-vector
+       ljmp    jmptbl          ; irq service-routine
+       
+       .org    0100h           ; start of the jump table
+
+jmptbl:        ljmp    sudav_isr
+       nop
+       ljmp    sof_isr
+       nop
+       ljmp    sutok_isr
+       nop
+       ljmp    suspend_isr
+       nop
+       ljmp    usbreset_isr
+       nop
+       ljmp    hispeed_isr
+       nop
+       ljmp    ep0ack_isr
+       nop
+       ljmp    spare_isr
+       nop
+       ljmp    ep0in_isr
+       nop
+       ljmp    ep0out_isr
+       nop
+       ljmp    ep1in_isr
+       nop
+       ljmp    ep1out_isr
+       nop
+       ljmp    ep2_isr
+       nop
+       ljmp    ep4_isr
+       nop
+       ljmp    ep6_isr
+       nop
+       ljmp    ep8_isr
+       nop
+       ljmp    ibn_isr
+       nop
+       ljmp    spare_isr
+       nop
+       ljmp    ep0ping_isr
+       nop
+       ljmp    ep1ping_isr
+       nop
+       ljmp    ep2ping_isr
+       nop
+       ljmp    ep4ping_isr
+       nop
+       ljmp    ep6ping_isr
+       nop
+       ljmp    ep8ping_isr
+       nop
+       ljmp    errlimit_isr
+       nop
+       ljmp    spare_isr
+       nop
+       ljmp    spare_isr
+       nop
+       ljmp    spare_isr
+       nop
+       ljmp    ep2isoerr_isr
+       nop
+       ljmp    ep4isoerr_isr
+       nop
+       ljmp    ep6isoerr_isr
+       nop
+       ljmp    ep8isoerr_isr
+
+       
+       ;; dummy isr
+sudav_isr:     
+sutok_isr:     
+suspend_isr:   
+usbreset_isr:  
+hispeed_isr:   
+ep0ack_isr:    
+spare_isr:     
+ep0in_isr:     
+ep0out_isr:    
+ep1in_isr:     
+ibn_isr:       
+ep0ping_isr:   
+ep1ping_isr:   
+ep2ping_isr:   
+ep4ping_isr:   
+ep6ping_isr:   
+ep8ping_isr:   
+errlimit_isr:  
+ep2isoerr_isr: 
+ep4isoerr_isr: 
+ep6isoerr_isr: 
+ep8isoerr_isr:
+ep6_isr:
+ep2_isr:
+ep4_isr:       
+
+       push    dps
+       push    dpl
+       push    dph
+       push    dpl1
+       push    dph1
+       push    acc
+       push    psw
+
+       ;; clear the USB2 irq bit and return
+       mov     a,EXIF
+       clr     acc.4
+       mov     EXIF,a
+
+       pop     psw
+       pop     acc 
+       pop     dph1 
+       pop     dpl1
+       pop     dph 
+       pop     dpl 
+       pop     dps
+       
+       reti
+
+               
+;;; main program
+;;; basically only initialises the processor and
+;;; then engages in an endless loop
+main:
+       mov     DPTR,#CPUCS     ; CPU control register
+       mov     a,#00010000b    ; 48Mhz
+       lcall   syncdelaywr
+
+        mov     dptr,#REVCTL
+        mov     a,#00000011b    ; allows skip
+        lcall   syncdelaywr
+
+       mov     IP,#0           ; all std 8051 int have low priority
+       mov     EIP,#0FFH       ; all FX2 interrupts have high priority
+       
+       mov     dptr,#INTSETUP  ; IRQ setup register
+       mov     a,#08h          ; enable autovector
+       lcall   syncdelaywr
+
+       mov     dptr,#PORTCCFG
+       mov     a,#0
+       lcall   syncdelaywr
+
+       lcall   initAD          ; init the ports to the converters
+
+       lcall   initeps         ; init the isochronous data-transfer
+
+;;; main loop, rest is done as interrupts
+mloop2:        nop
+
+;;; pwm
+       mov     r0,#PWMFLAG     ; pwm on?
+       mov     a,@r0           ; get info
+       jz      mloop2          ; it's off
+
+       mov     a,GPIFTRIG      ; GPIF status
+       anl     a,#80h          ; done bit
+       jz      mloop2          ; GPIF still busy
+
+        mov     a,#01h         ; WR,EP4, 01 = EP4
+        mov     GPIFTRIG,a     ; restart it
+
+       sjmp    mloop2          ; loop for ever
+
+
+;;; initialise the ports for the AD-converter
+initAD:
+       mov     r0,#MAXSMPL     ; length of channellist
+       mov     @r0,#0          ; we don't want to accumlate samples
+
+       mov     OEA,#11100000b  ; PortA7,A6,A5 Outputs
+       mov     IOA,#01100000b  ; /CS = 1 and START = 0
+       mov     dptr,#IFCONFIG  ; switch on clock on IFCLK pin
+       mov     a,#10100000b    ; gpif, 30MHz, internal IFCLK -> 15MHz for AD
+       lcall   syncdelaywr
+
+       mov     SCON0,#013H     ; ser rec en, TX/RX: stop, 48/12MHz=4MHz clock
+       
+       mov     dptr,#PORTECFG
+       mov     a,#00001000b    ; special function for port E: RXD0OUT
+       lcall   syncdelaywr
+
+       ret
+
+
+;;; send a byte via SPI
+;;; content in a, dptr1 is changed
+;;; the lookup is done in dptr1 so that the normal dptr is not affected
+;;; important: /cs needs to be reset to 1 by the caller: IOA.5
+sendSPI:
+       inc     DPS
+       
+       ;; bit reverse
+       mov     dptr,#swap_lut  ; lookup table
+       movc    a,@a+dptr       ; reverse bits
+
+       ;; clear interrupt flag, is used to detect
+       ;; successful transmission
+       clr     SCON0.1         ; clear interrupt flag
+
+       ;; start transmission by writing the byte
+       ;; in the transmit buffer
+       mov     SBUF0,a         ; start transmission
+
+       ;; wait for the end of the transmission
+sendSPIwait:
+       mov     a,SCON0         ; get transmission status
+       jnb     ACC.1,sendSPIwait       ; loop until transmitted
+
+       inc     DPS
+       
+       ret
+
+
+
+       
+;;; receive a byte via SPI
+;;; content in a, dptr is changed
+;;; the lookup is done in dptr1 so that the normal dptr is not affected
+;;; important: the /CS needs to be set to 1 by the caller via "setb IOA.5"
+recSPI:
+       inc     DPS
+       
+       clr     IOA.5           ; /cs to 0      
+
+       ;; clearning the RI bit starts reception of data
+       clr     SCON0.0
+
+recSPIwait:
+       ;; RI goes back to 1 after the reception of the 8 bits
+       mov     a,SCON0         ; get receive status
+       jnb     ACC.0,recSPIwait; loop until all bits received
+
+       ;; read the byte from the buffer
+       mov     a,SBUF0         ; get byte
+       
+       ;; lookup: reverse the bits
+       mov     dptr,#swap_lut  ; lookup table
+       movc    a,@a+dptr       ; reverse the bits
+
+       inc     DPS
+       
+       ret
+
+
+
+       
+;;; reads a register
+;;; register address in a
+;;; returns value in a
+registerRead:
+       anl     a,#00001111b    ; mask out the index to the register
+       orl     a,#01000000b    ; 010xxxxx indicates register read
+       clr     IOA.5           ; ADC /cs to 0
+       lcall   sendSPI         ; send the command over
+       lcall   recSPI          ; read the contents back
+       setb    IOA.5           ; ADC /cs to 1
+       ret
+
+
+
+;;; writes to a register
+;;; register address in a
+;;; value in r0
+registerWrite:
+       push    acc
+       anl     a,#00001111b    ; mask out the index to the register
+       orl     a,#01100000b    ; 011xxxxx indicates register write
+
+       clr     IOA.5           ; ADC /cs to 0  
+
+       lcall   sendSPI         ;
+       mov     a,r0
+       lcall   sendSPI
+
+       setb    IOA.5           ; ADC /cs to 1
+       pop     acc
+
+       lcall   registerRead    ; check if the data has arrived in the ADC
+       mov     0f0h,r0         ; register B
+       cjne    a,0f0h,registerWrite ; something went wrong, try again
+       
+       ret
+
+
+
+;;; initilise the endpoints
+initeps:
+       mov     dptr,#FIFORESET
+       mov     a,#80H          
+       movx    @dptr,a         ; reset all fifos
+       mov     a,#2    
+       movx    @dptr,a         ; 
+       mov     a,#4            
+       movx    @dptr,a         ; 
+       mov     a,#6            
+       movx    @dptr,a         ; 
+       mov     a,#8            
+       movx    @dptr,a         ; 
+       mov     a,#0            
+       movx    @dptr,a         ; normal operat
+       
+       mov     DPTR,#EP2CFG
+       mov     a,#10010010b    ; valid, out, double buff, iso
+       movx    @DPTR,a
+
+       mov     dptr,#EP2FIFOCFG
+       mov     a,#00000000b    ; manual
+       movx    @dptr,a
+
+       mov     dptr,#EP2BCL    ; "arm" it
+       mov     a,#00h
+       movx    @DPTR,a         ; can receive data
+       lcall   syncdelay       ; wait to sync
+       movx    @DPTR,a         ; can receive data
+       lcall   syncdelay       ; wait to sync
+       movx    @DPTR,a         ; can receive data
+       lcall   syncdelay       ; wait to sync
+       
+       mov     DPTR,#EP1OUTCFG
+       mov     a,#10100000b    ; valid
+       movx    @dptr,a
+
+       mov     dptr,#EP1OUTBC  ; "arm" it
+       mov     a,#00h
+       movx    @DPTR,a         ; can receive data
+       lcall   syncdelay       ; wait until we can write again
+       movx    @dptr,a         ; make shure its really empty
+       lcall   syncdelay       ; wait
+
+       mov     DPTR,#EP6CFG    ; ISO data from here to the host
+       mov     a,#11010010b    ; Valid
+       movx    @DPTR,a         ; ISO transfer, double buffering
+
+       mov     DPTR,#EP8CFG    ; EP8
+       mov     a,#11100000b    ; BULK data from here to the host
+       movx    @DPTR,a         ;
+
+       ;; enable interrupts
+       mov     dptr,#EPIE      ; interrupt enable
+       mov     a,#10001000b    ; enable irq for ep1out,8
+       movx    @dptr,a         ; do it
+
+       mov     dptr,#EPIRQ     ; clear IRQs
+       mov     a,#10001000b
+       movx    @dptr,a
+       
+        mov     DPTR,#USBIE    ; USB int enables register
+        mov     a,#2            ; enables SOF (1ms/125us interrupt)
+        movx    @DPTR,a         ; 
+
+       mov     EIE,#00000001b  ; enable INT2/USBINT in the 8051's SFR
+       mov     IE,#80h         ; IE, enable all interrupts
+
+       ret
+
+
+;;; Reads one ADC channel from the converter and stores
+;;; the result at dptr
+readADCch:
+       ;; we do polling: we wait until DATA READY is zero
+       mov     a,IOA           ; get /DRDY
+       jb      ACC.0,readADCch ; wait until data ready (DRDY=0)
+       
+       ;; reading data is done by just dropping /CS and start reading and
+       ;; while keeping the IN signal to the ADC inactive
+       clr     IOA.5           ; /cs to 0
+       
+       ;; 1st byte: STATUS
+       lcall   recSPI          ; index
+       movx    @dptr,a         ; store the byte
+       inc     dptr            ; increment pointer
+
+       ;; 2nd byte: MSB
+       lcall   recSPI          ; data
+       movx    @dptr,a
+       inc     dptr
+
+       ;; 3rd byte: MSB-1
+       lcall   recSPI          ; data
+       movx    @dptr,a
+       inc     dptr
+
+       ;; 4th byte: LSB
+       lcall   recSPI          ; data
+       movx    @dptr,a
+       inc     dptr
+       
+       ;; got all bytes
+       setb    IOA.5           ; /cs to 1
+       
+       ret
+
+       
+
+;;; interrupt-routine for SOF
+sof_isr:
+       push    dps
+       push    dpl
+       push    dph
+       push    dpl1
+       push    dph1
+       push    acc
+       push    psw
+       push    00h             ; R0
+       push    01h             ; R1
+       push    02h             ; R2
+       push    03h             ; R3
+       push    04h             ; R4
+       push    05h             ; R5
+       push    06h             ; R6
+       push    07h             ; R7
+
+       clr     IE.7            ; make sure that no other int's disturbe us
+       
+       mov     a,EP2468STAT
+       anl     a,#20H          ; full?
+       jnz     epfull          ; EP6-buffer is full
+
+       clr     IOA.7           ; stop converter, START = 0
+
+       ;; make sure that we are starting with the first channel
+       mov     r0,#MUXSG0      ;
+       mov     a,@r0           ; get config of MUXSG0
+       mov     r0,a
+       mov     a,#04H          ; MUXSG0
+       lcall   registerWrite   ; this resets the channel sequence
+
+       setb    IOA.7           ; start converter, START = 1
+       
+       ;; get the data from the ADC as fast as possible and transfer it
+       ;; to the EP buffer
+       mov     dptr,#0f800h    ; EP6 buffer
+       mov     a,IOD           ; get DIO D
+       movx    @dptr,a         ; store it
+       inc     dptr            ; next byte
+       mov     a,IOC           ; get DIO C
+       movx    @dptr,a         ; store it
+       inc     dptr            ; next byte
+       mov     a,IOB           ; get DIO B
+       movx    @dptr,a         ; store it
+       inc     dptr            ; next byte
+       mov     a,#0            ; just zero
+       movx    @dptr,a         ; pad it up
+       inc     dptr            ; algin along a 32 bit word
+
+       mov     r0,#MAXSMPL     ; number of samples to transmit
+       mov     a,@r0           ; get them
+       mov     r1,a            ; counter
+
+       ;; main loop, get all the data
+eptrans:       
+       lcall   readADCch       ; get one reading
+       djnz    r1,eptrans      ; do until we have all content transf'd
+
+       clr     IOA.7           ; stop converter, START = 0
+
+       ;; arm the endpoint and send off the data
+       mov     DPTR,#EP6BCH    ; byte count H
+       mov     a,#0            ; is zero
+       lcall   syncdelaywr     ; wait until we can write again
+       
+       mov     r0,#MAXSMPL     ; number of samples to transmit
+       mov     a,@r0           ; get them
+       rl      a               ; a=a*2
+       rl      a               ; a=a*2
+       add     a,#4            ; four bytes for DIO
+       mov     DPTR,#EP6BCL    ; byte count L
+       lcall   syncdelaywr     ; wait until we can write again
+
+epfull:
+       ;; do the D/A conversion
+       mov     a,EP2468STAT
+       anl     a,#01H          ; empty
+       jnz     epempty         ; nothing to get
+
+       mov     dptr,#0F000H    ; EP2 fifo buffer
+       lcall   dalo            ; conversion
+
+       mov     dptr,#EP2BCL    ; "arm" it
+       mov     a,#00h
+       lcall   syncdelaywr     ; wait for the rec to sync
+       lcall   syncdelaywr     ; wait for the rec to sync
+
+epempty:       
+       ;; clear INT2
+       mov     a,EXIF          ; FIRST clear the USB (INT2) interrupt request
+       clr     acc.4
+       mov     EXIF,a          ; Note: EXIF reg is not 8051 bit-addressable
+       
+       mov     DPTR,#USBIRQ    ; points to the SOF
+       mov     a,#2            ; clear the SOF
+       movx    @DPTR,a
+
+nosof:
+       setb    IE.7            ; re-enable global interrupts
+       
+       pop     07h
+       pop     06h
+       pop     05h
+       pop     04h             ; R4
+       pop     03h             ; R3
+       pop     02h             ; R2
+       pop     01h             ; R1
+       pop     00h             ; R0
+       pop     psw
+       pop     acc 
+       pop     dph1 
+       pop     dpl1
+       pop     dph 
+       pop     dpl 
+       pop     dps
+       reti
+
+
+reset_ep8:
+       ;; erase all data in ep8
+       mov     dptr,#FIFORESET
+       mov     a,#80H          ; NAK
+       lcall   syncdelaywr
+       mov     dptr,#FIFORESET
+       mov     a,#8            ; reset EP8
+       lcall   syncdelaywr
+       mov     dptr,#FIFORESET
+       mov     a,#0            ; normal operation
+       lcall   syncdelaywr
+       ret
+
+
+reset_ep6:
+       ;; throw out old data
+       mov     dptr,#FIFORESET
+       mov     a,#80H          ; NAK
+       lcall   syncdelaywr
+       mov     dptr,#FIFORESET
+       mov     a,#6            ; reset EP6
+       lcall   syncdelaywr
+       mov     dptr,#FIFORESET
+       mov     a,#0            ; normal operation
+       lcall   syncdelaywr
+       ret
+
+
+;;; configure the ADC converter
+;;; the dptr points to the init data:
+;;; CONFIG 0,1,3,4,5,6
+;;; note that CONFIG2 is omitted
+configADC:     
+       clr     IOA.7           ; stops ADC: START line of ADC = L
+       setb    IOA.5           ; ADC /cs to 1
+
+       ;; just in case something has gone wrong
+       nop
+       nop
+       nop
+
+       mov     a,#11000000b    ; reset the ADC
+       clr     IOA.5           ; ADC /cs to 0  
+       lcall   sendSPI
+       setb    IOA.5           ; ADC /cs to 1  
+
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,a
+       mov     a,#00H          ; CONFIG0
+       lcall   registerWrite
+
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,a
+       mov     a,#01H          ; CONFIG1
+       lcall   registerWrite
+
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,a
+       mov     a,#03H          ; MUXDIF
+       lcall   registerWrite
+
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,#MUXSG0
+       mov     @r0,a           ; store it for reset purposes
+       mov     r0,a
+       mov     a,#04H          ; MUXSG0
+       lcall   registerWrite
+       
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,a
+       mov     a,#05H          ; MUXSG1
+       lcall   registerWrite
+       
+       movx    a,@dptr         ;
+       inc     dptr
+       mov     r0,a
+       mov     a,#06H          ; SYSRED
+       lcall   registerWrite
+
+       ret
+
+       
+;;; interrupt-routine for ep1out
+;;; receives the channel list and other commands
+ep1out_isr:
+       push    dps
+       push    dpl
+       push    dph
+       push    dpl1
+       push    dph1
+       push    acc
+       push    psw
+       push    00h             ; R0
+       push    01h             ; R1
+       push    02h             ; R2
+       push    03h             ; R3
+       push    04h             ; R4
+       push    05h             ; R5
+       push    06h             ; R6
+       push    07h             ; R7
+
+       clr     IE.7            ; block other interrupts
+               
+       mov     dptr,#0E780h    ; FIFO buffer of EP1OUT
+       movx    a,@dptr         ; get the first byte
+       mov     r0,#CMD_FLAG    ; pointer to the command byte
+       mov     @r0,a           ; store the command byte for ep8
+
+       mov     dptr,#ep1out_jmp; jump table for the different functions
+       rl      a               ; multiply by 2: sizeof sjmp
+       jmp     @a+dptr         ; jump to the jump table
+       ;; jump table, corresponds to the command bytes defined
+       ;; in usbdux.c
+ep1out_jmp:
+       sjmp    startadc        ; a=0
+       sjmp    single_da       ; a=1
+       sjmp    config_digital_b; a=2
+       sjmp    write_digital_b ; a=3
+       sjmp    initsgADchannel ; a=4
+       sjmp    nothing         ; a=5
+       sjmp    nothing         ; a=6
+       sjmp    pwm_on          ; a=7
+       sjmp    pwm_off         ; a=8
+
+nothing:
+       ljmp    over_da
+
+pwm_on:
+       lcall   startPWM
+       sjmp    over_da
+
+pwm_off:
+       lcall   stopPWM
+       sjmp    over_da
+
+initsgADchannel:
+       mov     dptr,#0e781h    ; FIFO buffer of EP1OUT
+       lcall   configADC       ; configures the ADC esp sel the channel
+
+       lcall   reset_ep8       ; reset FIFO: get rid of old bytes
+       ;; Save new A/D data in EP8. This is the first byte
+       ;; the host will read during an INSN. If there are
+       ;; more to come they will be handled by the ISR of
+       ;; ep8.
+       lcall   ep8_ops         ; get A/D data
+               
+       sjmp    over_da
+
+       
+;;; config AD:
+;;; we write to the registers of the A/D converter
+startadc:
+       mov     dptr,#0e781h    ; FIFO buffer of EP1OUT from 2nd byte
+
+       movx    a,@dptr         ; get length of channel list
+       inc     dptr
+       mov     r0,#MAXSMPL
+       mov     @r0,a           ; length of the channel list
+
+       lcall   configADC       ; configures all registers
+
+       lcall   reset_ep6       ; reset FIFO
+       
+       ;; load new A/D data into EP6
+       ;; This must be done. Otherwise the ISR is never called.
+       ;; The ISR is only called when data has _left_ the
+       ;; ep buffer here it has to be refilled.
+       lcall   ep6_arm         ; fill with dummy data
+       
+       sjmp    over_da
+
+;;; Single DA conversion. The 2 bytes are in the FIFO buffer
+single_da:
+       mov     dptr,#0e781h    ; FIFO buffer of EP1OUT
+       lcall   dalo            ; conversion
+       sjmp    over_da
+
+;;; configure the port B as input or output (bitwise)
+config_digital_b:
+       mov     dptr,#0e781h    ; FIFO buffer of EP1OUT
+       movx    a,@dptr         ; get the second byte
+       inc     dptr
+       mov     OEB,a           ; set the output enable bits
+       movx    a,@dptr         ; get the second byte
+       inc     dptr
+       mov     OEC,a
+       movx    a,@dptr         ; get the second byte
+       inc     dptr
+       mov     OED,a
+       sjmp    over_da
+       
+;;; Write one byte to the external digital port B
+;;; and prepare for digital read
+write_digital_b:
+       mov     dptr,#0e781h    ; FIFO buffer of EP1OUT
+       movx    a,@dptr         ; command[1]
+       inc     dptr
+       mov     OEB,a           ; output enable
+       movx    a,@dptr         ; command[2]
+       inc     dptr
+       mov     OEC,a
+       movx    a,@dptr         ; command[3]
+       inc     dptr
+       mov     OED,a 
+       movx    a,@dptr         ; command[4]
+       inc     dptr
+       mov     IOB,a           ;
+       movx    a,@dptr         ; command[5]
+       inc     dptr
+       mov     IOC,a
+       movx    a,@dptr         ; command[6]
+       inc     dptr
+       mov     IOD,a
+
+       lcall   reset_ep8       ; reset FIFO of ep 8
+
+       ;; fill ep8 with new data from port B
+       ;; When the host requests the data it's already there.
+       ;; This must be so. Otherwise the ISR is not called.
+       ;; The ISR is only called when a packet has been delivered
+       ;; to the host. Thus, we need a packet here in the
+       ;; first instance.
+       lcall   ep8_ops         ; get digital data
+
+       ;; 
+       ;; for all commands the same
+over_da:       
+       mov     dptr,#EP1OUTBC
+       mov     a,#00h
+       lcall   syncdelaywr     ; arm
+       lcall   syncdelaywr     ; arm
+       lcall   syncdelaywr     ; arm
+
+       ;; clear INT2
+       mov     a,EXIF          ; FIRST clear the USB (INT2) interrupt request
+       clr     acc.4
+       mov     EXIF,a          ; Note: EXIF reg is not 8051 bit-addressable
+
+       mov     DPTR,#EPIRQ     ; 
+       mov     a,#00001000b    ; clear the ep1outirq
+       movx    @DPTR,a
+
+       setb    IE.7            ; re-enable interrupts
+
+       pop     07h
+       pop     06h
+       pop     05h
+       pop     04h             ; R4
+       pop     03h             ; R3
+       pop     02h             ; R2
+       pop     01h             ; R1
+       pop     00h             ; R0
+       pop     psw
+       pop     acc 
+       pop     dph1 
+       pop     dpl1
+       pop     dph 
+       pop     dpl 
+       pop     dps
+       reti
+
+
+       
+;;; all channels
+dalo:
+       movx    a,@dptr         ; number of bytes to send out
+       inc     dptr            ; pointer to the first byte
+       mov     r0,a            ; counter
+nextDA:        
+       movx    a,@dptr         ; get the byte
+       inc     dptr            ; point to the high byte
+       mov     r3,a            ; store in r3 for writeDA
+       movx    a,@dptr         ; get the channel number
+       inc     dptr            ; get ready for the next channel
+       lcall   writeDA         ; write value to the DAC
+       djnz    r0,nextDA       ; next channel
+       ret
+
+
+
+;;; D/A-conversion:
+;;; channel number in a
+;;; value in r3
+writeDA:
+       anl     a,#00000011b    ; 4 channels
+       mov     r1,#6           ; the channel number needs to be shifted up
+writeDA2:
+       rl      a               ; bit shift to the left
+       djnz    r1,writeDA2     ; do it 6 times
+       orl     a,#00010000b    ; update outputs after write
+       mov     r2,a            ; backup
+       mov     a,r3            ; get byte
+       anl     a,#11110000b    ; get the upper nibble
+       mov     r1,#4           ; shift it up to the upper nibble
+writeDA3:
+       rr      a               ; shift to the upper to the lower
+       djnz    r1,writeDA3
+       orl     a,r2            ; merge with the channel info
+       clr     IOA.6           ; /SYNC of the DA to 0
+       lcall   sendSPI         ; send it out to the SPI
+       mov     a,r3            ; get data again
+       anl     a,#00001111b    ; get the lower nibble
+       mov     r1,#4           ; shift that to the upper
+writeDA4:
+       rl      a
+       djnz    r1,writeDA4
+       anl     a,#11110000b    ; make sure that's empty
+       lcall   sendSPI
+       setb    IOA.6           ; /SYNC of the DA to 1
+noDA:  ret
+       
+
+
+;;; arm ep6: this is just a dummy arm to get things going
+ep6_arm:
+       mov     DPTR,#EP6BCH    ; byte count H
+       mov     a,#0            ; is zero
+       lcall   syncdelaywr     ; wait until the length has arrived
+       
+       mov     DPTR,#EP6BCL    ; byte count L
+       mov     a,#1            ; is one
+       lcall   syncdelaywr     ; wait until the length has been proc
+       ret
+       
+
+
+;;; converts one analog/digital channel and stores it in EP8
+;;; also gets the content of the digital ports B,C and D depending on
+;;; the COMMAND flag
+ep8_ops:
+       mov     dptr,#0fc01h    ; ep8 fifo buffer
+       clr     a               ; high byte
+       movx    @dptr,a         ; set H=0
+       mov     dptr,#0fc00h    ; low byte
+       mov     r0,#CMD_FLAG
+       mov     a,@r0
+       movx    @dptr,a         ; save command byte
+
+       mov     dptr,#ep8_jmp   ; jump table for the different functions
+       rl      a               ; multiply by 2: sizeof sjmp
+       jmp     @a+dptr         ; jump to the jump table
+       ;; jump table, corresponds to the command bytes defined
+       ;; in usbdux.c
+ep8_jmp:
+       sjmp    ep8_err         ; a=0, err
+       sjmp    ep8_err         ; a=1, err
+       sjmp    ep8_err         ; a=2, err
+       sjmp    ep8_dio         ; a=3, digital read
+       sjmp    ep8_sglchannel  ; a=4, analog A/D
+       sjmp    ep8_err         ; a=5, err
+       sjmp    ep8_err         ; a=6, err
+
+       ;; read one A/D channel
+ep8_sglchannel:
+       mov     DPTR,#0fc01h    ; EP8 FIFO
+       setb    IOA.7           ; start converter, START = 1
+       lcall   readADCch       ; get one reading
+       clr     IOA.7           ; stop the converter, START = 0
+
+       sjmp    ep8_send        ; send the data
+
+       ;; read the digital lines
+ep8_dio:       
+       mov     DPTR,#0fc01h    ; store the contents of port B
+       mov     a,IOB           ; in the next
+       movx    @dptr,a         ; entry of the buffer
+       inc     dptr
+       mov     a,IOC           ; port C
+       movx    @dptr,a         ; next byte of the EP
+       inc     dptr
+       mov     a,IOD
+       movx    @dptr,a         ; port D
+       
+ep8_send:      
+       mov     DPTR,#EP8BCH    ; byte count H
+       mov     a,#0            ; is zero
+       lcall   syncdelaywr
+       
+       mov     DPTR,#EP8BCL    ; byte count L
+       mov     a,#10H          ; 16 bytes, bec it's such a great number...
+       lcall   syncdelaywr     ; send the data over to the host
+
+ep8_err:       
+       ret
+
+
+
+;;; EP8 interrupt is the endpoint which sends data back after a command
+;;; The actual command fills the EP buffer already
+;;; but for INSNs we need to deliver more data if the count > 1
+ep8_isr:       
+       push    dps
+       push    dpl
+       push    dph
+       push    dpl1
+       push    dph1
+       push    acc
+       push    psw
+       push    00h             ; R0
+       push    01h             ; R1
+       push    02h             ; R2
+       push    03h             ; R3
+       push    04h             ; R4
+       push    05h             ; R5
+       push    06h             ; R6
+       push    07h             ; R7
+               
+       lcall   ep8_ops
+       
+       ;; clear INT2
+       mov     a,EXIF          ; FIRST clear the USB (INT2) interrupt request
+       clr     acc.4
+       mov     EXIF,a          ; Note: EXIF reg is not 8051 bit-addressable
+
+       mov     DPTR,#EPIRQ     ; 
+       mov     a,#10000000b    ; clear the ep8irq
+       movx    @DPTR,a
+
+       pop     07h
+       pop     06h
+       pop     05h
+       pop     04h             ; R4
+       pop     03h             ; R3
+       pop     02h             ; R2
+       pop     01h             ; R1
+       pop     00h             ; R0
+       pop     psw
+       pop     acc 
+       pop     dph1 
+       pop     dpl1
+       pop     dph 
+       pop     dpl 
+       pop     dps
+       reti
+
+
+
+;;; GPIF waveform for PWM
+waveform:
+       ;;      0     1     2     3     4     5     6     7(not used)
+       ;; len (gives 50.007Hz)
+       .db     195,  195,  195,  195,  195,  195,  1,    1
+
+       ;; opcode
+       .db     002H, 006H, 002H, 002H, 002H, 002H, 002H, 002H
+       
+       ;; out
+       .db     0ffH, 0ffH, 0ffH, 0ffH, 0ffH, 0ffH, 0ffH, 0ffH
+
+       ;; log
+       .db     000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H
+
+
+stopPWM:
+       mov     r0,#PWMFLAG     ; flag for PWM
+       mov     a,#0            ; PWM (for the main loop)
+       mov     @r0,a           ; set it
+
+       mov     dptr,#IFCONFIG  ; switch off GPIF
+       mov     a,#10100000b    ; gpif, 30MHz, internal IFCLK
+       lcall   syncdelaywr
+       ret
+       
+
+;;; init PWM
+startPWM:
+       mov     dptr,#IFCONFIG  ; switch on IFCLK signal
+       mov     a,#10100010b    ; gpif, 30MHz, internal IFCLK
+       lcall   syncdelaywr
+
+       mov     OEB,0FFH        ; output to port B
+
+       mov     DPTR,#EP4CFG
+       mov     a,#10100000b    ; valid, out, bulk
+       movx    @DPTR,a
+
+       ;; reset the endpoint
+       mov     dptr,#FIFORESET
+       mov     a,#80h          ; NAK
+       lcall   syncdelaywr
+       mov     a,#84h          ; reset EP4 + NAK
+       lcall   syncdelaywr
+       mov     a,#0            ; normal op
+       lcall   syncdelaywr
+
+       mov     dptr,#EP4BCL
+       mov     a,#0H           ; discard packets
+       lcall   syncdelaywr     ; empty FIFO buffer
+       lcall   syncdelaywr     ; empty FIFO buffer
+
+       ;; aborts all transfers by the GPIF
+       mov     dptr,#GPIFABORT
+       mov     a,#0ffh         ; abort all transfers
+       lcall   syncdelaywr
+
+       ;; wait for GPIF to finish
+wait_f_abort:
+       mov     a,GPIFTRIG      ; GPIF status
+       anl     a,#80h          ; done bit
+       jz      wait_f_abort    ; GPIF busy
+
+        mov     dptr,#GPIFCTLCFG
+        mov     a,#10000000b    ; tri state for CTRL
+        lcall   syncdelaywr
+
+        mov     dptr,#GPIFIDLECTL
+        mov     a,#11110000b    ; all CTL outputs low
+        lcall   syncdelaywr
+
+       ;; abort if FIFO is empty
+        mov     a,#00000001b    ; abort if empty
+        mov     dptr,#EP4GPIFFLGSEL
+        lcall   syncdelaywr
+
+       ;; 
+        mov     a,#00000001b    ; stop if GPIF flg
+        mov     dptr,#EP4GPIFPFSTOP
+        lcall   syncdelaywr
+
+       ;; transaction counter
+       mov     a,#0ffH
+       mov     dptr,#GPIFTCB3
+       lcall   syncdelaywr
+
+       ;; transaction counter
+       mov     a,#0ffH
+       mov     dptr,#GPIFTCB2
+       lcall   syncdelaywr
+
+       ;; transaction counter
+       mov     a,#0ffH         ; 512 bytes
+       mov     dptr,#GPIFTCB1
+       lcall   syncdelaywr
+
+       ;; transaction counter
+       mov     a,#0ffH
+       mov     dptr,#GPIFTCB0
+       lcall   syncdelaywr
+
+       ;; RDY pins. Not used here.
+        mov     a,#0
+        mov     dptr,#GPIFREADYCFG
+        lcall   syncdelaywr
+
+       ;; drives the output in the IDLE state
+        mov     a,#1
+        mov     dptr,#GPIFIDLECS
+        lcall   syncdelaywr
+
+       ;; direct data transfer from the EP to the GPIF
+       mov     dptr,#EP4FIFOCFG
+       mov     a,#00010000b    ; autoout=1, byte-wide
+       lcall   syncdelaywr
+
+       ;; waveform 0 is used for FIFO out
+       mov     dptr,#GPIFWFSELECT
+       mov     a,#00000000b
+       movx    @dptr,a
+       lcall   syncdelay
+
+       ;; transfer the delay byte from the EP to the waveform
+       mov     dptr,#0e781h    ; EP1 buffer
+       movx    a,@dptr         ; get the delay
+       mov     dptr,#waveform  ; points to the waveform
+       mov     r2,#6           ; fill 6 bytes
+timloop:
+       movx    @dptr,a         ; save timing in a xxx
+       inc     dptr
+       djnz    r2,timloop      ; fill the 6 delay bytes
+
+       ;; load waveform
+        mov     AUTOPTRH2,#0E4H ; XDATA0H
+        lcall   syncdelay
+        mov     AUTOPTRL2,#00H  ; XDATA0L
+        lcall   syncdelay
+
+       mov     dptr,#waveform  ; points to the waveform
+       
+        mov     AUTOPTRSETUP,#7 ; autoinc and enable
+        lcall   syncdelay
+
+        mov     r2,#20H         ; 32 bytes to transfer
+
+wavetr:
+        movx    a,@dptr
+       inc     dptr
+       push    dpl
+       push    dph
+       push    dpl1
+       push    dph1
+        mov     dptr,#XAUTODAT2
+        movx    @dptr,a
+        lcall   syncdelay
+       pop     dph1 
+       pop     dpl1
+       pop     dph 
+       pop     dpl
+        djnz    r2,wavetr
+
+       mov     dptr,#OUTPKTEND
+       mov     a,#084H
+       lcall   syncdelaywr
+       lcall   syncdelaywr
+
+       mov     r0,#PWMFLAG     ; flag for PWM
+       mov     a,#1            ; PWM (for the main loop)
+       mov     @r0,a           ; set it
+
+       ret
+
+       
+
+;; need to delay every time the byte counters
+;; for the EPs have been changed.
+
+syncdelay:
+       nop
+       nop
+       nop
+       nop
+       nop
+       nop
+       nop
+       nop
+       nop
+       ret
+
+syncdelaywr:
+       movx    @dptr,a
+       lcall   syncdelay
+       ret
+
+
+
+       .org    1F00h           ; lookup table at the end of memory
+
+swap_lut:
+.db 0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136
+.db 72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100
+.db 228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220
+.db 60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10
+.db 138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166
+.db 102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94
+.db 222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9
+.db 137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165
+.db 101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93
+.db 221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11
+.db 139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167
+.db 103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95
+.db 223,63,191,127,255
+
+
+
+       
+.End
+
+
diff --git a/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin
new file mode 100644 (file)
index 0000000..8ed1261
Binary files /dev/null and b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.bin differ
diff --git a/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex
new file mode 100644 (file)
index 0000000..66dd054
--- /dev/null
@@ -0,0 +1,113 @@
+:030000000201A258
+:03004300020100B7
+:1001000002017F000202D70002017F0002017F008E
+:1001100002017F0002017F0002017F0002017F00D7
+:1001200002017F0002017F0002017F000203F5004F
+:1001300002017F0002017F0002017F0002056700CB
+:1001400002017F0002017F0002017F0002017F00A7
+:1001500002017F0002017F0002017F0002017F0097
+:1001600002017F0002017F0002017F0002017F0087
+:1001700002017F0002017F0002017F0002017FC0B7
+:1001800086C082C083C084C085C0E0C0D0E591C273
+:10019000E4F591D0D0D0E0D085D084D083D082D087
+:1001A000863290E60074101206D890E60B740312A3
+:1001B00006D875B80075F8FF90E66874081206D87E
+:1001C00090E67174001206D81201E012024F007816
+:1001D00081E660FAE5BB548060F47401F5BB80EE03
+:1001E0007882760075B2E075806090E60174A012A6
+:1001F00006D875981390E67274081206D822058600
+:10020000901F0093C299F599E59830E1FB0586228D
+:100210000586C285C298E59830E0FBE599901F00FD
+:1002200093058622540F4440C2851201FE1202102B
+:10023000D28522C0E0540F4460C2851201FEE8124C
+:1002400001FED285D0E012022488F0B5F0E52290BC
+:10025000E6047480F07402F07404F07406F074081C
+:10026000F07400F090E6127492F090E6187400F0CA
+:1002700090E6917400F01206CEF01206CEF012064F
+:10028000CE90E61074A0F090E68D7400F01206CEC9
+:10029000F01206CE90E61474D2F090E61574E0F0F9
+:1002A00090E65E7488F090E65F7488F090E65C7487
+:1002B00002F075E80175A88022E58020E0FBC28588
+:1002C000120210F0A3120210F0A3120210F0A312F7
+:1002D0000210F0A3D28522C086C082C083C084C031
+:1002E00085C0E0C0D0C000C001C002C003C004C0CF
+:1002F00005C006C007C2AFE5AA5420703EC2877889
+:1003000083E6F87404120233D28790F800E5B0F067
+:10031000A3E5A0F0A3E590F0A37400F0A37882E633
+:10032000F81202B9D8FBC28790E69874001206D87A
+:100330007882E6232390E6991206D8E5AA54017044
+:100340001190F0001204D690E69174001206D812B3
+:1003500006D8E591C2E4F59190E65D7402F0D2AF63
+:10036000D007D006D005D004D003D002D001D000F1
+:10037000D0D0D0E0D085D084D083D082D0863290C7
+:10038000E60474801206D890E60474081206D89029
+:10039000E60474001206D82290E60474801206D88F
+:1003A00090E60474061206D890E60474001206D88B
+:1003B00022C287D28500000074C0C2851201FED21D
+:1003C00085E0A3F87400120233E0A3F8740112026E
+:1003D00033E0A3F87403120233E0A37883F6F874D1
+:1003E00004120233E0A3F87405120233E0A3F87498
+:1003F0000612023322C086C082C083C084C085C07A
+:10040000E0C0D0C000C001C002C003C004C005C02D
+:1004100006C007C2AF90E780E07880F69004212301
+:1004200073802B803C804280518015800680048040
+:1004300005800802049B1205E180601205D3805BF1
+:1004400090E7811203B112037F12051D804D90E7E2
+:1004500081E0A37882F61203B112039812050C8092
+:100460003A90E7811204D6803290E781E0A3F5B399
+:10047000E0A3F5B4E0A3F5B5802190E781E0A3F512
+:10048000B3E0A3F5B4E0A3F5B5A3E0F590E0A3F5E0
+:10049000A0E0A3F5B012037F12051D90E68D740055
+:1004A0001206D81206D81206D8E591C2E4F591904A
+:1004B000E65F7408F0D2AFD007D006D005D004D0E4
+:1004C00003D002D001D000D0D0D0E0D085D084D0ED
+:1004D00083D082D08632E0A3F8E0A3FBE0A312042D
+:1004E000E4D8F6225403790623D9FD4410FAEB54DC
+:1004F000F0790403D9FD4AC2861201FEEB540F794C
+:100500000423D9FD54F01201FED2862290E698749D
+:10051000001206D890E69974011206D82290FC01C8
+:10052000E4F090FC007880E6F090052E237380368E
+:100530008034803280128004802C802A90FC01D28A
+:10054000871202B9C287800E90FC01E590F0A3E506
+:10055000A0F0A3E5B0F090E69C74001206D890E6F7
+:100560009D74101206D822C086C082C083C084C089
+:1005700085C0E0C0D0C000C001C002C003C004C03C
+:1005800005C006C00712051DE591C2E4F59190E68D
+:100590005F7480F0D007D006D005D004D003D0021D
+:1005A000D001D000D0D0D0E0D085D084D083D0820C
+:1005B000D08632C3C3C3C3C3C30101020602020211
+:1005C000020202FFFFFFFFFFFFFFFF00000000002D
+:1005D00000000078817400F690E60174A01206D83D
+:1005E0002290E60174A21206D885FFB390E6137438
+:1005F000A0F090E60474801206D874841206D874B1
+:10060000001206D890E69574001206D81206D8900B
+:10061000E6F574FF1206D8E5BB548060FA90E6C395
+:1006200074801206D890E6C274F01206D874019055
+:10063000E6DA1206D8740190E6DB1206D874FF9051
+:10064000E6CE1206D874FF90E6CF1206D874FF905B
+:10065000E6D01206D874FF90E6D11206D874009046
+:10066000E6F31206D8740190E6C11206D890E61996
+:1006700074101206D890E6C07400F01206CE90E70F
+:1006800081E09005B37A06F0A3DAFC759DE41206CA
+:10069000CE759E001206CE9005B375AF071206CE3A
+:1006A0007A20E0A3C082C083C084C08590E67CF03D
+:1006B0001206CED085D084D083D082DAE590E64988
+:1006C00074841206D81206D878817401F6220000CC
+:0D06D0000000000000000022F01206CE2203
+:101F0000008040C020A060E0109050D030B070F051
+:101F1000088848C828A868E8189858D838B878F8C1
+:101F2000048444C424A464E4149454D434B474F4F1
+:101F30000C8C4CCC2CAC6CEC1C9C5CDC3CBC7CFC61
+:101F4000028242C222A262E2129252D232B272F2F1
+:101F50000A8A4ACA2AAA6AEA1A9A5ADA3ABA7AFA61
+:101F6000068646C626A666E6169656D636B676F691
+:101F70000E8E4ECE2EAE6EEE1E9E5EDE3EBE7EFE01
+:101F8000018141C121A161E1119151D131B171F1C1
+:101F9000098949C929A969E9199959D939B979F931
+:101FA000058545C525A565E5159555D535B575F561
+:101FB0000D8D4DCD2DAD6DED1D9D5DDD3DBD7DFDD1
+:101FC000038343C323A363E3139353D333B373F361
+:101FD0000B8B4BCB2BAB6BEB1B9B5BDB3BBB7BFBD1
+:101FE000078747C727A767E7179757D737B777F701
+:101FF0000F8F4FCF2FAF6FEF1F9F5FDF3FBF7FFF71
+:00000001FF