aboutsummaryrefslogtreecommitdiff
path: root/dmx512/src
diff options
context:
space:
mode:
Diffstat (limited to 'dmx512/src')
-rw-r--r--dmx512/src/Make.config.in31
-rw-r--r--dmx512/src/Make.version1
-rw-r--r--dmx512/src/Makefile64
-rw-r--r--dmx512/src/configure.ac181
-rw-r--r--dmx512/src/dmx4pd.h34
-rw-r--r--dmx512/src/dmxin.c47
-rw-r--r--dmx512/src/dmxout.c156
7 files changed, 514 insertions, 0 deletions
diff --git a/dmx512/src/Make.config.in b/dmx512/src/Make.config.in
new file mode 100644
index 0000000..d3ac25f
--- /dev/null
+++ b/dmx512/src/Make.config.in
@@ -0,0 +1,31 @@
+LIBNAME ?= @LIBNAME@
+VERSION ?= @VERSION@
+
+PREFIX =@prefix@@PDLIBDIR@
+
+INSTALL_BIN=$(PREFIX)/extra
+INSTALL_DOC=$(PREFIX)/@REFERENCEPATH@$(LIBNAME)
+
+EXT = @EXT@
+VERSION ?= @VERSION@
+DEFS = @DFLAGS@ -DACONNECT_VERSION=\"$(VERSION)\"
+IFLAGS = -I. @INCLUDES@ $(INCLUDES)
+
+CC = @CC@
+LD = @LD@
+STRIP = @STRIP@ @STRIPFLAGS@
+
+AFLAGS =
+LFLAGS = @LFLAGS@
+WFLAGS =
+
+MAKEDEP_FLAGS = @MAKEDEP_FLAGS@
+
+TARNAME = $(LIBNAME)-$(VERSION).tgz
+BINTARNAME = $(LIBNAME)-$(VERSION)-bin.tgz
+
+
+CFLAGS = $(DEFS) $(IFLAGS) $(WFLAGS) @CFLAGS@
+
+LIBS = @LIBS@
+
diff --git a/dmx512/src/Make.version b/dmx512/src/Make.version
new file mode 100644
index 0000000..0bc041a
--- /dev/null
+++ b/dmx512/src/Make.version
@@ -0,0 +1 @@
+VERSION = $(shell svnversion)
diff --git a/dmx512/src/Makefile b/dmx512/src/Makefile
new file mode 100644
index 0000000..93da650
--- /dev/null
+++ b/dmx512/src/Makefile
@@ -0,0 +1,64 @@
+default: all
+
+include Make.version
+
+Make.config: Make.config.in configure
+ ./configure
+
+include Make.config
+
+.SUFFIXES: .$(EXT)
+
+SOURCES=$(sort $(filter %.c, $(wildcard *.c)))
+TARGETS = $(SOURCES:.c=.o)
+OBJECTS = $(SOURCES:.c=.$(EXT))
+
+all: $(OBJECTS)
+
+clean:
+ -rm -f *.o *.d
+
+binclean:
+ -rm -f *.$(EXT)
+
+distclean: clean binclean
+ -rm -f *~ _* config.*
+ -rm -rf autom4te.cache
+
+install: install-bin install-doc
+
+install-bin:
+ -install -d $(INSTALL_BIN)
+ -install -m 644 $(LIBNAME).$(EXT) $(INSTALL_BIN)
+
+install-doc:
+ -install -d $(INSTALL_BIN)
+ -install -m 644 *.pd $(INSTALL_BIN)
+
+dist: distclean
+ (cd ..;tar czvf $(TARNAME) $(LIBNAME))
+
+distbin: distclean all clean
+ (cd ..; tar cvzf $(BINTARNAME) $(LIBNAME))
+
+everything: clean all install distclean
+
+
+$(TARGETS): %.o : %.c
+ $(CC) $(DMX4PD_CFLAGS) -DDMX4PD_VERSION="\"$(VERSION)\"" -c -o $@ $*.c
+
+$(OBJECTS): %.$(EXT) : %.o
+ $(LD) $(LFLAGS) -o $@ $*.o $(LIBS)
+ $(STRIP) $(STRIPFLAGS) $@
+
+## dependencies: as proposed by the GNU-make documentation
+## see http://www.gnu.org/software/make/manual/html_node/make_47.html#SEC51
+-include $(SOURCES:.c=.d)
+%.d: %.c
+ @set -e; rm -f $@; \
+ $(CC) $(MAKEDEP_FLAGS) $(CFLAGS) $< > $@.$$$$; \
+ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
+ rm -f $@.$$$$
+
+configure: configure.ac
+ autoconf
diff --git a/dmx512/src/configure.ac b/dmx512/src/configure.ac
new file mode 100644
index 0000000..ce4dc98
--- /dev/null
+++ b/dmx512/src/configure.ac
@@ -0,0 +1,181 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(dmx4pd.h)
+
+LIBNAME=dmx4pd
+
+dnl Checks for programs.
+AC_PROG_CC
+
+AC_SUBST(STK)
+AC_SUBST(DFLAGS)
+AC_SUBST(LFLAGS)
+AC_SUBST(EXT)
+AC_SUBST(LD)
+AC_SUBST(STRIP)
+AC_SUBST(STRIPFLAGS)
+AC_SUBST(REFERENCEPATH)
+AC_SUBST(PDLIBDIR)
+AC_SUBST(INCLUDES)
+AC_SUBST(LIBNAME)
+
+AC_SUBST(DMX4LINUX_LFLAGS)
+AC_SUBST(DMX4LINUX_CFLAGS)
+
+
+AC_ARG_WITH(pdversion, [ --with-pdversion=<ver> enforce a certain pd-version (e.g. 0.37)])
+AC_ARG_WITH(extension, [ --with-extension=<ext> enforce a certain extension for the dynamic library (e.g. dll)])
+
+
+dnl Checks for libraries.
+dnl Replace `main' with a function in -lc:
+AC_CHECK_LIB(c, main)
+AC_CHECK_LIB(crtdll, fclose)
+
+dnl Replace `main' with a function in -lm:
+AC_CHECK_LIB(m, main)
+dnl Replace `main' with a function in -lpthread:
+dnl AC_CHECK_LIB(pthread, main)
+dnl Replace `main' with a function in -lstk:
+dnl AC_CHECK_LIB(stk, main, STK=yes)
+
+
+AC_CHECK_LIB(dmx4linux, DMXsleep)
+if test "x$ac_cv_lib_dmx4linux_DMXsleep" = "xyes"; then
+ DMX4LINUX_LFLAGS="-ldmx4linux"
+fi
+
+dnl AC_CHECK_LIB(asound, snd_seq_close)
+dnl if test "x$ac_cv_lib_asound_snd_seq_close" = "xyes"; then
+dnl DFLAGS="-DHAVE_ALSA ${DFLAGS}"
+dnl fi
+
+if test "x$includedir" != "x"; then
+ for id in $includedir
+ do
+ if test -d $id; then INCLUDES="-I$id $INCLUDES"; fi
+ done
+fi
+if test "x$libdir" != "x"; then
+ for id in $libdir
+ do
+ if test -d $id; then LIBS="-L$id $LIBS"; fi
+ done
+fi
+
+AC_CHECK_LIB(pd, nullfn)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(stdlib.h stdio.h string.h math.h time.h sys/time.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_TIME
+
+dnl Checks for library functions.
+AC_FUNC_MMAP
+AC_CHECK_FUNCS(select socket strerror)
+
+dnl check for "-mms-bitfields" cflag
+dnl why is there no generic compiler-check for a given flag ?
+dnl it would make things so easy: AC_CHECK_FLAG([-mms-bitfields],,)
+AC_MSG_CHECKING("ms-bitfields")
+cat > conftest.c << EOF
+int main(){
+ return 0;
+}
+EOF
+if ${CC} ${INCLUDES} ${DFLAGS} -o conftest.o conftest.c ${CFLAGS} -mms-bitfields > /dev/null 2>&1
+then
+ echo "yes"
+ CFLAGS="${CFLAGS} -mms-bitfields"
+else
+ echo "no"
+fi
+
+
+### make-depend flags
+if test "x$ac_cv_c_compiler_gnu" = "xyes"; then
+ AC_SUBST(MAKEDEP_FLAGS, "-MM")
+else
+ AC_SUBST(MAKEDEP_FLAGS, "-M")
+fi
+
+dnl isn't there a better way to check for good linker/stripper ?
+
+dnl if we don't have $LD set, we set it to $(CC)
+dnl LD=${LD:=$CC}
+AC_CHECK_TOOL([LD], [ld], [${CC}])
+
+dnl if we don't have $STRIP set, we set it to ${host}-strip or strip
+
+dnl if we don't have $STRIP set, we set it to ${host}-strip or strip
+AC_CHECK_TOOL([STRIP], [strip], [true])
+AC_MSG_CHECKING([if strip is GNU strip])
+if $STRIP -V | grep GNU > /dev/null
+then
+ AC_SUBST(STRIPFLAGS, "--strip-unneeded")
+ AC_MSG_RESULT([yes])
+else
+ AC_SUBST(STRIPFLAGS,"-x")
+ AC_MSG_RESULT([no])
+fi
+
+dnl
+dnl OK, checks for machines are here now
+dnl
+if test `uname -s` = Linux;
+then
+ LFLAGS="-export_dynamic -shared"
+ CFLAGS="-fPIC $CFLAGS"
+ EXT=pd_linux
+fi
+
+dnl This should use '-bundle_loader /path/to/pd/bin/pd' instead of'-undefined suppress'
+dnl then strip might do something
+if test `uname -s` = Darwin;
+then
+ LD=cc
+ LFLAGS="-bundle -undefined suppress -flat_namespace"
+ EXT=pd_darwin
+ STRIPFLAGS=
+fi
+
+if test `uname | sed -e 's/^MINGW.*/NT/'` = NT;
+then
+ LD=gcc
+ INCLUDES="-I@prefix@/src"
+ DFLAGS="-D__WIN32__ ${DFLAGS}"
+ LFLAGS="-shared @prefix@/bin/pd.dll"
+ EXT=dll
+else
+ PDLIBDIR="/lib/pd"
+fi
+
+if test `uname -s` = IRIX64;
+then
+ LFLAGS="-n32 -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
+ -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
+ -shared -rdata_shared"
+ EXT=pd_irix6
+ dnl DFLAGS="-DUNIX -DIRIX6 ${DFLAGS}"
+ STRIPFLAGS="--strip-unneeded"
+fi
+
+if test `uname -s` = IRIX32;
+then
+ LFLAGS="-o32 -DUNIX -DIRIX -O2
+ -shared -rdata_shared"
+ EXT=pd_irix5
+ dnl DFLAGS="-DUNIX -DIRIX5 ${DFLAGS}"
+ STRIPFLAGS="--strip-unneeded"
+fi
+
+if test "x$with_extension" != "x"
+then
+ EXT=$with_extension
+fi
+
+
+AC_OUTPUT(Make.config)
+
+rm -f conftest.*
diff --git a/dmx512/src/dmx4pd.h b/dmx512/src/dmx4pd.h
new file mode 100644
index 0000000..0987926
--- /dev/null
+++ b/dmx512/src/dmx4pd.h
@@ -0,0 +1,34 @@
+
+/******************************************************
+ *
+ * dmx4pd - header file
+ *
+ * copyleft (c) IOhannes m zm-bölnig-A
+ *
+ * 0603:forum::f-bür::umläute:2008-A
+ *
+ * institute of electronic music and acoustics (iem)
+ *
+ ******************************************************
+ *
+ * license: GNU General Public License v.2
+ *
+ ******************************************************/
+
+#ifndef INCLUDE_DMX4PD_H__
+#define INCLUDE_DMX4PD_H__
+
+#ifndef DMX4PD_VERSION
+# define DMX4PD_VERSION __DATE__
+#endif
+
+
+
+#include "m_pd.h"
+
+#define DMX4PD_POSTBANNER \
+ post("DMX4PD ver %s: (c) 2008 IOhannes m zmölnig - iem @ kug", DMX4PD_VERSION);
+
+
+
+#endif /* INCLUDE_DMX4PD_H__ */
diff --git a/dmx512/src/dmxin.c b/dmx512/src/dmxin.c
new file mode 100644
index 0000000..9e9e1b4
--- /dev/null
+++ b/dmx512/src/dmxin.c
@@ -0,0 +1,47 @@
+/******************************************************
+ *
+ * dmxin - implementation file
+ *
+ * copyleft (c) IOhannes m zmölnig
+ *
+ * 0603:forum::für::umläute:2008
+ *
+ * institute of electronic music and acoustics (iem)
+ *
+ ******************************************************
+ *
+ * license: GNU General Public License v.2
+ *
+ ******************************************************/
+
+
+#include "dmx4pd.h"
+
+static t_class *dmxin_class;
+
+typedef struct _dmxin
+{
+ t_object x_obj;
+} t_dmxin;
+
+static void *dmxin_new(void)
+{
+ t_dmxin *x = (t_dmxin *)pd_new(dmxin_class);
+ return (x);
+}
+static void *dmxin_free(t_dmxin*x)
+{
+
+}
+
+void dmxin_setup(void)
+{
+ dmxin_class = class_new(gensym("dmxin"), (t_newmethod)dmxin_new, (t_method)dmxin_free,
+ sizeof(t_dmxin),
+ CLASS_NOINLET,
+ A_NULL);
+
+#ifdef DMX4PD_POSTBANNER
+ DMX4PD_POSTBANNER
+#endif
+}
diff --git a/dmx512/src/dmxout.c b/dmx512/src/dmxout.c
new file mode 100644
index 0000000..5fa17ba
--- /dev/null
+++ b/dmx512/src/dmxout.c
@@ -0,0 +1,156 @@
+/******************************************************
+ *
+ * dmxout - implementation file
+ *
+ * copyleft (c) IOhannes m zmölnig
+ *
+ * 0603:forum::für::umläute:2008
+ *
+ * institute of electronic music and acoustics (iem)
+ *
+ ******************************************************
+ *
+ * license: GNU General Public License v.2
+ *
+ ******************************************************/
+
+
+#include "dmx4pd.h"
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+
+
+#include <dmx/dmx.h>
+
+static t_class *dmxout_class;
+
+typedef struct _dmxout
+{
+ t_object x_obj;
+
+ t_inlet *x_portinlet;
+
+ int x_device;
+ t_float x_port;
+
+} t_dmxout;
+
+
+static void dmxout_doout(t_dmxout*x, short port, unsigned char value)
+{
+ dmx_t buffer[1] = {value};
+ if(x->x_device<=0) {
+ pd_error(x, "no DMX universe found");
+ return;
+ }
+
+ lseek (x->x_device, sizeof(buffer)*port, SEEK_SET); /* set to the current channel */
+ write (x->x_device, buffer, sizeof(buffer)); /* write the channel */
+}
+
+
+static void dmxout_close(t_dmxout*x)
+{
+ if(x->x_device>=0) {
+ close(x->x_device);
+ }
+ x->x_device=-1;
+}
+
+
+static void dmxout_open(t_dmxout*x, t_symbol*s_devname)
+{
+ int argc=2;
+ char *args[2] = {"--dmx", s_devname->s_name};
+ const char**argv=args;
+ char*devname="";
+ int fd;
+
+ if(s_devname && s_devname->s_name)
+ devname=s_devname->s_name;
+
+ // strncpy(args[0], "--dmx", MAXPDSTRING);
+ // strncpy(args[1], devname, MAXPDSTRING);
+
+ fd = open (DMXdev(&argc, argv), O_WRONLY);
+
+ if(fd!=-1) {
+ dmxout_close(x);
+ x->x_device=fd;
+ }
+}
+
+
+static void dmxout_float(t_dmxout*x, t_float f)
+{
+ unsigned char val=(unsigned char)f;
+ short port = (short)x->x_port;
+ if(f<0. || f>255.) {
+ pd_error(x, "value %f out of bounds [0..255]", f);
+ return;
+ }
+ if(x->x_port<0. || x->x_port>512.) {
+ pd_error(x, "port %f out of bounds [0..512]", x->x_port);
+ return;
+ }
+
+ dmxout_doout(x, port, val);
+}
+
+static void *dmxout_new(t_symbol*s, int argc, t_atom*argv)
+{
+ t_dmxout *x = (t_dmxout *)pd_new(dmxout_class);
+
+ t_symbol*devname=gensym("");
+
+ x->x_portinlet=floatinlet_new(&x->x_obj, &x->x_port);
+
+ x->x_device=-1;
+ x->x_port =0;
+
+ switch(argc) {
+ case 0: break;
+ case 1:
+ if(A_FLOAT==argv->a_type) {
+ x->x_port=atom_getfloat(argv);
+ } else {
+ devname=atom_getsymbol(argv);
+ }
+ break;
+ default:
+ if((A_FLOAT==(argv+0)->a_type) && (A_SYMBOL==(argv+1)->a_type)) {
+ x->x_port=atom_getfloat(argv+0);
+ devname=atom_getsymbol(argv+1);
+ } else if(A_FLOAT==(argv+1)->a_type && A_SYMBOL==(argv+0)->a_type) {
+ x->x_port=atom_getfloat(argv+1);
+ devname=atom_getsymbol (argv+0);
+ }
+ break;
+ }
+
+
+ dmxout_open(x, devname);
+ return (x);
+}
+
+static void *dmxout_free(t_dmxout*x)
+{
+
+}
+
+
+void dmxout_setup(void)
+{
+ dmxout_class = class_new(gensym("dmxout"), (t_newmethod)dmxout_new, (t_method)dmxout_free,
+ sizeof(t_dmxout),
+ 0,
+ A_GIMME, A_NULL);
+
+ class_addfloat(dmxout_class, dmxout_float);
+
+
+ post("DMX4PD (%s): (c) 2008 IOhannes m zmölnig - iem @ kug", DMX4PD_VERSION);
+}