Update of /cvsroot/pure-data/externals/hcs/hid
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18981
Modified Files:
TODO buttongate-help.pd hid-help.pd hid.c hid.h hid_darwin.c
hid_linux.c joystick.pd keyboard-help.pd keygate-help.pd
mouse-help.pd
Log Message:
fixed a number of annoying bugs in MacOS X; cleaned up code; now multiple [hid]s work at the same time
Index: keyboard-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/keyboard-help.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** keyboard-help.pd 27 Nov 2004 19:29:34 -0000 1.1
--- keyboard-help.pd 28 Nov 2004 01:27:47 -0000 1.2
***************
*** 1,4 ****
! #N canvas 109 184 569 474 10;
! #X obj 168 91 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 1 1
;
#X obj 11 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1
--- 1,4 ----
! #N canvas 109 184 567 478 10;
! #X obj 168 91 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0 1
;
#X obj 11 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1
***************
*** 55,59 ****
#X obj 368 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
1;
! #X obj 389 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 1
1;
#X obj 410 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
--- 55,59 ----
#X obj 368 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
1;
! #X obj 389 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
1;
#X obj 410 369 tgl 20 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
***************
*** 77,80 ****
--- 77,81 ----
key_12 key_13 key_14 key_15 key_16 key_17 key_18 key_19 key_20 key_21
key_22 key_23 key_24 key_25 key_26 key_27;
+ #X obj 519 3 pddp;
#X connect 0 0 16 0;
#X connect 4 0 2 0;
Index: hid-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid-help.pd,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** hid-help.pd 16 Nov 2004 01:35:35 -0000 1.12
--- hid-help.pd 28 Nov 2004 01:27:47 -0000 1.13
***************
*** 1,19 ****
! #N canvas 307 79 928 648 10;
! #X msg 455 295 abs abs_y 114 1.23605e+09;
#X obj 455 274 prepend set;
#X floatatom 37 484 5 0 0 0 - - -;
#X floatatom 89 484 5 0 0 0 - - -;
! #X msg 148 77 start;
! #X msg 174 96 stop;
#X floatatom 548 354 12 0 0 1 time - -;
#X obj 455 335 unpack s s f f;
! #X msg 239 37 open 0;
! #X msg 246 55 open 1;
! #X msg 253 73 open 2;
! #X msg 259 91 open 3;
! #X msg 265 109 open 4;
#X floatatom 84 439 7 0 0 0 - - -;
#X floatatom 138 439 7 0 0 0 - - -;
! #X obj 86 81 tgl 35 0 empty empty empty 0 -6 0 8 -24198 -1 -1 25 25
;
#X floatatom 517 370 12 0 0 1 value - -;
--- 1,19 ----
! #N canvas 67 163 909 622 10;
! #X msg 455 295 rel rel_x -1 4.06142e+09;
#X obj 455 274 prepend set;
#X floatatom 37 484 5 0 0 0 - - -;
#X floatatom 89 484 5 0 0 0 - - -;
! #X msg 158 121 start;
! #X msg 158 141 stop;
#X floatatom 548 354 12 0 0 1 time - -;
#X obj 455 335 unpack s s f f;
! #X msg 261 34 open 0;
! #X msg 268 52 open 1;
! #X msg 275 70 open 2;
! #X msg 281 88 open 3;
! #X msg 287 106 open 4;
#X floatatom 84 439 7 0 0 0 - - -;
#X floatatom 138 439 7 0 0 0 - - -;
! #X obj 68 122 tgl 35 0 empty empty empty 0 -6 0 8 -24198 -1 -1 25 25
;
#X floatatom 517 370 12 0 0 1 value - -;
***************
*** 45,53 ****
#X obj 262 382 +;
#X msg 262 362 1;
! #X msg 336 136 close;
! #X msg 336 113 refresh;
! #X text 397 111 refresh device list;
! #X obj 717 512 all_about_hid;
! #X text 608 513 For more info:;
#X text 49 588 (C) Copyright 2004 Hans-Christoph Steiner <hans(a)at.or.at>
;
--- 45,52 ----
#X obj 262 382 +;
#X msg 262 362 1;
! #X msg 366 124 close;
! #X msg 366 103 refresh;
! #X text 427 101 refresh device list;
! #X text 607 531 For more info:;
#X text 49 588 (C) Copyright 2004 Hans-Christoph Steiner <hans(a)at.or.at>
;
***************
*** 56,67 ****
#X text 473 602 $Author$;
#X floatatom 192 439 7 0 0 0 - - -;
! #X msg 398 180 poll 20;
! #X msg 336 180 poll 2;
! #X text 332 159 start polling and set the poll delay in ms;
#X text 387 248 event_type event_code value timestamp;
! #X msg 465 180 poll 2000;
! #X text 371 56 !!! This software is very much alpha \, so any aspect
of it could change without notice !!!;
- #X obj 248 225 hid 1;
#X obj 93 330 route key rel abs syn;
#X obj 9 537 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1
--- 55,64 ----
#X text 473 602 $Author$;
#X floatatom 192 439 7 0 0 0 - - -;
! #X msg 428 185 poll 20;
! #X msg 366 185 poll 2;
! #X text 362 170 start polling and set the poll delay in ms;
#X text 387 248 event_type event_code value timestamp;
! #X text 358 42 !!! This software is very much alpha \, so any aspect
of it could change without notice !!!;
#X obj 93 330 route key rel abs syn;
#X obj 9 537 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1
***************
*** 83,87 ****
#X obj 335 537 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
1;
! #X msg 270 129 open 5;
#X obj 9 504 route btn_0 btn_1 btn_2 btn_3 btn_4 btn_5 btn_6 btn_7
btn_8 btn_9;
--- 80,84 ----
#X obj 335 537 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0
1;
! #X msg 292 126 open 5;
#X obj 9 504 route btn_0 btn_1 btn_2 btn_3 btn_4 btn_5 btn_6 btn_7
btn_8 btn_9;
***************
*** 309,325 ****
#X obj 640 475 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X connect 1 0 0 0;
! #X connect 4 0 57 0;
! #X connect 5 0 57 0;
#X connect 7 0 18 0;
#X connect 7 1 17 0;
#X connect 7 2 16 0;
#X connect 7 3 6 0;
! #X connect 8 0 57 0;
! #X connect 9 0 57 0;
! #X connect 10 0 57 0;
! #X connect 11 0 57 0;
! #X connect 12 0 57 0;
! #X connect 15 0 57 0;
#X connect 36 0 35 0;
#X connect 36 0 19 0;
--- 306,335 ----
#X obj 640 475 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
+ #X msg 118 121 1;
+ #X msg 118 141 0;
+ #X obj 868 3 pddp;
+ #X obj 716 530 all_about_hid;
+ #X msg 366 145 print;
+ #X obj 247 223 hid 0;
+ #X text 429 125 close the device;
+ #X text 429 146 print the device and element lists;
+ #X text 10 50 Any non-zero value starts polling \,;
+ #X text 10 63 0 stops the polling. If the number;
+ #X text 10 76 is greater than 1 \, then the poll;
+ #X text 10 89 delay is set to that number.;
+ #X msg 496 185 poll 2000;
#X connect 1 0 0 0;
! #X connect 4 0 91 0;
! #X connect 5 0 91 0;
#X connect 7 0 18 0;
#X connect 7 1 17 0;
#X connect 7 2 16 0;
#X connect 7 3 6 0;
! #X connect 8 0 91 0;
! #X connect 9 0 91 0;
! #X connect 10 0 91 0;
! #X connect 11 0 91 0;
! #X connect 12 0 91 0;
! #X connect 15 0 91 0;
#X connect 36 0 35 0;
#X connect 36 0 19 0;
***************
*** 328,371 ****
#X connect 39 0 38 0;
#X connect 40 0 39 0;
! #X connect 41 0 57 0;
! #X connect 42 0 57 0;
! #X connect 51 0 57 0;
! #X connect 52 0 57 0;
! #X connect 55 0 57 0;
! #X connect 57 0 36 0;
! #X connect 57 0 1 0;
! #X connect 57 0 7 0;
! #X connect 57 0 58 0;
! #X connect 58 0 69 0;
! #X connect 58 1 74 0;
! #X connect 58 2 76 0;
! #X connect 58 3 40 0;
! #X connect 68 0 57 0;
! #X connect 69 0 59 0;
! #X connect 69 1 60 0;
! #X connect 69 2 61 0;
! #X connect 69 3 62 0;
! #X connect 69 4 63 0;
! #X connect 69 5 64 0;
! #X connect 69 6 65 0;
! #X connect 69 7 66 0;
! #X connect 69 8 67 0;
! #X connect 69 9 70 0;
! #X connect 74 0 2 0;
! #X connect 74 1 3 0;
! #X connect 74 2 75 0;
! #X connect 76 0 13 0;
! #X connect 76 1 14 0;
! #X connect 76 2 50 0;
! #X connect 76 3 77 0;
! #X connect 76 4 78 0;
! #X connect 76 5 79 0;
! #X connect 76 6 80 0;
#X connect 80 0 81 0;
! #X connect 80 1 83 0;
! #X connect 80 2 85 0;
! #X connect 80 3 87 0;
! #X connect 81 0 82 0;
! #X connect 83 0 84 0;
! #X connect 85 0 86 0;
! #X connect 87 0 88 0;
--- 338,384 ----
#X connect 39 0 38 0;
#X connect 40 0 39 0;
! #X connect 41 0 91 0;
! #X connect 42 0 91 0;
! #X connect 50 0 91 0;
! #X connect 51 0 91 0;
! #X connect 55 0 66 0;
! #X connect 55 1 71 0;
! #X connect 55 2 73 0;
! #X connect 55 3 40 0;
! #X connect 65 0 91 0;
! #X connect 66 0 56 0;
! #X connect 66 1 57 0;
! #X connect 66 2 58 0;
! #X connect 66 3 59 0;
! #X connect 66 4 60 0;
! #X connect 66 5 61 0;
! #X connect 66 6 62 0;
! #X connect 66 7 63 0;
! #X connect 66 8 64 0;
! #X connect 66 9 67 0;
! #X connect 71 0 2 0;
! #X connect 71 1 3 0;
! #X connect 71 2 72 0;
! #X connect 73 0 13 0;
! #X connect 73 1 14 0;
! #X connect 73 2 49 0;
! #X connect 73 3 74 0;
! #X connect 73 4 75 0;
! #X connect 73 5 76 0;
! #X connect 73 6 77 0;
! #X connect 77 0 78 0;
! #X connect 77 1 80 0;
! #X connect 77 2 82 0;
! #X connect 77 3 84 0;
! #X connect 78 0 79 0;
#X connect 80 0 81 0;
! #X connect 82 0 83 0;
! #X connect 84 0 85 0;
! #X connect 86 0 91 0;
! #X connect 87 0 91 0;
! #X connect 90 0 91 0;
! #X connect 91 0 36 0;
! #X connect 91 0 1 0;
! #X connect 91 0 7 0;
! #X connect 91 0 55 0;
! #X connect 98 0 91 0;
Index: joystick.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/joystick.pd,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** joystick.pd 16 Nov 2004 01:35:35 -0000 1.3
--- joystick.pd 28 Nov 2004 01:27:47 -0000 1.4
***************
*** 1,3 ****
! #N canvas 368 109 823 611 10;
#X msg 96 64 start;
#X msg 105 83 stop;
--- 1,3 ----
! #N canvas 246 181 827 615 10;
#X msg 96 64 start;
#X msg 105 83 stop;
***************
*** 26,33 ****
#X text 424 566 $Author$;
#X text 424 553 $Revision$$Date$;
- #X obj 38 489 autoscale -1 1;
- #X obj 103 449 autoscale -1 1;
- #X obj 169 409 autoscale -1 1;
- #X obj 235 368 autoscale -1 1;
#X obj 38 264 route abs_x abs_y abs_rz abs_throttle abs_hat0x abs_hat0y
;
--- 26,29 ----
***************
*** 35,53 ****
#X text 346 343 hat0x;
#X text 416 319 hat0y;
#X connect 0 0 10 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 10 0 15 0;
! #X connect 15 0 28 0;
#X connect 15 1 9 0;
#X connect 15 2 3 0;
! #X connect 24 0 5 0;
! #X connect 25 0 11 0;
! #X connect 26 0 12 0;
! #X connect 27 0 13 0;
! #X connect 28 0 24 0;
! #X connect 28 1 25 0;
! #X connect 28 2 26 0;
! #X connect 28 3 27 0;
! #X connect 28 4 6 0;
! #X connect 28 5 7 0;
--- 31,54 ----
#X text 346 343 hat0x;
#X text 416 319 hat0y;
+ #X obj 235 368 autoscale 0 1;
+ #X obj 169 409 autoscale 0 1;
+ #X obj 103 449 autoscale 0 1;
+ #X obj 38 489 autoscale 0 1;
+ #X text 8 6 [joystick];
#X connect 0 0 10 0;
#X connect 1 0 10 0;
#X connect 2 0 10 0;
#X connect 10 0 15 0;
! #X connect 15 0 24 0;
#X connect 15 1 9 0;
#X connect 15 2 3 0;
! #X connect 24 0 31 0;
! #X connect 24 1 30 0;
! #X connect 24 2 29 0;
! #X connect 24 3 28 0;
! #X connect 24 4 6 0;
! #X connect 24 5 7 0;
! #X connect 28 0 13 0;
! #X connect 29 0 12 0;
! #X connect 30 0 11 0;
! #X connect 31 0 5 0;
Index: hid.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** hid.c 15 Nov 2004 05:17:45 -0000 1.14
--- hid.c 28 Nov 2004 01:27:47 -0000 1.15
***************
*** 33,38 ****
//#define DEBUG(x) x
- #define DEFAULT_DELAY 5
-
/*------------------------------------------------------------------------------
* FUNCTION PROTOTYPES
--- 33,36 ----
***************
*** 96,100 ****
{
clock_unset(x->x_clock);
! post("[hid] polling stopped");
x->x_started = 0;
}
--- 94,98 ----
{
clock_unset(x->x_clock);
! DEBUG(post("[hid] polling stopped"););
x->x_started = 0;
}
***************
*** 111,115 ****
if(! hid_close_device(x))
{
! post("[hid] closed device number %d",x->x_device_number);
x->x_device_open = 0;
return (0);
--- 109,113 ----
if(! hid_close_device(x))
{
! post("[hid] closed device %d",x->x_device_number);
x->x_device_open = 0;
return (0);
***************
*** 120,127 ****
! /* closed same device open */
! /* open same device no action */
! /* closed different device open */
! /* open different device close open */
t_int hid_open(t_hid *x, t_float f)
--- 118,125 ----
! /* closed / same device open */
! /* open / same device no action */
! /* closed / different device open */
! /* open / different device close open */
t_int hid_open(t_hid *x, t_float f)
***************
*** 130,161 ****
/* store running state to be restored after the device has been opened */
! t_int started = x->x_started;
! if ( (f != x->x_device_number) && (x->x_device_open) ) hid_close(x);
! /* set obj device name to parameter otherwise set to default */
! if (f > 0)
! x->x_device_number = f;
else
! x->x_device_number = 0;
!
! if (! x->x_device_open)
! if (hid_open_device(x,x->x_device_number))
! {
! error("[hid] can not open device %d",x->x_device_number);
! post("\\=========================== [hid] ===========================/\n");
! return (1);
! }
! else
! {
! x->x_device_open = 1;
! }
/* restore the polling state so that when I [tgl] is used to start/stop [hid],
* the [tgl]'s state will continue to accurately reflect [hid]'s state */
! hid_set_from_float(x,started);
-
- post("\\=========================== [hid] ===========================/\n");
return (0);
}
--- 128,161 ----
/* store running state to be restored after the device has been opened */
! t_int started = x->x_started;
! /* only close the device if its different than the current and open */
! if ( (f != x->x_device_number) && (x->x_device_open) )
! hid_close(x);
! if (f > 0)
! x->x_device_number = f;
! else
! x->x_device_number = 0;
!
! /* if device is open still, that means the same device is trying to be opened,
! * therefore ignore the redundant open request. To reopen the same device,
! * send a [close( msg, then an [open( msg. */
! if (! x->x_device_open)
! if (hid_open_device(x,x->x_device_number))
! {
! error("[hid] can not open device %d",x->x_device_number);
! return (1);
! }
else
! {
! x->x_device_open = 1;
! }
/* restore the polling state so that when I [tgl] is used to start/stop [hid],
* the [tgl]'s state will continue to accurately reflect [hid]'s state */
! if(started)
! hid_set_from_float(x,x->x_delay);
return (0);
}
***************
*** 182,192 ****
/* if the user sets the delay less than one, ignore */
! if ( f >= 1 )
x->x_delay = (t_int)f;
! if (!x->x_started)
{
clock_delay(x->x_clock, x->x_delay);
! post("[hid]: polling started");
x->x_started = 1;
}
--- 182,195 ----
/* if the user sets the delay less than one, ignore */
! if( f >= 1 )
x->x_delay = (t_int)f;
+
+ if(!x->x_device_open)
+ hid_open(x,x->x_device_number);
! if(!x->x_started)
{
clock_delay(x->x_clock, x->x_delay);
! DEBUG(post("[hid] polling started"););
x->x_started = 1;
}
***************
*** 206,213 ****
hid_close(x);
-
- hid_platform_specific_free(x);
-
clock_free(x->x_clock);
}
--- 209,216 ----
hid_close(x);
clock_free(x->x_clock);
+ hid_instance_count--;
+
+ hid_platform_specific_free(x);
}
***************
*** 219,225 ****
DEBUG(post("hid_new"););
! post("/=========================== [hid] ===========================\\");
! post("[hid] %d.%d, written by Hans-Christoph Steiner <hans(a)eds.org>",
! HID_MAJOR_VERSION, HID_MINOR_VERSION);
#if !defined(__linux__) && !defined(__APPLE__)
error(" !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !!");
--- 222,230 ----
DEBUG(post("hid_new"););
! /* only display the version when the first instance is loaded */
! if(!hid_instance_count)
! post("[hid] %d.%d, written by Hans-Christoph Steiner <hans(a)eds.org>",
! HID_MAJOR_VERSION, HID_MINOR_VERSION);
!
#if !defined(__linux__) && !defined(__APPLE__)
error(" !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !!");
***************
*** 246,250 ****
if (hid_open(x,f))
error("[hid] device %d did not open",(t_int)f);
!
return (x);
}
--- 251,257 ----
if (hid_open(x,f))
error("[hid] device %d did not open",(t_int)f);
!
! hid_instance_count++;
!
return (x);
}
***************
*** 266,269 ****
--- 273,277 ----
/* add inlet message methods */
class_addmethod(hid_class,(t_method) hid_build_device_list,gensym("refresh"),0);
+ class_addmethod(hid_class,(t_method) hid_print,gensym("print"),0);
class_addmethod(hid_class,(t_method) hid_open,gensym("open"),A_DEFFLOAT,0);
class_addmethod(hid_class,(t_method) hid_close,gensym("close"),0);
Index: hid.h
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** hid.h 15 Nov 2004 04:05:39 -0000 1.10
--- hid.h 28 Nov 2004 01:27:47 -0000 1.11
***************
*** 31,46 ****
t_int x_started;
t_int x_device_open;
- t_int x_instance_count;
} t_hid;
/*------------------------------------------------------------------------------
! * GLOBALS
*/
! /* TODO: what are these for again? */
! char *deviceList[64];
! char *typeList[256];
! char *codeList[256];
/*------------------------------------------------------------------------------
--- 31,54 ----
t_int x_started;
t_int x_device_open;
} t_hid;
/*------------------------------------------------------------------------------
! * GLOBAL DEFINES
*/
! #define DEFAULT_DELAY 5
!
!
! /*------------------------------------------------------------------------------
! * GLOBAL VARIABLES
! */
!
! /*
! * count the number of instances of this object so that certain free()
! * functions can be called only after the final instance is detroyed.
! */
! t_int hid_instance_count;
!
/*------------------------------------------------------------------------------
***************
*** 57,60 ****
--- 65,69 ----
t_int hid_build_device_list(t_hid* x);
t_int hid_get_events(t_hid *x) ;
+ void hid_print(t_hid* x);
void hid_platform_specific_free(t_hid *x);
Index: buttongate-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/buttongate-help.pd,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** buttongate-help.pd 25 Nov 2004 02:42:49 -0000 1.2
--- buttongate-help.pd 28 Nov 2004 01:27:47 -0000 1.3
***************
*** 1,3 ****
! #N canvas 345 96 473 510 10;
#X obj 5 2 cnv 15 450 20 empty empty [buttongate] 2 11 1 18 -233017
-66577 0;
--- 1,3 ----
! #N canvas 345 96 463 514 10;
#X obj 5 2 cnv 15 450 20 empty empty [buttongate] 2 11 1 18 -233017
-66577 0;
***************
*** 30,33 ****
--- 30,34 ----
You can get the [hid] keycode from here:;
#X obj 324 368 ev_key-list;
+ #X obj 422 3 pddp;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
Index: hid_darwin.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid_darwin.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** hid_darwin.c 27 Nov 2004 19:29:34 -0000 1.12
--- hid_darwin.c 28 Nov 2004 01:27:47 -0000 1.13
***************
*** 59,62 ****
--- 59,63 ----
*======================================================================== */
+ extern t_int hid_instance_count;
/*==============================================================================
***************
*** 163,167 ****
pRecDevice hid_get_device_by_number(t_int device_number)
{
! pRecDevice currentDevice;
t_int i, numdevs;
--- 164,168 ----
pRecDevice hid_get_device_by_number(t_int device_number)
{
! pRecDevice pCurrentHIDDevice;
t_int i, numdevs;
***************
*** 180,191 ****
* device_number - 1).
*/
! currentDevice = HIDGetFirstDevice();
for(i=0; i < numdevs - device_number - 1; ++i)
! currentDevice = HIDGetNextDevice(currentDevice);
! return currentDevice;
}
! t_int hid_build_element_list(t_hid *x)
{
DEBUG(post("hid_build_element_list"););
--- 181,199 ----
* device_number - 1).
*/
! pCurrentHIDDevice = HIDGetFirstDevice();
for(i=0; i < numdevs - device_number - 1; ++i)
! pCurrentHIDDevice = HIDGetNextDevice(pCurrentHIDDevice);
! return pCurrentHIDDevice;
}
!
! void hid_build_element_list(t_hid *x)
! {
!
! }
!
!
! t_int hid_print_element_list(t_hid *x)
{
DEBUG(post("hid_build_element_list"););
***************
*** 201,206 ****
pCurrentHIDDevice = hid_get_device_by_number(x->x_device_number);
! if(!pCurrentHIDDevice) return (1);
!
pCurrentHIDElement = HIDGetFirstDeviceElement(pCurrentHIDDevice, kHIDElementTypeInput);
numElements = HIDCountDeviceElements(pCurrentHIDDevice, kHIDElementTypeInput);
--- 209,218 ----
pCurrentHIDDevice = hid_get_device_by_number(x->x_device_number);
! if ( ! HIDIsValidDevice(pCurrentHIDDevice) )
! {
! error("[hid]: device %d is not a valid device\n",x->x_device_number);
! return(1);
! }
!
pCurrentHIDElement = HIDGetFirstDeviceElement(pCurrentHIDDevice, kHIDElementTypeInput);
numElements = HIDCountDeviceElements(pCurrentHIDDevice, kHIDElementTypeInput);
***************
*** 237,240 ****
--- 249,282 ----
+ void hid_print_device_list(t_hid *x)
+ {
+ char cstrDeviceName [256];
+ t_int i,numdevs;
+ UInt32 usagePage, usage;
+ pRecDevice pCurrentHIDDevice;
+
+ if( HIDHaveDeviceList() )
+ {
+ numdevs = (t_int) HIDCountDevices();
+
+ post("");
+ /* display device list in console */
+ for(i=0; i < numdevs; i++)
+ {
+ pCurrentHIDDevice = hid_get_device_by_number(i);
+ post("Device %d: '%s' '%s' version %d",i,pCurrentHIDDevice->manufacturer,
+ pCurrentHIDDevice->product,pCurrentHIDDevice->version);
+ //usage
+ HIDGetUsageName (pCurrentHIDDevice->usagePage,
+ pCurrentHIDDevice->usage,
+ cstrDeviceName);
+ DEBUG(post(" vendorID: %d productID: %d locID: %d",
+ pCurrentHIDDevice->vendorID,
+ pCurrentHIDDevice->productID,
+ pCurrentHIDDevice->locID););
+ }
+ post("");
+ }
+ }
/* ============================================================================== */
***************
*** 353,358 ****
}
DEBUG(
! if(event_counter)
! post("output %d events",event_counter);
);
/* /\* get the first element *\/ */
--- 395,400 ----
}
DEBUG(
! // if(event_counter)
! // post("output %d events",event_counter);
);
/* /\* get the first element *\/ */
***************
*** 397,418 ****
DEBUG(post("hid_open_device"););
! t_int err,result;
! pRecDevice currentDevice = NULL;
! result = HIDBuildDeviceList (NULL, NULL);
! // returns false if no device found
! if(result) error("[hid]: no HID devices found\n");
! currentDevice = hid_get_device_by_number(device_number);
post("[hid] opened device %d: %s %s",
! device_number, currentDevice->manufacturer, currentDevice->product);
hid_build_element_list(x);
! HIDQueueDevice(currentDevice);
// TODO: queue all elements except absolute axes, those can just be polled
! return (0);
}
--- 439,476 ----
DEBUG(post("hid_open_device"););
! t_int result = 0;
! pRecDevice pCurrentHIDDevice = NULL;
! /* rebuild device list to make sure the list is current */
! if ( ! HIDHaveDeviceList() )
! {
! result = (t_int) HIDBuildDeviceList (NULL, NULL);
! // returns false if no device found
! if(result)
! {
! error("[hid]: no HID devices found\n");
! return(result);
! }
! }
!
! pCurrentHIDDevice = hid_get_device_by_number(device_number);
! if ( ! HIDIsValidDevice(pCurrentHIDDevice) )
! {
! error("[hid]: device %d is not a valid device\n",device_number);
! return(1);
! }
! // this doesn't seem to be needed at all
! // result = HIDCreateOpenDeviceInterface(pCurrentHIDDevice);
post("[hid] opened device %d: %s %s",
! device_number, pCurrentHIDDevice->manufacturer, pCurrentHIDDevice->product);
hid_build_element_list(x);
! HIDQueueDevice(pCurrentHIDDevice);
// TODO: queue all elements except absolute axes, those can just be polled
! return(result);
}
***************
*** 422,427 ****
DEBUG(post("hid_close_device"););
! post("[hid] closing device %d",x->x_device_number);
! return( HIDDequeueDevice( hid_get_device_by_number(x->x_device_number) ) );
}
--- 480,491 ----
DEBUG(post("hid_close_device"););
! t_int result = 0;
! pRecDevice pCurrentHIDDevice = hid_get_device_by_number(x->x_device_number);
!
! HIDDequeueDevice(pCurrentHIDDevice);
! // this doesn't seem to be needed at all
! // result = HIDCloseReleaseInterface(pCurrentHIDDevice);
!
! return(result);
}
***************
*** 431,473 ****
DEBUG(post("hid_build_device_list"););
- int i,err;
- UInt32 usagePage, usage;
- pRecDevice pCurrentHIDDevice;
-
- Boolean result = HIDBuildDeviceList (NULL, NULL);
// returns false if no device found
! if(result) error("[hid]: no HID devices found\n");
! int numdevs = HIDCountDevices();
! // exit if no devices found
! if(!numdevs) return (0);
! char cstrDeviceName [256];
!
! post("");
! /* display device list in console */
! for(i=0; i < numdevs; i++)
! {
! pCurrentHIDDevice = hid_get_device_by_number(i);
! post("Device %d: '%s' '%s' version %d",i,pCurrentHIDDevice->manufacturer,
! pCurrentHIDDevice->product,pCurrentHIDDevice->version);
! //usage
! HIDGetUsageName (pCurrentHIDDevice->usagePage,
! pCurrentHIDDevice->usage,
! cstrDeviceName);
! DEBUG(post(" vendorID: %d productID: %d locID: %d",
! pCurrentHIDDevice->vendorID,
! pCurrentHIDDevice->productID,
! pCurrentHIDDevice->locID););
! }
! post("");
! return (0);
}
void hid_platform_specific_free(t_hid *x)
{
! HIDReleaseAllDeviceQueues();
! HIDReleaseDeviceList();
}
--- 495,525 ----
DEBUG(post("hid_build_device_list"););
// returns false if no device found
! if(HIDBuildDeviceList (NULL, NULL))
! error("[hid]: no HID devices found\n");
! return (0);
! }
!
! void hid_print(t_hid *x)
! {
! hid_print_device_list(x);
! if(x->x_device_open)
! hid_print_element_list(x);
}
+
void hid_platform_specific_free(t_hid *x)
{
! DEBUG(post("hid_platform_specific_free"););
! /* only call this if the last instance is being freed */
! if (hid_instance_count < 1)
! {
! DEBUG(post("RELEASE ALL hid_instance_count: %d", hid_instance_count););
! HIDReleaseAllDeviceQueues();
! HIDReleaseDeviceList();
! }
}
Index: hid_linux.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid_linux.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** hid_linux.c 15 Nov 2004 05:17:45 -0000 1.6
--- hid_linux.c 28 Nov 2004 01:27:47 -0000 1.7
***************
*** 43,47 ****
/* ============================================================================== */
! void hid_list_devices(void)
{
int i,fd;
--- 43,163 ----
/* ============================================================================== */
! void hid_print_element_list(t_hid *x)
! {
! unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)];
! char devicename[256] = "Unknown";
! t_int event_type, event_code;
! char *event_type_name = "";
! /* counts for various event types */
! t_int synCount,keyCount,relCount,absCount,mscCount,ledCount,sndCount,repCount,ffCount,pwrCount,ff_statusCount;
!
! /* get name of device */
! ioctl(x->x_fd, EVIOCGNAME(sizeof(devicename)), devicename);
! post ("\nConfiguring device %d as %s (%s)",
! x->x_device_number,devicename,device_name);
!
! /* get bitmask representing supported events (axes, keys, etc.) */
! memset(bitmask, 0, sizeof(bitmask));
! ioctl(x->x_fd, EVIOCGBIT(0, EV_MAX), bitmask[0]);
! post("\nSupported events:");
!
! /* init all count vars */
! synCount = keyCount = relCount = absCount = mscCount = ledCount = 0;
! sndCount = repCount = ffCount = pwrCount = ff_statusCount = 0;
!
! /* cycle through all possible event types */
! for (event_type = 0; event_type < EV_MAX; event_type++)
! {
! if (test_bit(event_type, bitmask[0]))
! {
! /* make pretty names for event types */
! switch(event_type)
! {
! case EV_SYN: event_type_name = "Synchronization"; break;
! case EV_KEY: event_type_name = "Keys/Buttons"; break;
! case EV_REL: event_type_name = "Relative Axis"; break;
! case EV_ABS: event_type_name = "Absolute Axis"; break;
! case EV_MSC: event_type_name = "Miscellaneous"; break;
! case EV_LED: event_type_name = "LEDs"; break;
! case EV_SND: event_type_name = "System Sounds"; break;
! case EV_REP: event_type_name = "Autorepeat Values"; break;
! case EV_FF: event_type_name = "Force Feedback"; break;
! case EV_PWR: event_type_name = "Power"; break;
! case EV_FF_STATUS: event_type_name = "Force Feedback Status"; break;
! }
! // post(" %s (%s) ", event_type_name, ev[event_type] ? ev[event_type] : "?", event_type);
!
! /* get bitmask representing supported button types */
! ioctl(x->x_fd, EVIOCGBIT(event_type, KEY_MAX), bitmask[event_type]);
!
! post("");
! post(" TYPE\tCODE\tEVENT NAME");
! post("-----------------------------------------------------------");
!
! /* cycle through all possible event codes (axes, keys, etc.)
! * testing to see which are supported
! */
! for (event_code = 0; event_code < KEY_MAX; event_code++)
! {
! if (test_bit(event_code, bitmask[event_type]))
! {
! if ((event_type == EV_KEY) && (event_code >= BTN_MISC) && (event_code < KEY_OK) )
! {
! char hid_code[7];
! hid_convert_linux_buttons_to_numbers(event_code,hid_code);
! post(" %s\t%s\t%s",
! ev[event_type] ? ev[event_type] : "?",
! hid_code,
! event_names[event_type] ? (event_names[event_type][event_code] ? event_names[event_type][event_code] : "?") : "?");
! }
! else
! post(" %s\t\t%s\t%s",
! ev[event_type] ? ev[event_type] : "?",
! event_names[event_type] ? (event_names[event_type][event_code] ? event_names[event_type][event_code] : "?") : "?",
! event_type_name);
! /* post(" Event code %d (%s)", event_code, names[event_type] ? (names[event_type][event_code] ? names[event_type][event_code] : "?") : "?"); */
!
! switch(event_type) {
! /*
! * the API changed at some point... EV_SYN seems to be the new name
! * from "Reset" events to "Syncronization" events
! */
! #ifdef EV_RST
! case EV_RST: synCount++; break;
! #else
! case EV_SYN: synCount++; break;
! #endif
! case EV_KEY: keyCount++; break;
! case EV_REL: relCount++; break;
! case EV_ABS: absCount++; break;
! case EV_MSC: mscCount++; break;
! case EV_LED: ledCount++; break;
! case EV_SND: sndCount++; break;
! case EV_REP: repCount++; break;
! case EV_FF: ffCount++; break;
! case EV_PWR: pwrCount++; break;
! case EV_FF_STATUS: ff_statusCount++; break;
! }
! }
! }
! }
! }
!
! post("\nDetected:");
! if (synCount > 0) post (" %d Sync types",synCount);
! if (keyCount > 0) post (" %d Key/Button types",keyCount);
! if (relCount > 0) post (" %d Relative Axis types",relCount);
! if (absCount > 0) post (" %d Absolute Axis types",absCount);
! if (mscCount > 0) post (" %d Misc types",mscCount);
! if (ledCount > 0) post (" %d LED types",ledCount);
! if (sndCount > 0) post (" %d System Sound types",sndCount);
! if (repCount > 0) post (" %d Key Repeat types",repCount);
! if (ffCount > 0) post (" %d Force Feedback types",ffCount);
! if (pwrCount > 0) post (" %d Power types",pwrCount);
! if (ff_statusCount > 0) post (" %d Force Feedback types",ff_statusCount);
! }
!
!
! void hid_print_device_list(void)
{
int i,fd;
***************
*** 139,144 ****
}
DEBUG(
! if (event_counter > 0)
! post("output %d events",event_counter);
);
--- 255,260 ----
}
DEBUG(
! //if (event_counter > 0)
! //post("output %d events",event_counter);
);
***************
*** 147,150 ****
--- 263,272 ----
+ void hid_print(t_hid* x)
+ {
+ hid_print_device_list();
+ }
+
+
t_int hid_open_device(t_hid *x, t_int device_number)
{
***************
*** 153,162 ****
char device_name[20];
struct input_event hid_input_event;
- unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)];
- char devicename[256] = "Unknown";
- t_int event_type, event_code;
- char *event_type_name = "";
- /* counts for various event types */
- t_int synCount,keyCount,relCount,absCount,mscCount,ledCount,sndCount,repCount,ffCount,pwrCount,ff_statusCount;
x->x_fd = -1;
--- 275,278 ----
***************
*** 182,290 ****
*/
while (read (x->x_fd, &(hid_input_event), sizeof(struct input_event)) > -1);
-
- /* get name of device */
- ioctl(x->x_fd, EVIOCGNAME(sizeof(devicename)), devicename);
- post ("\nConfiguring device %d as %s (%s)",
- x->x_device_number,devicename,device_name);
-
- /* get bitmask representing supported events (axes, keys, etc.) */
- memset(bitmask, 0, sizeof(bitmask));
- ioctl(x->x_fd, EVIOCGBIT(0, EV_MAX), bitmask[0]);
- post("\nSupported events:");
-
- /* init all count vars */
- synCount = keyCount = relCount = absCount = mscCount = ledCount = 0;
- sndCount = repCount = ffCount = pwrCount = ff_statusCount = 0;
-
- /* cycle through all possible event types */
- for (event_type = 0; event_type < EV_MAX; event_type++)
- {
- if (test_bit(event_type, bitmask[0]))
- {
- /* make pretty names for event types */
- switch(event_type)
- {
- case EV_SYN: event_type_name = "Synchronization"; break;
- case EV_KEY: event_type_name = "Keys/Buttons"; break;
- case EV_REL: event_type_name = "Relative Axis"; break;
- case EV_ABS: event_type_name = "Absolute Axis"; break;
- case EV_MSC: event_type_name = "Miscellaneous"; break;
- case EV_LED: event_type_name = "LEDs"; break;
- case EV_SND: event_type_name = "System Sounds"; break;
- case EV_REP: event_type_name = "Autorepeat Values"; break;
- case EV_FF: event_type_name = "Force Feedback"; break;
- case EV_PWR: event_type_name = "Power"; break;
- case EV_FF_STATUS: event_type_name = "Force Feedback Status"; break;
- }
- // post(" %s (%s) ", event_type_name, ev[event_type] ? ev[event_type] : "?", event_type);
-
- /* get bitmask representing supported button types */
- ioctl(x->x_fd, EVIOCGBIT(event_type, KEY_MAX), bitmask[event_type]);
-
- post("");
- post(" TYPE\tCODE\tEVENT NAME");
- post("-----------------------------------------------------------");
-
- /* cycle through all possible event codes (axes, keys, etc.)
- * testing to see which are supported
- */
- for (event_code = 0; event_code < KEY_MAX; event_code++)
- {
- if (test_bit(event_code, bitmask[event_type]))
- {
- if ((event_type == EV_KEY) && (event_code >= BTN_MISC) && (event_code < KEY_OK) )
- {
- char hid_code[7];
- hid_convert_linux_buttons_to_numbers(event_code,hid_code);
- post(" %s\t%s\t%s",
- ev[event_type] ? ev[event_type] : "?",
- hid_code,
- event_names[event_type] ? (event_names[event_type][event_code] ? event_names[event_type][event_code] : "?") : "?");
- }
- else
- post(" %s\t\t%s\t%s",
- ev[event_type] ? ev[event_type] : "?",
- event_names[event_type] ? (event_names[event_type][event_code] ? event_names[event_type][event_code] : "?") : "?",
- event_type_name);
- /* post(" Event code %d (%s)", event_code, names[event_type] ? (names[event_type][event_code] ? names[event_type][event_code] : "?") : "?"); */
-
- switch(event_type) {
- /*
- * the API changed at some point... EV_SYN seems to be the new name
- * from "Reset" events to "Syncronization" events
- */
- #ifdef EV_RST
- case EV_RST: synCount++; break;
- #else
- case EV_SYN: synCount++; break;
- #endif
- case EV_KEY: keyCount++; break;
- case EV_REL: relCount++; break;
- case EV_ABS: absCount++; break;
- case EV_MSC: mscCount++; break;
- case EV_LED: ledCount++; break;
- case EV_SND: sndCount++; break;
- case EV_REP: repCount++; break;
- case EV_FF: ffCount++; break;
- case EV_PWR: pwrCount++; break;
- case EV_FF_STATUS: ff_statusCount++; break;
- }
- }
- }
- }
- }
-
- post("\nDetected:");
- if (synCount > 0) post (" %d Sync types",synCount);
- if (keyCount > 0) post (" %d Key/Button types",keyCount);
- if (relCount > 0) post (" %d Relative Axis types",relCount);
- if (absCount > 0) post (" %d Absolute Axis types",absCount);
- if (mscCount > 0) post (" %d Misc types",mscCount);
- if (ledCount > 0) post (" %d LED types",ledCount);
- if (sndCount > 0) post (" %d System Sound types",sndCount);
- if (repCount > 0) post (" %d Key Repeat types",repCount);
- if (ffCount > 0) post (" %d Force Feedback types",ffCount);
- if (pwrCount > 0) post (" %d Power types",pwrCount);
- if (ff_statusCount > 0) post (" %d Force Feedback types",ff_statusCount);
return (0);
--- 298,301 ----
***************
*** 314,319 ****
*/
- hid_list_devices();
-
return (0);
}
--- 325,328 ----
Index: keygate-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/keygate-help.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** keygate-help.pd 25 Nov 2004 02:42:49 -0000 1.1
--- keygate-help.pd 28 Nov 2004 01:27:47 -0000 1.2
***************
*** 1,3 ****
! #N canvas 525 201 473 470 10;
#X obj 5 2 cnv 15 450 20 empty empty [keygate] 2 11 1 18 -233017 -66577
0;
--- 1,3 ----
! #N canvas 525 201 462 476 10;
#X obj 5 2 cnv 15 450 20 empty empty [keygate] 2 11 1 18 -233017 -66577
0;
***************
*** 25,28 ****
--- 25,29 ----
#X text 310 263 <-- key released;
#X text 41 264 key pressed -->;
+ #X obj 422 3 pddp;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
Index: mouse-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/mouse-help.pd,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** mouse-help.pd 27 Nov 2004 19:29:34 -0000 1.8
--- mouse-help.pd 28 Nov 2004 01:27:47 -0000 1.9
***************
*** 1,3 ****
! #N canvas 470 274 674 468 10;
#X symbolatom 211 268 6 0 0 1 code - -;
#X obj 130 106 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0
--- 1,3 ----
! #N canvas 470 274 661 472 10;
#X symbolatom 211 268 6 0 0 1 code - -;
#X obj 130 106 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0
***************
*** 84,88 ****
#X connect 31 0 16 0;
#X restore 425 186 pd mouse-noise 1;
! #X obj 425 119 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 1
1;
#X text 308 95 turn this on to make some noise with the mouse;
--- 84,88 ----
#X connect 31 0 16 0;
#X restore 425 186 pd mouse-noise 1;
! #X obj 425 119 tgl 25 0 empty empty empty 0 -6 0 8 -225271 -1 -1 0
1;
#X text 308 95 turn this on to make some noise with the mouse;
***************
*** 124,127 ****
--- 124,128 ----
#X msg 180 146 refresh;
#X obj 130 171 mouse 0;
+ #X obj 619 3 pddp;
#X connect 1 0 38 0;
#X connect 9 0 38 0;
Index: TODO
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/TODO,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** TODO 27 Nov 2004 19:29:33 -0000 1.9
--- TODO 28 Nov 2004 01:27:47 -0000 1.10
***************
*** 1,2 ****
--- 1,10 ----
+
+ ==============================================================================
+ = write hid_print()
+
+ - MacOS X (device/element list)
+
+ - GNU/Linux
+
==============================================================================
= define generic event timestamp struct (probably Pd-ized input_event )
***************
*** 6,20 ****
timevals.
!
!
! ===============================================================================
! = HID Manager Type/Usage/UsagePage -> Linux Type/Code mapping
!
! UsagePage
!
!
! LED UsagePage => ev_led
! LED Usages == Linux ev_led codes
!
--- 14,21 ----
timevals.
! The timestamps should be in seconds since the first [hid] object was
! instantiated since Pd limits float resolution to 6 digits. If there were two
! floats, one for seconds, and the other for microseconds, then the [hid]
! timestamp could represent up to 11.5 days (999999 seconds).
***************
*** 25,39 ****
("Trackpad", "Microsoft 5-button Mouse with IntelliEye(TM)", etc.)
- first get # working, that's probably the easiest
-
- by #
- ------------------------------
- GNU/Linux
- sprintf(x_devname->s_name,"/dev/input/event%d",deviceNum + 1);
-
- Darwin
- prHIDBuildDeviceList();
- currentHIDDevice = discoveredDevices[gNumberOfHIDDevices];
-
==============================================================================
--- 26,29 ----
***************
*** 70,78 ****
= control input messages
! - the [delay( message should be replaced by the [poll( msg
!
! - should [poll( also start things, or should it just set polling time?
!
! - are [start( and [stop( needed? is 0/1 enough?
--- 60,64 ----
= control input messages
! - are [poll(, [start(, and [stop( needed? is 0/1/del# enough?
***************
*** 84,109 ****
==============================================================================
- = if device is closed and obj is started, open device and start
-
- ==============================================================================
- = catalog Linux device behavior
-
- - more data needed to make the proper [hid] output for MacOS X
-
- - catalog hatswitch behavior
-
- - catalog axis directions: right/down positive? left/up negative?
-
- ==============================================================================
= event name changes
- make key/button Type btn rather than key (undecided on this one)
==============================================================================
! = make [macosxevent]
- so much info is lost in the translation to a common event scheme that it
! would be quite handy to have a [macosxevent] object. This would give
! access to the entire range of devices supported by HID Manager.
==============================================================================
--- 70,88 ----
==============================================================================
= event name changes
- make key/button Type btn rather than key (undecided on this one)
+
==============================================================================
! = make [linuxhid] [darwinhid] and [windowshid]
- so much info is lost in the translation to a common event scheme that it
! would be quite handy to have platform-specific objects. This would give
! access to the entire range of devices supported by HID Manager, Linux input
! events, etc.
!
! - these objects should follow the same conventions as [hid]
!
==============================================================================
***************
*** 113,145 ****
the events.
- ==============================================================================
- = mapping object ideas
-
- - log
-
- - exponential
-
- - [noterange] scale an input range to an output range of MIDI note #s
-
- ______________________________________________________________________________
- ------------------------------------------------------------------------------
- BUGS
- ______________________________________________________________________________
- ------------------------------------------------------------------------------
-
- ______________________________________________________________________________
- - BUG x->x_delay reset to default when device is opened
-
- ______________________________________________________________________________
- - BUG: [mouse] and [joystick] arguments don't work to open device
-
- ______________________________________________________________________________
- - BUG: [open('ing a device causes all other active [hid] objs to have their
- devices closed
-
- - this means only one [hid] object can have an open device at one time
! - I thought this was due to the hid_close_device() call in hid_open(), which releases
! the device list, but this doesn't seem to be the case.
______________________________________________________________________________
--- 92,101 ----
the events.
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
! BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
______________________________________________________________________________
***************
*** 170,174 ****
access. It must since its used with games.
! _________________________________________________________________________________________
- BUG: on MacOS X, two keyboard key codes are reported as hatswitches
--- 126,130 ----
access. It must since its used with games.
! ______________________________________________________________________________
- BUG: on MacOS X, two keyboard key codes are reported as hatswitches
***************
*** 176,178 ****
abs abs_hat0y Button Input, Keyboard Usage 0x39
! I am pretty sure this is just a display problem, but it might not be.
--- 132,135 ----
abs abs_hat0y Button Input, Keyboard Usage 0x39
! I am pretty sure this is just a hid_print_element_list() display problem.
!