aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlaf Matthes <olafmatt@users.sourceforge.net>2006-12-01 16:27:39 +0000
committerOlaf Matthes <olafmatt@users.sourceforge.net>2006-12-01 16:27:39 +0000
commit4c0c9ca9e81e148e0e9ed832c2039af810dd7172 (patch)
treea57d9d5c56027bc34fb5c0faa911f8922a55e9df
parent9fe82926e2b75526f6752d82baf7af792f31dbe5 (diff)
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
-rw-r--r--hidio.c35
-rw-r--r--hidio.h7
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
/*------------------------------------------------------------------------------