From 1bcbca14315920e88bb15ba0c73860443dd601ef Mon Sep 17 00:00:00 2001 From: Olaf Matthes Date: Fri, 8 Dec 2006 11:28:25 +0000 Subject: some changes to compile for Max again on OS X, still crashes when starting to poll svn path=/trunk/externals/io/hidio/; revision=6736 --- hidio.c | 38 +++++++++++++++++++++++++++++++------- hidio.h | 12 ++++++------ hidio_darwin.c | 2 +- hidio_types.c | 5 ++++- 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/hidio.c b/hidio.c index 9ec25fb..f732d43 100644 --- a/hidio.c +++ b/hidio.c @@ -131,7 +131,7 @@ static void output_status(t_hidio *x, t_symbol *selector, t_float output_value) #ifdef PD SETFLOAT(output_atom, output_value); #else - atom_setlong(output_atom, output_value); + atom_setlong(output_atom, (long)output_value); #endif /* PD */ outlet_anything( x->x_status_outlet, selector, 1, output_atom); freebytes(output_atom,sizeof(t_atom)); @@ -166,12 +166,14 @@ static void output_element_ranges(t_hidio *x) for(i=0;ix_device_number];++i) { +#ifdef PD 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_setsym(output_data, element[x->x_device_number][i]->type); + atom_setsym(output_data + 1, element[x->x_device_number][i]->name); 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 /* PD */ @@ -291,10 +293,17 @@ void hidio_output_event(t_hidio *x, t_hid_element *output_data) (output_data->value != output_data->previous_value) ) { t_atom event_data[3]; +#ifdef PD SETSYMBOL(event_data, output_data->name); SETFLOAT(event_data + 1, output_data->instance); SETFLOAT(event_data + 2, output_data->value); - outlet_anything(x->x_data_outlet,output_data->type,3,event_data); +#else + atom_setsym(event_data, output_data->name); + atom_setsym(event_data, output_data->name); + atom_setlong(event_data + 1, (long)output_data->instance); + atom_setlong(event_data + 2, (long)output_data->value); +#endif + outlet_anything(x->x_data_outlet, output_data->type, 3, event_data); } } @@ -424,10 +433,8 @@ t_int hidio_child_read(t_hidio *x) #ifdef PD double right_now = clock_getlogicaltime(); #else -/* TODO: this should use gettime() not systime_ms(). This needs to be logical - * time, not system time because the idea is that only one instance should get - * events from the OS in each slice of logical time */ - double right_now = (double)systime_ms(); + double right_now; + clock_getftime(&right_now); #endif /* PD */ t_hid_element *current_element; @@ -469,6 +476,14 @@ static void *hidio_tick(t_hidio *x) return NULL; } +static void hidio_print(t_hidio *x) +{ + pthread_mutex_lock(&x->x_mutex); + x->x_requestcode = REQUEST_PRINT; + pthread_cond_signal(&x->x_requestcondition); + pthread_mutex_unlock(&x->x_mutex); +} + static void hidio_info(t_hidio *x) { pthread_mutex_lock(&x->x_mutex); @@ -579,6 +594,15 @@ static void *hidio_child(void *zz) x->x_requestcode = REQUEST_NOTHING; pthread_cond_signal(&x->x_answercondition); } + else if (x->x_requestcode == REQUEST_PRINT) + { + pthread_mutex_unlock(&x->x_mutex); + hidio_doprint(x); + pthread_mutex_lock(&x->x_mutex); + if (x->x_requestcode == REQUEST_PRINT) + x->x_requestcode = REQUEST_NOTHING; + pthread_cond_signal(&x->x_answercondition); + } else if (x->x_requestcode == REQUEST_INFO) { pthread_mutex_unlock(&x->x_mutex); diff --git a/hidio.h b/hidio.h index 1b63aba..ba8f843 100644 --- a/hidio.h +++ b/hidio.h @@ -42,7 +42,7 @@ typedef void t_clock; #define HIDIO_MAJOR_VERSION 0 #define HIDIO_MINOR_VERSION 0 -/* static char *version = "$Revision: 1.9 $"; */ +/* static char *version = "$Revision: 1.10 $"; */ /*------------------------------------------------------------------------------ * MACRO DEFINES @@ -76,9 +76,10 @@ typedef void t_clock; #define REQUEST_OPEN 1 #define REQUEST_READ 2 #define REQUEST_SEND 3 -#define REQUEST_INFO 4 -#define REQUEST_CLOSE 5 -#define REQUEST_QUIT 6 +#define REQUEST_PRINT 4 +#define REQUEST_INFO 5 +#define REQUEST_CLOSE 6 +#define REQUEST_QUIT 7 /*------------------------------------------------------------------------------ @@ -183,7 +184,7 @@ t_int hidio_open_device(t_hidio *x, short device_number); t_int hidio_close_device(t_hidio *x); void hidio_build_device_list(void); void hidio_get_events(t_hidio *x); -void hidio_print(t_hidio* x); /* print info to the console */ +void hidio_doprint(t_hidio* x); /* print info to the console */ void hidio_platform_specific_info(t_hidio* x); /* device info on the status outlet */ void hidio_platform_specific_free(t_hidio *x); short get_device_number_by_id(unsigned short vendor_id, unsigned short product_id); @@ -192,7 +193,6 @@ short get_device_number_from_usage(short device_number, unsigned short usage_page, unsigned short usage); - /* cross-platform force feedback functions */ t_int hidio_ff_autocenter(t_hidio *x, t_float value); t_int hidio_ff_gain(t_hidio *x, t_float value); diff --git a/hidio_darwin.c b/hidio_darwin.c index d85093b..0905d5f 100644 --- a/hidio_darwin.c +++ b/hidio_darwin.c @@ -738,7 +738,7 @@ void hidio_build_device_list(void) } /* TODO: this should be dumped for [devices( and [elements( messages */ -void hidio_print(t_hidio *x) +void hidio_doprint(t_hidio *x) { if( !HIDHaveDeviceList() ) hidio_build_device_list(); hidio_print_device_list(x); diff --git a/hidio_types.c b/hidio_types.c index 43c0708..4a69bda 100644 --- a/hidio_types.c +++ b/hidio_types.c @@ -1,5 +1,8 @@ - +#ifdef PD #include "m_pd.h" +#else +#include "ext.h" +#endif #include "hidio.h" //#define DEBUG(x) -- cgit v1.2.1