aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2008-07-02 11:40:32 +0000
committerIOhannes m zmölnig <zmoelnig@iem.at>2015-10-14 15:08:24 +0200
commit773caf6f63064f4bbffcf033d87688ac0d17fd17 (patch)
treec1e59252f4033e15daa60b3480bc0e14a1c6abbc
parent780c42cc7f0dd9da8360d8a57bc97ab0527aa67b (diff)
made the threaded version the default; renamed the blocking version to [dmxout_b]
svn path=/trunk/externals/iem/dmx512/; revision=10134
-rw-r--r--dmx512/src/dmxout.c79
-rw-r--r--dmx512/src/dmxout_b.c80
2 files changed, 78 insertions, 81 deletions
diff --git a/dmx512/src/dmxout.c b/dmx512/src/dmxout.c
index a35fb1b..18358ce 100644
--- a/dmx512/src/dmxout.c
+++ b/dmx512/src/dmxout.c
@@ -1,6 +1,6 @@
/******************************************************
*
- * dmxout_threaded - implementation file
+ * dmxout - implementation file
*
* copyleft (c) IOhannes m zmölnig
*
@@ -23,8 +23,8 @@
#include <pthread.h>
-static t_class *dmxout_threaded_class;
-static t_class *dmxout_threaded_class2;
+static t_class *dmxout_class;
+static t_class *dmxout_class2;
#define NUM_DMXVALUES 512
@@ -34,7 +34,7 @@ static dmx_t g_values[NUM_DMXVALUES];
static int g_device;
static int g_thread_running, g_thread_continue;
-typedef struct _dmxout_threaded
+typedef struct _dmxout
{
t_object x_obj;
@@ -43,10 +43,10 @@ typedef struct _dmxout_threaded
int x_portrange;
-} t_dmxout_threaded;
+} t_dmxout;
-static void *dmxout_threaded_thread(void*you)
+static void *dmxout_thread(void*you)
{
pthread_mutex_t *mutex=g_mutex;
struct timeval timout;
@@ -66,12 +66,11 @@ static void *dmxout_threaded_thread(void*you)
pthread_mutex_unlock(g_mutex);
}
g_thread_running=0;
- printf("quit thread");
return NULL;
}
-static void dmxout_threaded_close()
+static void dmxout_close()
{
if(g_device>=0) {
close(g_device);
@@ -97,7 +96,7 @@ static void dmxout_threaded_close()
}
-static void dmxout_threaded_open(t_symbol*s_devname)
+static void dmxout_open(t_symbol*s_devname)
{
int argc=2;
const char *args[2] = {"--dmx", s_devname->s_name};
@@ -105,20 +104,20 @@ static void dmxout_threaded_open(t_symbol*s_devname)
const char*devname="";
int fd;
- dmxout_threaded_close();
+ dmxout_close();
if(s_devname && s_devname->s_name)
devname=s_devname->s_name;
// strncpy(args[0], "--dmx", MAXPDSTRING);
// strncpy(args[1], devname, MAXPDSTRING);
- verbose(2, "[dmxout_threaded]: trying to open '%s'", args[1]);
+ verbose(2, "[dmxout]: trying to open '%s'", args[1]);
devname=DMXdev(&argc, argv);
if(!devname){
error("couldn't find DMX device");
return;
}
- verbose(1, "[dmxout_threaded] opening %s", devname);
+ verbose(1, "[dmxout] opening %s", devname);
fd = open (devname, O_WRONLY);
@@ -132,14 +131,14 @@ static void dmxout_threaded_open(t_symbol*s_devname)
error("couldn't create mutex");
} else {
g_thread_continue = 1;
- pthread_create(&g_thread_id, 0, dmxout_threaded_thread, NULL);
+ pthread_create(&g_thread_id, 0, dmxout_thread, NULL);
}
} else {
error("failed to open DMX-device '%s'",devname);
}
}
-static void dmxout_threaded_doout(t_dmxout_threaded*x) {
+static void dmxout_doout(t_dmxout*x) {
if(g_device<=0) {
pd_error(x, "no DMX universe found");
return;
@@ -147,14 +146,14 @@ static void dmxout_threaded_doout(t_dmxout_threaded*x) {
}
-static void dmxout_threaded_doout1(t_dmxout_threaded*x, short port, unsigned char value)
+static void dmxout_doout1(t_dmxout*x, short port, unsigned char value)
{
g_values[port]=value;
- dmxout_threaded_doout(x);
+ dmxout_doout(x);
}
-static void dmxout_threaded_float(t_dmxout_threaded*x, t_float f)
+static void dmxout_float(t_dmxout*x, t_float f)
{
unsigned char val=(unsigned char)f;
short port = (short)x->x_port;
@@ -167,10 +166,10 @@ static void dmxout_threaded_float(t_dmxout_threaded*x, t_float f)
return;
}
- dmxout_threaded_doout1(x, port, val);
+ dmxout_doout1(x, port, val);
}
-static void dmxout_threaded_list(t_dmxout_threaded*x, t_symbol*s, int argc, t_atom*argv)
+static void dmxout_list(t_dmxout*x, t_symbol*s, int argc, t_atom*argv)
{
int count=(argc<x->x_portrange)?argc:x->x_portrange;
int i=0;
@@ -195,10 +194,10 @@ static void dmxout_threaded_list(t_dmxout_threaded*x, t_symbol*s, int argc, t_at
pd_error(x, "%d valu%s out of bound [0..255]", errors, (1==errors)?"e":"es");
}
- dmxout_threaded_doout(x);
+ dmxout_doout(x);
}
-static void dmxout_threaded_port(t_dmxout_threaded*x, t_float f_baseport, t_floatarg f_portrange)
+static void dmxout_port(t_dmxout*x, t_float f_baseport, t_floatarg f_portrange)
{
short baseport =(short)f_baseport;
short portrange=(short)f_portrange;
@@ -224,23 +223,23 @@ static void dmxout_threaded_port(t_dmxout_threaded*x, t_float f_baseport, t_floa
x->x_portrange=portrange;
}
-static void *dmxout_threaded_new(t_symbol*s, int argc, t_atom*argv)
+static void *dmxout_new(t_symbol*s, int argc, t_atom*argv)
{
t_floatarg baseport=0.f, portrange=0.f;
- t_dmxout_threaded *x = 0;
+ t_dmxout *x = 0;
switch(argc) {
case 2:
- x=(t_dmxout_threaded *)pd_new(dmxout_threaded_class2);
+ x=(t_dmxout *)pd_new(dmxout_class2);
x->x_portinlet=inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("port"));
baseport=atom_getfloat(argv);
portrange=atom_getfloat(argv+1);
- dmxout_threaded_port(x, baseport, portrange);
+ dmxout_port(x, baseport, portrange);
break;
case 1:
baseport=atom_getfloat(argv);
case 0:
- x=(t_dmxout_threaded *)pd_new(dmxout_threaded_class);
+ x=(t_dmxout *)pd_new(dmxout_class);
x->x_portinlet=floatinlet_new(&x->x_obj, &x->x_port);
x->x_port = baseport;
x->x_portrange = -1;
@@ -251,12 +250,12 @@ static void *dmxout_threaded_new(t_symbol*s, int argc, t_atom*argv)
return (x);
}
-static void *dmxout_threaded_free(t_dmxout_threaded*x)
+static void *dmxout_free(t_dmxout*x)
{
- // dmxout_threaded_close();
+ // dmxout_close();
}
-static void dmxout_threaded_init(void) {
+static void dmxout_init(void) {
int i=0;
g_thread_id=0;
g_mutex=NULL;
@@ -266,37 +265,35 @@ static void dmxout_threaded_init(void) {
g_thread_running=0;
g_thread_continue=0;
- dmxout_threaded_open(gensym(""));
-
- post("running thread %d for device %d", g_thread_id, g_device);
+ dmxout_open(gensym(""));
}
-void dmxout_threaded_setup(void)
+void dmxout_setup(void)
{
#ifdef DMX4PD_POSTBANNER
DMX4PD_POSTBANNER;
#endif
- dmxout_threaded_class = class_new(gensym("dmxout_threaded"), (t_newmethod)dmxout_threaded_new, (t_method)dmxout_threaded_free,
- sizeof(t_dmxout_threaded),
+ 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_threaded_class, dmxout_threaded_float);
+ class_addfloat(dmxout_class, dmxout_float);
- dmxout_threaded_class2 = class_new(gensym("dmxout_threaded"), (t_newmethod)dmxout_threaded_new, (t_method)dmxout_threaded_free,
- sizeof(t_dmxout_threaded),
+ dmxout_class2 = class_new(gensym("dmxout"), (t_newmethod)dmxout_new, (t_method)dmxout_free,
+ sizeof(t_dmxout),
0,
A_GIMME, A_NULL);
- class_addlist(dmxout_threaded_class2, dmxout_threaded_list);
+ class_addlist(dmxout_class2, dmxout_list);
- class_addmethod(dmxout_threaded_class2, (t_method)dmxout_threaded_port, gensym("port"),
+ class_addmethod(dmxout_class2, (t_method)dmxout_port, gensym("port"),
A_FLOAT, A_DEFFLOAT, A_NULL);
- dmxout_threaded_init();
+ dmxout_init();
}
diff --git a/dmx512/src/dmxout_b.c b/dmx512/src/dmxout_b.c
index 968110d..9623397 100644
--- a/dmx512/src/dmxout_b.c
+++ b/dmx512/src/dmxout_b.c
@@ -1,6 +1,8 @@
/******************************************************
*
- * dmxout - implementation file
+ * dmxout_b - implementation file
+ *
+ * this is the "blocking" version
*
* copyleft (c) IOhannes m zmölnig
*
@@ -20,12 +22,12 @@
#include <string.h>
#include <stdio.h>
-static t_class *dmxout_class;
-static t_class *dmxout_class2;
+static t_class *dmxout_b_class;
+static t_class *dmxout_b_class2;
#define NUM_DMXVALUES 512
-typedef struct _dmxout
+typedef struct _dmxout_b
{
t_object x_obj;
@@ -36,15 +38,15 @@ typedef struct _dmxout
int x_portrange;
dmx_t x_values[NUM_DMXVALUES];
-} t_dmxout;
+} t_dmxout_b;
-static void dmxout_clearbuf(t_dmxout*x)
+static void dmxout_b_clearbuf(t_dmxout_b*x)
{
int i=0;
for(i=0; i<NUM_DMXVALUES; i++) x->x_values[i]=0;
}
-static void dmxout_close(t_dmxout*x)
+static void dmxout_b_close(t_dmxout_b*x)
{
if(x->x_device>=0) {
close(x->x_device);
@@ -53,7 +55,7 @@ static void dmxout_close(t_dmxout*x)
}
-static void dmxout_open(t_dmxout*x, t_symbol*s_devname)
+static void dmxout_b_open(t_dmxout_b*x, t_symbol*s_devname)
{
int argc=2;
const char *args[2] = {"--dmx", s_devname->s_name};
@@ -61,32 +63,30 @@ static void dmxout_open(t_dmxout*x, t_symbol*s_devname)
const char*devname="";
int fd;
- dmxout_close(x);
+ dmxout_b_close(x);
if(s_devname && s_devname->s_name)
devname=s_devname->s_name;
- // strncpy(args[0], "--dmx", MAXPDSTRING);
- // strncpy(args[1], devname, MAXPDSTRING);
- verbose(2, "[dmxout]: trying to open '%s'", args[1]);
+ verbose(2, "[dmxout_b]: trying to open '%s'", args[1]);
devname=DMXdev(&argc, argv);
if(!devname){
pd_error(x, "couldn't find DMX device");
return;
}
- verbose(1, "[dmxout] opening %s", devname);
+ verbose(1, "[dmxout_b] opening %s", devname);
fd = open (devname, O_WRONLY | O_NONBLOCK);
if(fd!=-1) {
x->x_device=fd;
- dmxout_clearbuf(x);
+ dmxout_b_clearbuf(x);
} else {
pd_error(x, "failed to open DMX-device '%s'",devname);
}
}
-static void dmxout_doout(t_dmxout*x) {
+static void dmxout_b_doout(t_dmxout_b*x) {
int device = x->x_device;
if(device<=0) {
pd_error(x, "no DMX universe found");
@@ -98,14 +98,14 @@ static void dmxout_doout(t_dmxout*x) {
}
-static void dmxout_doout1(t_dmxout*x, short port, unsigned char value)
+static void dmxout_b_doout1(t_dmxout_b*x, short port, unsigned char value)
{
x->x_values[port]=value;
- dmxout_doout(x);
+ dmxout_b_doout(x);
}
-static void dmxout_float(t_dmxout*x, t_float f)
+static void dmxout_b_float(t_dmxout_b*x, t_float f)
{
unsigned char val=(unsigned char)f;
short port = (short)x->x_port;
@@ -118,10 +118,10 @@ static void dmxout_float(t_dmxout*x, t_float f)
return;
}
- dmxout_doout1(x, port, val);
+ dmxout_b_doout1(x, port, val);
}
-static void dmxout_list(t_dmxout*x, t_symbol*s, int argc, t_atom*argv)
+static void dmxout_b_list(t_dmxout_b*x, t_symbol*s, int argc, t_atom*argv)
{
int count=(argc<x->x_portrange)?argc:x->x_portrange;
int i=0;
@@ -146,10 +146,10 @@ static void dmxout_list(t_dmxout*x, t_symbol*s, int argc, t_atom*argv)
pd_error(x, "%d valu%s out of bound [0..255]", errors, (1==errors)?"e":"es");
}
- dmxout_doout(x);
+ dmxout_b_doout(x);
}
-static void dmxout_port(t_dmxout*x, t_float f_baseport, t_floatarg f_portrange)
+static void dmxout_b_port(t_dmxout_b*x, t_float f_baseport, t_floatarg f_portrange)
{
short baseport =(short)f_baseport;
short portrange=(short)f_portrange;
@@ -175,23 +175,23 @@ static void dmxout_port(t_dmxout*x, t_float f_baseport, t_floatarg f_portrange)
x->x_portrange=portrange;
}
-static void *dmxout_new(t_symbol*s, int argc, t_atom*argv)
+static void *dmxout_b_new(t_symbol*s, int argc, t_atom*argv)
{
t_floatarg baseport=0.f, portrange=0.f;
- t_dmxout *x = 0;
+ t_dmxout_b *x = 0;
switch(argc) {
case 2:
- x=(t_dmxout *)pd_new(dmxout_class2);
+ x=(t_dmxout_b *)pd_new(dmxout_b_class2);
x->x_portinlet=inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("port"));
baseport=atom_getfloat(argv);
portrange=atom_getfloat(argv+1);
- dmxout_port(x, baseport, portrange);
+ dmxout_b_port(x, baseport, portrange);
break;
case 1:
baseport=atom_getfloat(argv);
case 0:
- x=(t_dmxout *)pd_new(dmxout_class);
+ x=(t_dmxout_b *)pd_new(dmxout_b_class);
x->x_portinlet=floatinlet_new(&x->x_obj, &x->x_port);
x->x_port = baseport;
x->x_portrange = -1;
@@ -201,40 +201,40 @@ static void *dmxout_new(t_symbol*s, int argc, t_atom*argv)
}
x->x_device=-1;
- dmxout_open(x, gensym(""));
+ dmxout_b_open(x, gensym(""));
return (x);
}
-static void *dmxout_free(t_dmxout*x)
+static void *dmxout_b_free(t_dmxout_b*x)
{
- dmxout_close(x);
+ dmxout_b_close(x);
}
-void dmxout_setup(void)
+void dmxout_b_setup(void)
{
#ifdef DMX4PD_POSTBANNER
DMX4PD_POSTBANNER;
#endif
- dmxout_class = class_new(gensym("dmxout"), (t_newmethod)dmxout_new, (t_method)dmxout_free,
- sizeof(t_dmxout),
+ dmxout_b_class = class_new(gensym("dmxout_b"), (t_newmethod)dmxout_b_new, (t_method)dmxout_b_free,
+ sizeof(t_dmxout_b),
0,
A_GIMME, A_NULL);
- class_addfloat(dmxout_class, dmxout_float);
- class_addmethod(dmxout_class, (t_method)dmxout_open, gensym("open"), A_SYMBOL, A_NULL);
+ class_addfloat(dmxout_b_class, dmxout_b_float);
+ class_addmethod(dmxout_b_class, (t_method)dmxout_b_open, gensym("open"), A_SYMBOL, A_NULL);
- dmxout_class2 = class_new(gensym("dmxout"), (t_newmethod)dmxout_new, (t_method)dmxout_free,
- sizeof(t_dmxout),
+ dmxout_b_class2 = class_new(gensym("dmxout_b"), (t_newmethod)dmxout_b_new, (t_method)dmxout_b_free,
+ sizeof(t_dmxout_b),
0,
A_GIMME, A_NULL);
- class_addlist(dmxout_class2, dmxout_list);
+ class_addlist(dmxout_b_class2, dmxout_b_list);
- class_addmethod(dmxout_class2, (t_method)dmxout_port, gensym("port"),
+ class_addmethod(dmxout_b_class2, (t_method)dmxout_b_port, gensym("port"),
A_FLOAT, A_DEFFLOAT, A_NULL);
- class_addmethod(dmxout_class2, (t_method)dmxout_open, gensym("open"), A_SYMBOL, A_NULL);
+ class_addmethod(dmxout_b_class2, (t_method)dmxout_b_open, gensym("open"), A_SYMBOL, A_NULL);
}