From 4c0c9ca9e81e148e0e9ed832c2039af810dd7172 Mon Sep 17 00:00:00 2001 From: Olaf Matthes Date: Fri, 1 Dec 2006 16:27:39 +0000 Subject: some more threading related changes, changed some output values from type float to int in Max version svn path=/trunk/externals/io/hidio/; revision=6562 --- hidio.c | 35 ++++++++++++++++++++++++++++------- hidio.h | 7 ++++--- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/hidio.c b/hidio.c index 905c498..c4f724b 100644 --- a/hidio.c +++ b/hidio.c @@ -112,7 +112,11 @@ void debug_error(t_hidio *x, t_int message_debug_level, const char *fmt, ...) static void output_status(t_hidio *x, t_symbol *selector, t_float output_value) { t_atom *output_atom = (t_atom *)getbytes(sizeof(t_atom)); +#ifdef PD SETFLOAT(output_atom, output_value); +#else + atom_setlong(output_atom, output_value); +#endif outlet_anything( x->x_status_outlet, selector, 1, output_atom); freebytes(output_atom,sizeof(t_atom)); } @@ -148,8 +152,13 @@ static void output_element_ranges(t_hidio *x) { SETSYMBOL(output_data, element[x->x_device_number][i]->type); SETSYMBOL(output_data + 1, element[x->x_device_number][i]->name); +#ifdef PD SETFLOAT(output_data + 2, element[x->x_device_number][i]->min); SETFLOAT(output_data + 3, element[x->x_device_number][i]->max); +#else + atom_setlong(output_data + 2, element[x->x_device_number][i]->min); + atom_setlong(output_data + 3, element[x->x_device_number][i]->max); +#endif outlet_anything(x->x_status_outlet, ps_range, 4, output_data); } } @@ -364,7 +373,6 @@ t_int hidio_close(t_hidio *x) static void hidio_open(t_hidio *x, t_symbol *s, int argc, t_atom *argv) { debug_print(LOG_DEBUG,"hid_%s",s->s_name); -/* store running state to be restored after the device has been opened */ short device_number; pthread_mutex_lock(&x->x_mutex); @@ -424,12 +432,10 @@ t_int hidio_read(t_hidio *x, int fd) static void hidio_info(t_hidio *x) { - output_open_status(x); - output_device_number(x); - output_device_count(x); - output_poll_time(x); - output_element_ranges(x); - hidio_platform_specific_info(x); + pthread_mutex_lock(&x->x_mutex); + x->x_requestcode = REQUEST_INFO; + pthread_cond_signal(&x->x_requestcondition); + pthread_mutex_unlock(&x->x_mutex); } static void hidio_float(t_hidio* x, t_floatarg f) @@ -473,6 +479,7 @@ static void *hidio_child(void *zz) else if (x->x_requestcode == REQUEST_OPEN) { short device_number = x->x_device_number; + /* store running state to be restored after the device has been opened */ t_int started = x->x_started; int err; pthread_mutex_unlock(&x->x_mutex); @@ -512,6 +519,20 @@ static void *hidio_child(void *zz) x->x_requestcode = REQUEST_NOTHING; pthread_cond_signal(&x->x_answercondition); } + else if (x->x_requestcode == REQUEST_INFO) + { + pthread_mutex_unlock(&x->x_mutex); + output_open_status(x); + output_device_number(x); + output_device_count(x); + output_poll_time(x); + output_element_ranges(x); + hidio_platform_specific_info(x); + pthread_mutex_lock(&x->x_mutex); + if (x->x_requestcode == REQUEST_INFO) + x->x_requestcode = REQUEST_NOTHING; + pthread_cond_signal(&x->x_answercondition); + } else if (x->x_requestcode == REQUEST_CLOSE) { pthread_mutex_unlock(&x->x_mutex); diff --git a/hidio.h b/hidio.h index 9461358..eab0cf0 100644 --- a/hidio.h +++ b/hidio.h @@ -35,7 +35,7 @@ typedef void t_clock; #define HIDIO_MAJOR_VERSION 0 #define HIDIO_MINOR_VERSION 0 -/* static char *version = "$Revision: 1.3 $"; */ +/* static char *version = "$Revision: 1.4 $"; */ /*------------------------------------------------------------------------------ * GLOBAL DEFINES @@ -61,8 +61,9 @@ typedef void t_clock; #define REQUEST_OPEN 1 #define REQUEST_READ 2 #define REQUEST_SEND 3 -#define REQUEST_CLOSE 4 -#define REQUEST_QUIT 5 +#define REQUEST_INFO 4 +#define REQUEST_CLOSE 5 +#define REQUEST_QUIT 6 /*------------------------------------------------------------------------------ -- cgit v1.2.1