diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2006-01-25 08:40:35 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2006-01-25 08:40:35 +0000 |
commit | 3486b399456ac3bd65fe86dc9c99aa69105651d1 (patch) | |
tree | 530e715817cc84d630e8d3b3247a8bb40121aaee | |
parent | 90dd1056e4dec75159f45596165d495cd6ccb299 (diff) |
stopped outputting EV_SYN events since they are not needed in Pd space and they cause troubles; cleaned up all warnings
svn path=/trunk/externals/hcs/hid/; revision=4487
-rw-r--r-- | hid.c | 2 | ||||
-rw-r--r-- | hid.h | 4 | ||||
-rw-r--r-- | hid_linux.c | 534 |
3 files changed, 275 insertions, 265 deletions
@@ -32,6 +32,8 @@ #define DEBUG(x) //#define DEBUG(x) x +static t_class *hid_class; + /*------------------------------------------------------------------------------ * FUNCTION PROTOTYPES */ @@ -14,13 +14,11 @@ #define HID_MAJOR_VERSION 0 #define HID_MINOR_VERSION 6 -static char *version = "$Revision: 1.18 $"; +/* static char *version = "$Revision: 1.19 $"; */ /*------------------------------------------------------------------------------ * CLASS DEF */ -static t_class *hid_class; - typedef struct _hid { t_object x_obj; diff --git a/hid_linux.c b/hid_linux.c index 8134b78..3a83a36 100644 --- a/hid_linux.c +++ b/hid_linux.c @@ -45,216 +45,224 @@ void hid_convert_linux_buttons_to_numbers(__u16 linux_code, char *hid_code) { - if(linux_code >= 0x100) - { - if(linux_code < BTN_MOUSE) - sprintf(hid_code,"btn_%d",linux_code - BTN_MISC); /* numbered buttons */ - else if(linux_code < BTN_JOYSTICK) - sprintf(hid_code,"btn_%d",linux_code - BTN_MOUSE); /* mouse buttons */ - else if(linux_code < BTN_GAMEPAD) - sprintf(hid_code,"btn_%d",linux_code - BTN_JOYSTICK); /* joystick buttons */ - else if(linux_code < BTN_DIGI) - sprintf(hid_code,"btn_%d",linux_code - BTN_GAMEPAD); /* gamepad buttons */ - else if(linux_code < BTN_WHEEL) - sprintf(hid_code,"btn_%d",linux_code - BTN_DIGI); /* tablet buttons */ - else if(linux_code < KEY_OK) - sprintf(hid_code,"btn_%d",linux_code - BTN_WHEEL); /* wheel buttons */ - } + if(linux_code >= 0x100) + { + if(linux_code < BTN_MOUSE) + sprintf(hid_code,"btn_%d",linux_code - BTN_MISC); /* numbered buttons */ + else if(linux_code < BTN_JOYSTICK) + sprintf(hid_code,"btn_%d",linux_code - BTN_MOUSE); /* mouse buttons */ + else if(linux_code < BTN_GAMEPAD) + sprintf(hid_code,"btn_%d",linux_code - BTN_JOYSTICK); /* joystick buttons */ + else if(linux_code < BTN_DIGI) + sprintf(hid_code,"btn_%d",linux_code - BTN_GAMEPAD); /* gamepad buttons */ + else if(linux_code < BTN_WHEEL) + sprintf(hid_code,"btn_%d",linux_code - BTN_DIGI); /* tablet buttons */ + else if(linux_code < KEY_OK) + sprintf(hid_code,"btn_%d",linux_code - BTN_WHEEL); /* wheel buttons */ + } } /* Georg Holzmann: implementation of the keys */ void hid_convert_linux_keys(__u16 linux_code, char *hid_code) { - if(linux_code > 226) - return; + if(linux_code > 226) + return; - /* quick hack to get the keys */ - /* (in future this should be auto-generated) */ - - char key_names[227][20] = - { - "reserved", "esc", "1", "2", "3", "4", "5", "6", "7", - "8", "9", "0", "minus", "equal", "backspace", "tab", - "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", - "leftbrace", "rightbrace", "enter", "leftctrl", "a", - "s", "d", "f", "g", "h", "j", "k", "l", "semicolon", - "apostrophe", "grave", "leftshift", "backslash", "z", - "x", "c", "v", "b", "n", "m", "comma", "dot", "slash", - "rightshift", "kpasterisk", "leftalt", "space", "capslock", - "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", - "numlock", "scrolllock", "kp7", "kp8", "kp9", "kpminus", - "kp4", "kp5", "kp6", "kpplus", "kp1", "kp2", "kp3", "kp3", "kpdot", - "103rd", "f13", "102nd", "f11", "f12", "f14", "f15", "f16", - "f17", "f18", "f19", "f20", "kpenter", "rightctrl", "kpslash", - "sysrq", "rightalt", "linefeed", "home", "up", "pageup", "left", - "right", "end", "down", "pagedown", "insert", "delete", "macro", - "mute", "volumedown", "volumeup", "power", "kpequal", "kpplusminus", - "pause", "f21", "f22", "f23", "f24", "kpcomma", "leftmeta", - "rightmeta", "compose", + /* quick hack to get the keys */ + /* (in future this should be auto-generated) */ + + char key_names[227][20] = + { + "reserved", "esc", "1", "2", "3", "4", "5", "6", "7", + "8", "9", "0", "minus", "equal", "backspace", "tab", + "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", + "leftbrace", "rightbrace", "enter", "leftctrl", "a", + "s", "d", "f", "g", "h", "j", "k", "l", "semicolon", + "apostrophe", "grave", "leftshift", "backslash", "z", + "x", "c", "v", "b", "n", "m", "comma", "dot", "slash", + "rightshift", "kpasterisk", "leftalt", "space", "capslock", + "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", + "numlock", "scrolllock", "kp7", "kp8", "kp9", "kpminus", + "kp4", "kp5", "kp6", "kpplus", "kp1", "kp2", "kp3", "kp3", "kpdot", + "103rd", "f13", "102nd", "f11", "f12", "f14", "f15", "f16", + "f17", "f18", "f19", "f20", "kpenter", "rightctrl", "kpslash", + "sysrq", "rightalt", "linefeed", "home", "up", "pageup", "left", + "right", "end", "down", "pagedown", "insert", "delete", "macro", + "mute", "volumedown", "volumeup", "power", "kpequal", "kpplusminus", + "pause", "f21", "f22", "f23", "f24", "kpcomma", "leftmeta", + "rightmeta", "compose", - "stop", "again", "props", "undo", "front", "copy", "open", - "paste", "find", "cut", "help", "menu", "calc", "setup", "sleep", "wakeup", - "file", "sendfile", "deletefile", "xfer", "prog1", "prog2", "www", - "msdos", "coffee", "direction", "cyclewindows", "mail", "bookmarks", - "computer", "back", "forward", "colsecd", "ejectcd", "ejectclosecd", - "nextsong", "playpause", "previoussong", "stopcd", "record", - "rewind", "phone", "iso", "config", "homepage", "refresh", "exit", - "move", "edit", "scrollup", "scrolldown", "kpleftparen", "kprightparen", + "stop", "again", "props", "undo", "front", "copy", "open", + "paste", "find", "cut", "help", "menu", "calc", "setup", "sleep", "wakeup", + "file", "sendfile", "deletefile", "xfer", "prog1", "prog2", "www", + "msdos", "coffee", "direction", "cyclewindows", "mail", "bookmarks", + "computer", "back", "forward", "colsecd", "ejectcd", "ejectclosecd", + "nextsong", "playpause", "previoussong", "stopcd", "record", + "rewind", "phone", "iso", "config", "homepage", "refresh", "exit", + "move", "edit", "scrollup", "scrolldown", "kpleftparen", "kprightparen", - "intl1", "intl2", "intl3", "intl4", "intl5", "intl6", "intl7", - "intl8", "intl9", "lang1", "lang2", "lang3", "lang4", "lang5", - "lang6", "lang7", "lang8", "lang9", "playcd", "pausecd", "prog3", - "prog4", "suspend", "close", "play", "fastforward", "bassboost", - "print", "hp", "camera", "sound", "question", "email", "chat", - "search", "connect", "finance", "sport", "shop", "alterase", - "cancel", "brightnessdown", "brightnessup", "media" - }; + "intl1", "intl2", "intl3", "intl4", "intl5", "intl6", "intl7", + "intl8", "intl9", "lang1", "lang2", "lang3", "lang4", "lang5", + "lang6", "lang7", "lang8", "lang9", "playcd", "pausecd", "prog3", + "prog4", "suspend", "close", "play", "fastforward", "bassboost", + "print", "hp", "camera", "sound", "question", "email", "chat", + "search", "connect", "finance", "sport", "shop", "alterase", + "cancel", "brightnessdown", "brightnessup", "media" + }; - sprintf(hid_code,"key_%s",key_names[linux_code]); + sprintf(hid_code,"key_%s",key_names[linux_code]); } void hid_print_element_list(t_hid *x) { - unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)]; - char device_name[256] = "Unknown"; - char dev_handle_name[20] = "/dev/input/event0"; - 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 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:"); + DEBUG(post("hid_print_element_list");); + unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)]; +// char event_type_string[256]; +// char event_code_string[256]; + char *event_type_name = ""; + t_int i, j; + /* counts for various event types */ + t_int syn_count,key_count,rel_count,abs_count,msc_count,led_count,snd_count,rep_count,ff_count,pwr_count,ff_status_count; + + /* 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; + syn_count = key_count = rel_count = abs_count = msc_count = led_count = 0; + snd_count = rep_count = ff_count = pwr_count = ff_status_count = 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); + /* cycle through all possible event types + * i = i j = j + */ + for (i = 1; i < EV_MAX; i++) + { + if (test_bit(i, bitmask[0])) + { + /* make pretty names for event types */ + switch(i) + { +// 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; + default: event_type_name = "UNSUPPORTED"; + } - /* get bitmask representing supported button types */ - ioctl(x->x_fd, EVIOCGBIT(event_type, KEY_MAX), bitmask[event_type]); + /* get bitmask representing supported button types */ + ioctl(x->x_fd, EVIOCGBIT(i, KEY_MAX), bitmask[i]); - 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%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] : "?") : "?"); */ + post(""); + post(" TYPE\tCODE\tEVENT NAME"); + post("-----------------------------------------------------------"); + + /* cycle through all possible event codes (axes, keys, etc.) + * testing to see which are supported. + * i = i j = j + */ + for (j = 0; j < KEY_MAX; j++) + { + if (test_bit(j, bitmask[i])) + { + if ((i == EV_KEY) && (j >= BTN_MISC) && (j < KEY_OK) ) + { + char hid_code[7]; + hid_convert_linux_buttons_to_numbers(j,hid_code); + post(" %s\t%s\t%s", + ev[i] ? ev[i] : "?", + hid_code, + event_names[i] ? (event_names[i][j] ? event_names[i][j] : "?") : "?"); + } + else if (i != EV_SYN) + { + post(" %s\t%s\t%s", + ev[i] ? ev[i] : "?", + event_names[i][j] ? event_names[i][j] : "?", + event_type_name); + +/* post(" Event code %d (%s)", j, names[i] ? (names[i][j] ? names[i][j] : "?") : "?"); */ + } - switch(event_type) { + switch(i) { /* * 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; - } - } - } - } - } +/* #ifdef EV_RST */ +/* case EV_RST: syn_count++; break; */ +/* #else */ +/* case EV_SYN: syn_count++; break; */ +/* #endif */ + case EV_KEY: key_count++; break; + case EV_REL: rel_count++; break; + case EV_ABS: abs_count++; break; + case EV_MSC: msc_count++; break; + case EV_LED: led_count++; break; + case EV_SND: snd_count++; break; + case EV_REP: rep_count++; break; + case EV_FF: ff_count++; break; + case EV_PWR: pwr_count++; break; + case EV_FF_STATUS: ff_status_count++; 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); + post("\nDetected:"); +// if (syn_count > 0) post (" %d Synchronization types",syn_count); + if (key_count > 0) post (" %d Key/Button types",key_count); + if (rel_count > 0) post (" %d Relative Axis types",rel_count); + if (abs_count > 0) post (" %d Absolute Axis types",abs_count); + if (msc_count > 0) post (" %d Misc types",msc_count); + if (led_count > 0) post (" %d LED types",led_count); + if (snd_count > 0) post (" %d System Sound types",snd_count); + if (rep_count > 0) post (" %d Key Repeat types",rep_count); + if (ff_count > 0) post (" %d Force Feedback types",ff_count); + if (pwr_count > 0) post (" %d Power types",pwr_count); + if (ff_status_count > 0) post (" %d Force Feedback types",ff_status_count); } void hid_print_device_list(void) { - int i,fd; - char device_output_string[256] = "Unknown"; - char dev_handle_name[20] = "/dev/input/event0"; - - post(""); - for (i=0;i<128;++i) - { - sprintf(dev_handle_name,"/dev/input/event%d",i); - if (dev_handle_name) - { - /* open the device read-only, non-exclusive */ - fd = open (dev_handle_name, O_RDONLY | O_NONBLOCK); - /* test if device open */ - if (fd < 0 ) - { - fd = -1; - } - else - { - /* get name of device */ - ioctl(fd, EVIOCGNAME(sizeof(device_output_string)), device_output_string); - post("Device %d: '%s' on '%s'", i, device_output_string, dev_handle_name); + DEBUG(post("hid_print_device_list");); + int i,fd; + char device_output_string[256] = "Unknown"; + char dev_handle_name[20] = "/dev/input/event0"; + + post(""); + for (i=0;i<128;++i) + { + sprintf(dev_handle_name,"/dev/input/event%d",i); + if (dev_handle_name) + { + /* open the device read-only, non-exclusive */ + fd = open (dev_handle_name, O_RDONLY | O_NONBLOCK); + /* test if device open */ + if (fd < 0 ) + { + fd = -1; + } + else + { + /* get name of device */ + ioctl(fd, EVIOCGNAME(sizeof(device_output_string)), device_output_string); + post("Device %d: '%s' on '%s'", i, device_output_string, dev_handle_name); - close (fd); - } - } - } - post(""); + close (fd); + } + } + } + post(""); } /* ------------------------------------------------------------------------------ */ @@ -264,43 +272,43 @@ void hid_print_device_list(void) /* cross-platform force feedback functions */ t_int hid_ff_autocenter( t_hid *x, t_float value ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_gain( t_hid *x, t_float value ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_motors( t_hid *x, t_float value ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_continue( t_hid *x ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_pause( t_hid *x ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_reset( t_hid *x ) { - return ( 0 ); + return ( 0 ); } t_int hid_ff_stopall( t_hid *x ) { - return ( 0 ); + return ( 0 ); } @@ -308,7 +316,7 @@ t_int hid_ff_stopall( t_hid *x ) // these are just for testing... t_int hid_ff_fftest ( t_hid *x, t_float value) { - return ( 0 ); + return ( 0 ); } @@ -324,96 +332,98 @@ void hid_ff_print( t_hid *x ) t_int hid_get_events(t_hid *x) { - DEBUG(post("hid_get_events");); + DEBUG(post("hid_get_events");); -/* for debugging, counts how many events are processed each time hid_read() is called */ - t_int i; - DEBUG(t_int event_counter = 0;); - t_int read_bytes; - t_atom event_data[3]; +/* for debugging, counts how many events are processed each time hid_read() is called */ + DEBUG(t_int event_counter = 0;); - char hid_code[7]; + char hid_code[7]; /* this will go into the generic read function declared in hid.h and * implemented in hid_linux.c */ - struct input_event hid_input_event; - - if (x->x_fd < 0) return 0; - - while (read (x->x_fd, &(hid_input_event), sizeof(struct input_event)) > -1) - { - if (hid_input_event.type == EV_KEY) - { - hid_convert_linux_buttons_to_numbers(hid_input_event.code,hid_code); - hid_convert_linux_keys(hid_input_event.code,hid_code); - } - else if (event_names[hid_input_event.type][hid_input_event.code] != NULL) - { - strcpy(hid_code, event_names[hid_input_event.type][hid_input_event.code]); - } - else - { - strcpy(hid_code, "unknown"); - } + struct input_event hid_input_event; + + if (x->x_fd < 0) return 0; + + while( read (x->x_fd, &(hid_input_event), sizeof(struct input_event)) > -1 ) + { + if( hid_input_event.type == EV_KEY ) + { + hid_convert_linux_buttons_to_numbers(hid_input_event.code,hid_code); + hid_convert_linux_keys(hid_input_event.code,hid_code); + } + else if( hid_input_event.type == EV_SYN ) + { + // filter out EV_SYN events, they are currently unused + } + else if( event_names[hid_input_event.type][hid_input_event.code] != NULL ) + { + strcpy(hid_code, event_names[hid_input_event.type][hid_input_event.code]); + } + else + { + strcpy(hid_code, "unknown"); + } - hid_output_event(x, ev[hid_input_event.type], hid_code, - (t_float)hid_input_event.value); - DEBUG(++event_counter;); - } - DEBUG( - //if (event_counter > 0) - //post("output %d events",event_counter); + if( hid_input_event.type != EV_SYN ) + hid_output_event(x, ev[hid_input_event.type], hid_code, + (t_float)hid_input_event.value); + DEBUG(++event_counter;); + } + DEBUG( + //if (event_counter > 0) + //post("output %d events",event_counter); ); - return (0); + return (0); } void hid_print(t_hid* x) { - hid_print_device_list(); - hid_print_element_list(x); + hid_print_device_list(); + hid_print_element_list(x); } t_int hid_open_device(t_hid *x, t_int device_number) { - DEBUG(post("hid_open_device");); + DEBUG(post("hid_open_device");); - char device_name[256] = "Unknown"; - char dev_handle_name[20] = "/dev/input/event0"; - struct input_event hid_input_event; + char device_name[256] = "Unknown"; + char dev_handle_name[20] = "/dev/input/event0"; + struct input_event hid_input_event; - x->x_fd = -1; + x->x_fd = -1; - x->x_device_number = device_number; - sprintf(dev_handle_name,"/dev/input/event%d",x->x_device_number); - - if (dev_handle_name) - { - /* open the device read-only, non-exclusive */ - x->x_fd = open(dev_handle_name, O_RDONLY | O_NONBLOCK); - /* test if device open */ - if (x->x_fd < 0 ) - { - error("[hid] open %s failed",dev_handle_name); - x->x_fd = -1; - return 1; - } - } + x->x_device_number = device_number; + sprintf(dev_handle_name,"/dev/input/event%d",(int)x->x_device_number); + + if (dev_handle_name) + { + /* open the device read-only, non-exclusive */ + x->x_fd = open(dev_handle_name, O_RDONLY | O_NONBLOCK); + /* test if device open */ + if (x->x_fd < 0 ) + { + error("[hid] open %s failed",dev_handle_name); + x->x_fd = -1; + return 1; + } + } - /* read input_events from the HID_DEVICE stream - * It seems that is just there to flush the input event queue - */ - while (read (x->x_fd, &(hid_input_event), sizeof(struct input_event)) > -1); + /* read input_events from the HID_DEVICE stream + * It seems that is just there to flush the input event queue + */ + while (read (x->x_fd, &(hid_input_event), sizeof(struct input_event)) > -1); - /* get name of device */ - ioctl(x->x_fd, EVIOCGNAME(sizeof(device_name)), device_name); - post ("[hid] opened device %d (%s): %s", - x->x_device_number,dev_handle_name,device_name); + /* get name of device */ + ioctl(x->x_fd, EVIOCGNAME(sizeof(device_name)), device_name); + post ("[hid] opened device %d (%s): %s", + x->x_device_number,dev_handle_name,device_name); - return (0); + return (0); } /* @@ -421,17 +431,17 @@ t_int hid_open_device(t_hid *x, t_int device_number) */ t_int hid_close_device(t_hid *x) { - DEBUG(post("hid_close_device");); - if (x->x_fd <0) - return 0; - else - return (close(x->x_fd)); + DEBUG(post("hid_close_device");); + if (x->x_fd <0) + return 0; + else + return (close(x->x_fd)); } t_int hid_build_device_list(t_hid *x) { - DEBUG(post("hid_build_device_list");); - /* the device list should be refreshed here */ + DEBUG(post("hid_build_device_list");); + /* the device list should be refreshed here */ /* * since in GNU/Linux the device list is the input event devices * (/dev/input/event?), nothing needs to be done as of yet to refresh @@ -439,12 +449,12 @@ t_int hid_build_device_list(t_hid *x) * the current t_float, then this will probably need to be changed. */ - return (0); + return (0); } void hid_platform_specific_free(t_hid *x) { - /* nothing to be done here on GNU/Linux */ + /* nothing to be done here on GNU/Linux */ } |