Revision: 10284 http://pure-data.svn.sourceforge.net/pure-data/?rev=10284&view=rev Author: eighthave Date: 2008-09-09 02:34:12 +0000 (Tue, 09 Sep 2008)
Log Message: ----------- removed old linux key name conversion and took a quick stab at updating the key name lookup table in input_arrays.c to make the USB HID derived key names
Modified Paths: -------------- trunk/externals/io/hidio/hidio-help.pd trunk/externals/io/hidio/hidio_linux.c trunk/externals/io/hidio/input_arrays.c
Modified: trunk/externals/io/hidio/hidio-help.pd =================================================================== --- trunk/externals/io/hidio/hidio-help.pd 2008-09-09 01:36:56 UTC (rev 10283) +++ trunk/externals/io/hidio/hidio-help.pd 2008-09-09 02:34:12 UTC (rev 10284) @@ -1,4 +1,4 @@ -#N canvas 187 24 843 580 10; +#N canvas 233 51 843 580 10; #X floatatom 27 445 5 0 0 0 - - -; #X floatatom 83 445 5 0 0 0 - - -; #X obj 191 164 tgl 35 0 empty empty empty 0 -6 0 8 -24198 -1 -1 25 @@ -9,10 +9,9 @@ #X obj 2 2 cnv 15 600 20 empty empty hidio 2 11 1 18 -233017 -66577 0; #X text 284 344 outlet message format:; -#X msg 311 104 close; +#X msg 316 104 close; #X msg 354 149 refresh; #X text 416 148 refresh device list; -#X text 537 487 For more info:; #X text 266 557 released under the GNU GPL; #X text 472 544 $Revision: 1.6 $$Date: 2007-07-26 07:31:38 $; #X text 473 557 $Author: eighthave $; @@ -64,7 +63,7 @@ 1; #X msg 25 155 debug 6; #X msg 354 126 info; -#N canvas 0 22 380 450 open 1; +#N canvas 3 51 380 450 open 0; #X obj 77 61 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 -1 0; #X msg 78 81 open mouse $1; @@ -130,7 +129,7 @@ #X connect 11 0 4 0; #X connect 13 0 4 0; #X restore 174 37 pd open by vendor/product ID; -#X msg 285 329 button button_7 0 0; +#X msg 285 329 key leftcontrol 0 2; #X text 49 543 (C) Copyright 2004 Hans-Christoph Steiner hans@at.or.at ; #N canvas 162 133 570 420 serin 0; @@ -162,10 +161,10 @@ #X coords 0 -1 1 1 165 17 1 60 60; #X restore 25 134 pd serin; #N canvas 162 133 570 420 serin 0; -#X obj 286 61 cnv 15 30 15 empty $0-open-canvas 6 4 8 0 14 -233017 +#X obj 286 61 cnv 15 30 15 empty $0-open-canvas 14 4 8 0 14 -233017 -1 0; #X obj 60 61 hradio 15 1 1 15 empty empty empty 0 -6 0 8 -225271 -1 --1 6; +-1 14; #X obj 60 13 inlet; #X msg 200 202 label $1; #X obj 200 180 makefilename %d; @@ -189,7 +188,6 @@ #X connect 10 0 8 0; #X coords 0 -1 1 1 257 17 1 60 60; #X restore 262 83 pd serin; -#X obj 646 486 pddp/open all_about_hid; #X obj 306 244 hidio; #X obj 286 310 flatspace/prepend set; #X obj 544 315 unpack symbol symbol float float; @@ -241,7 +239,6 @@ #X floatatom 63 401 6 0 0 0 - - -; #X obj 362 285 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; -#X msg 262 104 open 6; #N canvas 766 107 771 427 output 0; #X obj 286 341 outlet; #X msg 112 70 255; @@ -514,63 +511,64 @@ #X connect 13 0 14 1; #X connect 14 0 3 0; #X restore 542 283 pd device info; -#X obj 632 284 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +#X obj 632 284 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X connect 2 0 53 0; -#X connect 8 0 53 0; -#X connect 9 0 53 0; -#X connect 44 0 53 0; -#X connect 45 0 53 0; -#X connect 46 0 53 0; -#X connect 47 0 53 0; -#X connect 50 0 44 0; -#X connect 51 0 64 0; -#X connect 53 0 61 0; -#X connect 53 0 55 0; -#X connect 53 0 54 0; -#X connect 53 0 60 0; -#X connect 53 1 77 0; -#X connect 54 0 48 0; -#X connect 55 0 5 0; -#X connect 55 1 4 0; -#X connect 55 2 56 0; -#X connect 55 3 3 0; -#X connect 57 0 62 0; -#X connect 57 1 23 0; -#X connect 57 2 24 0; -#X connect 57 3 25 0; -#X connect 57 4 26 0; -#X connect 57 5 27 0; -#X connect 57 6 28 0; -#X connect 58 0 72 0; -#X connect 58 1 66 0; -#X connect 58 2 57 0; -#X connect 60 0 58 0; -#X connect 60 0 73 0; -#X connect 63 0 61 1; -#X connect 64 0 53 0; -#X connect 65 0 53 0; -#X connect 66 0 0 0; -#X connect 66 1 1 0; -#X connect 66 2 17 0; -#X connect 66 4 22 0; -#X connect 66 5 67 0; -#X connect 69 0 53 0; -#X connect 70 0 53 0; -#X connect 72 0 16 0; -#X connect 72 1 29 0; -#X connect 72 2 30 0; -#X connect 72 3 31 0; -#X connect 72 4 32 0; -#X connect 72 5 33 0; -#X connect 72 6 34 0; -#X connect 72 7 35 0; -#X connect 72 8 36 0; -#X connect 72 9 37 0; -#X connect 72 10 38 0; -#X connect 72 11 39 0; -#X connect 72 12 40 0; -#X connect 72 13 41 0; -#X connect 72 14 42 0; -#X connect 72 15 43 0; -#X connect 78 0 77 1; +#X msg 262 104 open 16; +#X connect 2 0 51 0; +#X connect 8 0 51 0; +#X connect 9 0 51 0; +#X connect 43 0 51 0; +#X connect 44 0 51 0; +#X connect 45 0 51 0; +#X connect 46 0 51 0; +#X connect 49 0 43 0; +#X connect 50 0 76 0; +#X connect 51 0 59 0; +#X connect 51 0 53 0; +#X connect 51 0 52 0; +#X connect 51 0 58 0; +#X connect 51 1 74 0; +#X connect 52 0 47 0; +#X connect 53 0 5 0; +#X connect 53 1 4 0; +#X connect 53 2 54 0; +#X connect 53 3 3 0; +#X connect 55 0 60 0; +#X connect 55 1 22 0; +#X connect 55 2 23 0; +#X connect 55 3 24 0; +#X connect 55 4 25 0; +#X connect 55 5 26 0; +#X connect 55 6 27 0; +#X connect 56 0 69 0; +#X connect 56 1 63 0; +#X connect 56 2 55 0; +#X connect 58 0 56 0; +#X connect 58 0 70 0; +#X connect 61 0 59 1; +#X connect 62 0 51 0; +#X connect 63 0 0 0; +#X connect 63 1 1 0; +#X connect 63 2 16 0; +#X connect 63 4 21 0; +#X connect 63 5 64 0; +#X connect 66 0 51 0; +#X connect 67 0 51 0; +#X connect 69 0 15 0; +#X connect 69 1 28 0; +#X connect 69 2 29 0; +#X connect 69 3 30 0; +#X connect 69 4 31 0; +#X connect 69 5 32 0; +#X connect 69 6 33 0; +#X connect 69 7 34 0; +#X connect 69 8 35 0; +#X connect 69 9 36 0; +#X connect 69 10 37 0; +#X connect 69 11 38 0; +#X connect 69 12 39 0; +#X connect 69 13 40 0; +#X connect 69 14 41 0; +#X connect 69 15 42 0; +#X connect 75 0 74 1; +#X connect 76 0 51 0;
Modified: trunk/externals/io/hidio/hidio_linux.c =================================================================== --- trunk/externals/io/hidio/hidio_linux.c 2008-09-09 01:36:56 UTC (rev 10283) +++ trunk/externals/io/hidio/hidio_linux.c 2008-09-09 02:34:12 UTC (rev 10284) @@ -55,90 +55,28 @@
t_symbol* hidio_convert_linux_buttons_to_numbers(__u16 linux_code) { - char hidio_code[MAXPDSTRING]; + char hidio_code[MAXPDSTRING] = "\0"; if(linux_code >= 0x100) { if(linux_code < BTN_MOUSE) /* numbered buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_MISC); + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_MISC); else if(linux_code < BTN_JOYSTICK) /* mouse buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_MOUSE); + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_MOUSE); else if(linux_code < BTN_GAMEPAD) /* joystick buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_JOYSTICK); + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_JOYSTICK); else if(linux_code < BTN_DIGI) /* gamepad buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_GAMEPAD); + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_GAMEPAD); else if(linux_code < BTN_WHEEL) /* tablet buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_DIGI); + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_DIGI); else if(linux_code < KEY_OK) /* wheel buttons */ - snprintf(hidio_code, MAXPDSTRING,"btn_%d",linux_code - BTN_WHEEL); - else return 0; + snprintf(hidio_code, MAXPDSTRING,"button_%d",linux_code - BTN_WHEEL); + else + return gensym("?"); } - return gensym(*hidio_code ? hidio_code : "?"); + return gensym(hidio_code); }
-/* Georg Holzmann: implementation of the keys */ -/* JMZ: use t_symbol instead of char[] (s.a.) AND - * appended "key_" in the array so we don't have to append it each time AND - * made the table static - */ -t_symbol* hidio_convert_linux_keys(__u16 linux_code) -{ - if(linux_code > 226) - return 0;
- static char key_names[227][32] = - { - "key_reserved", "key_esc", "key_1", "key_2", "key_3", "key_4", - "key_5", "key_6", "key_7", "key_8", "key_9", "key_0", "key_minus", - "key_equal", "key_backspace", "key_tab", "key_q", "key_w", - "key_e", "key_r", "key_t", "key_y", "key_u", "key_i", "key_o", - "key_p","key_leftbrace", "key_rightbrace", "key_enter", - "key_leftctrl", "key_a","key_s", "key_d", "key_f", "key_g", - "key_h", "key_j", "key_k", "key_l", "key_semicolon", - "key_apostrophe", "key_grave", "key_leftshift", "key_backslash", - "key_z","key_x", "key_c", "key_v", "key_b", "key_n", "key_m", - "key_comma", "key_dot", "key_slash","key_rightshift", - "key_kpasterisk", "key_leftalt", "key_space", "key_capslock", - "key_f1", "key_f2", "key_f3", "key_f4", "key_f5", "key_f6", - "key_f7", "key_f8", "key_f9", "key_f10","key_numlock", - "key_scrolllock", "key_kp7", "key_kp8", "key_kp9", "key_kpminus", - "key_kp4", "key_kp5", "key_kp6", "key_kpplus", "key_kp1", "key_kp2", - "key_kp3", "key_kp3", "key_kpdot","key_103rd", "key_f13", - "key_102nd", "key_f11", "key_f12", "key_f14", "key_f15", "key_f16", - "key_f17", "key_f18", "key_f19", "key_f20", "key_kpenter", - "key_rightctrl", "key_kpslash","key_sysrq", "key_rightalt", - "key_linefeed", "key_home", "key_up", "key_pageup", "key_left", - "key_right", "key_end", "key_down", "key_pagedown", "key_insert", - "key_delete", "key_macro","key_mute", "key_volumedown", - "key_volumeup", "key_power", "key_kpequal", "key_kpplusminus", - "key_pause", "key_f21", "key_f22", "key_f23", "key_f24", - "key_kpcomma", "key_leftmeta","key_rightmeta", "key_compose", - "key_stop", "key_again", "key_props", "key_undo", "key_front", - "key_copy", "key_open","key_paste", "key_find","key_cut","key_help", - "key_menu", "key_calc", "key_setup", "key_sleep", "key_wakeup", - "key_file", "key_sendfile", "key_deletefile","key_xfer","key_prog1", - "key_prog2", "key_www","key_msdos", "key_coffee", "key_direction", - "key_cyclewindows", "key_mail", "key_bookmarks","key_computer", - "key_back", "key_forward", "key_colsecd", "key_ejectcd", - "key_ejectclosecd","key_nextsong","key_playpause","key_previoussong", - "key_stopcd", "key_record","key_rewind", "key_phone", "key_iso", - "key_config", "key_homepage", "key_refresh", "key_exit","key_move", - "key_edit", "key_scrollup", "key_scrolldown", "key_kpleftparen", - "key_kprightparen","key_intl1", "key_intl2", "key_intl3","key_intl4", - "key_intl5", "key_intl6", "key_intl7","key_intl8", "key_intl9", - "key_lang1", "key_lang2", "key_lang3", "key_lang4", "key_lang5", - "key_lang6", "key_lang7", "key_lang8", "key_lang9", "key_playcd", - "key_pausecd", "key_prog3","key_prog4", "key_suspend", "key_close", - "key_play", "key_fastforward", "key_bassboost","key_print", "key_hp", - "key_camera", "key_sound", "key_question", "key_email", "key_chat", - "key_search", "key_connect", "key_finance", "key_sport", "key_shop", - "key_alterase","key_cancel", "key_brightnessdown", "key_brightnessup", - "key_media" - }; - return gensym(key_names[linux_code]); // TODO: this should just return the char * -} - - - void hidio_elements(t_hidio *x) { debug_post(LOG_DEBUG,"hidio_elements"); @@ -352,6 +290,7 @@ new_element->linux_code = j; if((i == EV_KEY) && (j >= BTN_MISC) && (j < KEY_OK) ) { + new_element->type = ps_button; new_element->name = hidio_convert_linux_buttons_to_numbers(j); } else @@ -462,13 +401,19 @@ debug_post(LOG_DEBUG,"hidio_open_device");
char device_name[MAXPDSTRING] = "Unknown"; - char block_device[MAXPDSTRING] = "/dev/input/event0"; + char block_device[FILENAME_MAX] = "/dev/input/event0"; struct input_event hidio_input_event;
x->x_fd = -1; - + + if(device_number < 0) + { + pd_error(x,"[hidio] invalid device number: %d", device_number); + return EXIT_FAILURE; + } + x->x_device_number = device_number; - snprintf(block_device,MAXPDSTRING,"/dev/input/event%d",x->x_device_number); + snprintf(block_device, FILENAME_MAX, "/dev/input/event%d", x->x_device_number);
if(*block_device) {
Modified: trunk/externals/io/hidio/input_arrays.c =================================================================== --- trunk/externals/io/hidio/input_arrays.c 2008-09-09 01:36:56 UTC (rev 10283) +++ trunk/externals/io/hidio/input_arrays.c 2008-09-09 02:34:12 UTC (rev 10284) @@ -2,7 +2,7 @@
int ev_total = 32; /* # of elements in array */ char *ev[32] = { - "syn","key","rel","abs","msc","ev_5", + "syn","key","relative","absolute","msc","ev_5", "ev_6","ev_7","ev_8","ev_9","ev_10","ev_11", "ev_12","ev_13","ev_14","ev_15","ev_16","led", "snd","ev_19","rep","ff","pwr","ff_status", @@ -104,39 +104,37 @@
int ev_key_total = 512; /* # of elements in array */ char *ev_key[512] = { - "key_reserved","key_esc","key_1","key_2","key_3","key_4", - "key_5","key_6","key_7","key_8","key_9","key_0", - "key_minus","key_equal","key_backspace","key_tab","key_q","key_w", - "key_e","key_r","key_t","key_y","key_u","key_i", - "key_o","key_p","key_leftbrace","key_rightbrace","key_enter","key_leftctrl", - "key_a","key_s","key_d","key_f","key_g","key_h", - "key_j","key_k","key_l","key_semicolon","key_apostrophe","key_grave", - "key_leftshift","key_backslash","key_z","key_x","key_c","key_v", - "key_b","key_n","key_m","key_comma","key_dot","key_slash", - "key_rightshift","key_kpasterisk","key_leftalt","key_space","key_capslock","key_f1", - "key_f2","key_f3","key_f4","key_f5","key_f6","key_f7", - "key_f8","key_f9","key_f10","key_numlock","key_scrolllock","key_kp7", - "key_kp8","key_kp9","key_kpminus","key_kp4","key_kp5","key_kp6", - "key_kpplus","key_kp1","key_kp2","key_kp3","key_kp0","key_kpdot", - "key_84","key_zenkakuhankaku","key_102nd","key_f11","key_f12","key_ro", - "key_katakana","key_hiragana","key_henkan","key_katakanahiragana","key_muhenkan","key_kpjpcomma", - "key_kpenter","key_rightctrl","key_kpslash","key_sysrq","key_rightalt","key_linefeed", - "key_home","key_up","key_pageup","key_left","key_right","key_end", - "key_down","key_pagedown","key_insert","key_delete","key_macro","key_mute", - "key_volumedown","key_volumeup","key_power","key_kpequal","key_kpplusminus","key_pause", - "key_120","key_kpcomma","key_hanguel","key_hanja","key_yen","key_leftmeta", - "key_rightmeta","key_compose","key_stop","key_again","key_props","key_undo", + "key_reserved","escape","1_key","2_key","3_key","4_key", + "5_key","6_key","7_key","8_key","9_key","0_key", + "hyphen","equalsign","deleteorbackspace","tab","q","w", + "e","r","t","y","u","i", + "o","p","key_leftbrace","key_rightbrace","key_enter","leftcontrol", + "a","s","d","f","g","h", + "j","k","l","semicolon","key_apostrophe","key_grave", + "leftshift","backslash","z","x","c","v", + "b","n","m","comma","period","slash", + "rightshift","keypad_asterisk","leftalt","spacebar","capslock","F1", + "F2","F3","F4","F5","F6","F7","F8","F9","F10","numlock","scrolllock","keypad_7", + "keypad_8","keypad_9","keypad_minus","keypad_4","keypad_5","keypad_6", + "keypad_plus","keypad_1","keypad_2","keypad_3","keypad_0","keypad_dot", + "key_84","key_zenkakuhankaku","key_102nd","F11","F12","key_ro", + "key_katakana","key_hiragana","key_henkan","key_katakanahiragana","key_muhenkan","keypad_jpcomma", + "keypad_enter","rightcontrol","keypad_slash","key_sysrq","rightalt","key_linefeed", + "home","uparrow","pageup","leftarrow","rightarrow","end", + "downarrow","pagedown","insert","delete","macro","mute", + "volumedown","volumeup","power","keypad_equal","keypad_plusminus","pause", + "key_120","keypad_comma","key_hanguel","key_hanja","key_yen","leftgui", + "rightgui","compose","stop","key_again","key_props","key_undo", "key_front","key_copy","key_open","key_paste","key_find","key_cut", "key_help","key_menu","key_calc","key_setup","key_sleep","key_wakeup", "key_file","key_sendfile","key_deletefile","key_xfer","key_prog1","key_prog2", "key_www","key_msdos","key_coffee","key_direction","key_cyclewindows","key_mail", - "key_bookmarks","key_computer","key_back","key_forward","key_closecd","key_ejectcd", + "key_bookmarks","key_computer","key_back","key_forward","closecd","ejectcd", "key_ejectclosecd","key_nextsong","key_playpause","key_previoussong","key_stopcd","key_record", "key_rewind","key_phone","key_iso","key_config","key_homepage","key_refresh", - "key_exit","key_move","key_edit","key_scrollup","key_scrolldown","key_kpleftparen", - "key_kprightparen","key_181","key_182","key_f13","key_f14","key_f15", - "key_f16","key_f17","key_f18","key_f19","key_f20","key_f21", - "key_f22","key_f23","key_f24","key_195","key_196","key_197", + "key_exit","key_move","key_edit","key_scrollup","key_scrolldown","keypad_leftparen", + "keypad_rightparen","key_181","key_182","F13","F14","F15", + "F16","F17","F18","F19","F20","F21","F22","F23","F24","key_195","key_196","key_197", "key_198","key_199","key_playcd","key_pausecd","key_prog3","key_prog4", "key_204","key_suspend","key_close","key_play","key_fastforward","key_bassboost", "key_print","key_hp","key_camera","key_sound","key_question","key_email", @@ -146,9 +144,9 @@ "key_234","key_235","key_236","key_237","key_238","key_239", "key_unknown","key_241","key_242","key_243","key_244","key_245", "key_246","key_247","key_248","key_249","key_250","key_251", - "key_252","key_253","key_254","key_255","btn_0","btn_1", - "btn_2","btn_3","btn_4","btn_5","btn_6","btn_7", - "btn_8","btn_9","key_266","key_267","key_268","key_269", + "key_252","key_253","key_254","key_255","button_0","button_1", + "button_2","button_3","button_4","button_5","button_6","button_7", + "button_8","button_9","key_266","key_267","key_268","key_269", "key_270","key_271","btn_left","btn_right","btn_middle","btn_side", "btn_extra","btn_forward","btn_back","btn_task","key_280","key_281", "key_282","key_283","key_284","key_285","key_286","key_287", @@ -193,22 +191,24 @@ };
+/* relative */ int ev_rel_total = 16; /* # of elements in array */ char *ev_rel[16] = { - "rel_x","rel_y","rel_z","rel_rx","rel_ry","rel_rz", - "rel_hwheel","rel_dial","rel_wheel","rel_misc","rel_10","rel_11", + "x","y","z","rx","ry","rz", + "rel_hwheel","dial","wheel","rel_misc","rel_10","rel_11", "rel_12","rel_13","rel_14","rel_15" };
+/* absolute */ int ev_abs_total = 64; /* # of elements in array */ char *ev_abs[64] = { - "abs_x","abs_y","abs_z","abs_rx","abs_ry","abs_rz", - "abs_throttle","abs_rudder","abs_wheel","abs_gas","abs_brake","abs_11", - "abs_12","abs_13","abs_14","abs_15","abs_hat0x","abs_hat0y", - "abs_hat1x","abs_hat1y","abs_hat2x","abs_hat2y","abs_hat3x","abs_hat3y", - "abs_pressure","abs_distance","abs_tilt_x","abs_tilt_y","abs_tool_width","abs_29", - "abs_30","abs_31","abs_volume","abs_33","abs_34","abs_35", + "x","y","z","rx","ry","rz", + "throttle","rudder","wheel","gas","brake","abs_11", + "abs_12","abs_13","abs_14","abs_15","hat0x","hat0y", + "hat1x","hat1y","hat2x","hat2y","hat3x","hat3y", + "pressure","distance","tilt_x","tilt_y","tool_width","abs_29", + "abs_30","abs_31","volume","abs_33","abs_34","abs_35", "abs_36","abs_37","abs_38","abs_39","abs_misc","abs_41", "abs_42","abs_43","abs_44","abs_45","abs_46","abs_47", "abs_48","abs_49","abs_50","abs_51","abs_52","abs_53", @@ -226,8 +226,8 @@
int ev_led_total = 16; /* # of elements in array */ char *ev_led[16] = { - "led_numl","led_capsl","led_scrolll","led_compose","led_kana","led_sleep", - "led_suspend","led_mute","led_misc","led_mail","led_charging","led_11", + "numlock","capslock","scrolllock","compose","kana","sleep", + "suspend","mute","led_misc","mail","charging","led_11", "led_12","led_13","led_14","led_15" };
@@ -260,10 +260,10 @@ "ff_60","ff_61","ff_62","ff_63","ff_64","ff_65", "ff_66","ff_67","ff_68","ff_69","ff_70","ff_71", "ff_72","ff_73","ff_74","ff_75","ff_76","ff_77", - "ff_78","ff_79","ff_rumble","ff_periodic","ff_constant","ff_spring", - "ff_friction","ff_damper","ff_inertia","ff_ramp","ff_square","ff_triangle", - "ff_sine","ff_saw_up","ff_saw_down","ff_custom","ff_94","ff_95", - "ff_gain","ff_autocenter","ff_98","ff_99","ff_100","ff_101", + "ff_78","ff_79","rumble","periodic","constant","spring", + "friction","damper","inertia","ramp","square","triangle", + "sine","saw_up","saw_down","ff_custom","ff_94","ff_95", + "gain","autocenter","ff_98","ff_99","ff_100","ff_101", "ff_102","ff_103","ff_104","ff_105","ff_106","ff_107", "ff_108","ff_109","ff_110","ff_111","ff_112","ff_113", "ff_114","ff_115","ff_116","ff_117","ff_118","ff_119",
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.