aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hidio.c38
-rw-r--r--hidio.h12
-rw-r--r--hidio_darwin.c2
-rw-r--r--hidio_types.c5
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;i<element_count[x->x_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 <hans@at.or.at> */
- 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)