aboutsummaryrefslogtreecommitdiff
path: root/hid_linux.c
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2004-11-28 01:27:47 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2004-11-28 01:27:47 +0000
commit923e18b2face0b0b0f13e202a894be56242fe4e0 (patch)
tree838186d3232da6a4dfd754a8665d5831d736fff7 /hid_linux.c
parenta88927720982bada5b9da445bac7653858cde587 (diff)
fixed a number of annoying bugs in MacOS X; cleaned up code; now multiple [hid]s work at the same time
svn path=/trunk/externals/hcs/hid/; revision=2329
Diffstat (limited to 'hid_linux.c')
-rw-r--r--hid_linux.c241
1 files changed, 125 insertions, 116 deletions
diff --git a/hid_linux.c b/hid_linux.c
index 74b80cc..90fb6ad 100644
--- a/hid_linux.c
+++ b/hid_linux.c
@@ -42,7 +42,123 @@
/* LINUX-SPECIFIC SUPPORT FUNCTIONS */
/* ============================================================================== */
-void hid_list_devices(void)
+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;
char device_output_string[256] = "Unknown";
@@ -138,26 +254,26 @@ t_int hid_get_events(t_hid *x)
DEBUG(++event_counter;);
}
DEBUG(
- if (event_counter > 0)
- post("output %d events",event_counter);
+ //if (event_counter > 0)
+ //post("output %d events",event_counter);
);
return (0);
}
+void hid_print(t_hid* x)
+{
+ hid_print_device_list();
+}
+
+
t_int hid_open_device(t_hid *x, t_int device_number)
{
DEBUG(post("hid_open_device"););
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;
@@ -181,111 +297,6 @@ t_int hid_open_device(t_hid *x, t_int device_number)
* 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(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);
}
@@ -313,8 +324,6 @@ t_int hid_build_device_list(t_hid *x)
* the current t_float, then this will probably need to be changed.
*/
- hid_list_devices();
-
return (0);
}