From: Bernd Porr Date: Mon, 23 Apr 2012 13:03:12 +0000 (+0100) Subject: Updated usbdux firmware files. The udev hotplug mechanism X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=ac43731c432ab8de54cb65cf717c2296c1be67db;p=comedilib.git Updated usbdux firmware files. The udev hotplug mechanism now takes binary files and no longer hex files. Also added the firmware for usbduxsigma. --- diff --git a/configure.ac b/configure.ac index 2d610cf..900978e 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/etc/hotplug/usb/Makefile.am b/etc/hotplug/usb/Makefile.am index 1aae36b..44cf775 100644 --- a/etc/hotplug/usb/Makefile.am +++ b/etc/hotplug/usb/Makefile.am @@ -1 +1 @@ -SUBDIRS = usbdux usbduxfast +SUBDIRS = usbdux usbduxfast usbduxsigma diff --git a/etc/hotplug/usb/usbdux/Makefile.am b/etc/hotplug/usb/usbdux/Makefile.am index b3e22e6..e9d8fe0 100644 --- a/etc/hotplug/usb/usbdux/Makefile.am +++ b/etc/hotplug/usb/usbdux/Makefile.am @@ -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 diff --git a/etc/hotplug/usb/usbdux/Makefile_asm b/etc/hotplug/usb/usbdux/Makefile_asm index 65ac22d..39b80c7 100644 --- a/etc/hotplug/usb/usbdux/Makefile_asm +++ b/etc/hotplug/usb/usbdux/Makefile_asm @@ -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 index 0000000..7f537fc Binary files /dev/null and b/etc/hotplug/usb/usbdux/usbdux_firmware.bin differ diff --git a/etc/hotplug/usb/usbduxfast/Makefile.am b/etc/hotplug/usb/usbduxfast/Makefile.am index 7c5754a..9f2785b 100644 --- a/etc/hotplug/usb/usbduxfast/Makefile.am +++ b/etc/hotplug/usb/usbduxfast/Makefile.am @@ -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 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 index 0000000..7855483 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/Makefile @@ -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 index 0000000..8fd1f3e --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/Makefile.am @@ -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 index 0000000..c269275 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/Makefile.in @@ -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 index 0000000..2010654 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/Makefile_asm @@ -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 index 0000000..acc432e --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/README @@ -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 index 0000000..13f7e38 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/fx2-include.asm @@ -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 index 0000000..b3ecbd8 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/usbduxsigma @@ -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 index 0000000..a2305e5 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.asm @@ -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 +; 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 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 index 0000000..66dd054 --- /dev/null +++ b/etc/hotplug/usb/usbduxsigma/usbduxsigma_firmware.hex @@ -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