From 86c89e24f57b63883775f932c0a2354b5fe4660c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 13 Jun 2008 11:36:22 +0000 Subject: dmx4pd (currently linux only) svn path=/trunk/externals/iem/dmx512/; revision=9989 --- dmx512/src/dmxin.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 dmx512/src/dmxin.c (limited to 'dmx512/src/dmxin.c') 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 +} -- cgit v1.2.1 From 44824cfa333691b8e300adbc47bcadcde6691979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 13 Jun 2008 13:39:54 +0000 Subject: tell that [dmxin] isn't yet there... svn path=/trunk/externals/iem/dmx512/; revision=9993 --- dmx512/src/dmxin.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'dmx512/src/dmxin.c') diff --git a/dmx512/src/dmxin.c b/dmx512/src/dmxin.c index 9e9e1b4..cfccd4b 100644 --- a/dmx512/src/dmxin.c +++ b/dmx512/src/dmxin.c @@ -17,21 +17,65 @@ #include "dmx4pd.h" + static t_class *dmxin_class; typedef struct _dmxin { t_object x_obj; + int x_device; + + t_outlet*x_outlet1, *x_outlet2; } t_dmxin; + + + +static void dmxin_close(t_dmxin*x) +{ + if(x->x_device>=0) { + close(x->x_device); + } + x->x_device=-1; +} + + +static void dmxin_open(t_dmxin*x, t_symbol*s_devname) +{ + int argc=2; + const 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 (DMXINdev(&argc, argv), O_RDONLY); + + if(fd!=-1) { + dmxin_close(x); + x->x_device=fd; + } +} + + static void *dmxin_new(void) { - t_dmxin *x = (t_dmxin *)pd_new(dmxin_class); - return (x); + if(0) { + t_dmxin *x = (t_dmxin *)pd_new(dmxin_class); + return (x); + } else { + error("[dmxin] not yet implemented"); + return 0; + } } static void *dmxin_free(t_dmxin*x) { - + dmxin_close(x); } void dmxin_setup(void) -- cgit v1.2.1 From a1130c53ea736d68d8d2a260d80a7e182a638813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 13 Jun 2008 14:36:24 +0000 Subject: ... svn path=/trunk/externals/iem/dmx512/; revision=9997 --- dmx512/src/dmxin.c | 74 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 13 deletions(-) (limited to 'dmx512/src/dmxin.c') diff --git a/dmx512/src/dmxin.c b/dmx512/src/dmxin.c index cfccd4b..c009570 100644 --- a/dmx512/src/dmxin.c +++ b/dmx512/src/dmxin.c @@ -17,6 +17,10 @@ #include "dmx4pd.h" +#include +#include +#include +#include static t_class *dmxin_class; @@ -24,12 +28,43 @@ typedef struct _dmxin { t_object x_obj; int x_device; + int x_port; - t_outlet*x_outlet1, *x_outlet2; -} t_dmxin; + dmx_t x_dmxbuffer[512]; + t_outlet*x_outlet1, *x_outlet2; +} t_dmxin; +static void dmx_doread(t_dmxin*x) { + int dmxin=x->x_device; + fd_set readset; + post("dmxin_doread: %d", dmxin); + if(dmxin<=0)return; + + FD_ZERO(&readset); + FD_SET(dmxin, &readset); + FD_SET(0, &readset); + + int n=select(dmxin+1, &readset, NULL,NULL, NULL); + if(n>0 && FD_ISSET(dmxin, &readset)) { + dmx_t dmxbuffer[512]; + int i=0; + lseek (dmxin, 0, SEEK_SET); + n=read (dmxin, dmxbuffer, sizeof(dmxbuffer)); + for(i=0; i<512; i+=2) { + int c=dmxbuffer[i]; + if(c!=x->x_dmxbuffer[i]) { + x->x_dmxbuffer[i]=c; + post("read %03d @ %03d", c, i); + } + } + } +} +static void dmxin_bang(t_dmxin*x) +{ + dmx_doread(x); +} static void dmxin_close(t_dmxin*x) { @@ -43,7 +78,7 @@ static void dmxin_close(t_dmxin*x) static void dmxin_open(t_dmxin*x, t_symbol*s_devname) { int argc=2; - const char *args[2] = {"--dmx", s_devname->s_name}; + const char *args[2] = {"--dmxin", s_devname->s_name}; const char**argv=args; char*devname=""; int fd; @@ -65,15 +100,26 @@ static void dmxin_open(t_dmxin*x, t_symbol*s_devname) static void *dmxin_new(void) { - if(0) { - t_dmxin *x = (t_dmxin *)pd_new(dmxin_class); - return (x); - } else { - error("[dmxin] not yet implemented"); - return 0; + int i=0; + t_dmxin *x = (t_dmxin *)pd_new(dmxin_class); + + x->x_device=0; + x->x_port=0; + + for(i=0; ix_dmxbuffer); i++) { + x->x_dmxbuffer[i]=0; } + + + x->x_outlet1=outlet_new(&x->x_obj, &s_float); + x->x_outlet2=outlet_new(&x->x_obj, &s_float); + + + + dmxin_open(x, gensym("")); + return (x); } -static void *dmxin_free(t_dmxin*x) +static void dmxin_free(t_dmxin*x) { dmxin_close(x); } @@ -82,10 +128,12 @@ void dmxin_setup(void) { dmxin_class = class_new(gensym("dmxin"), (t_newmethod)dmxin_new, (t_method)dmxin_free, sizeof(t_dmxin), - CLASS_NOINLET, + 0, A_NULL); - + + class_addbang(dmxin_class, dmxin_bang); + #ifdef DMX4PD_POSTBANNER - DMX4PD_POSTBANNER + DMX4PD_POSTBANNER; #endif } -- cgit v1.2.1