diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2004-10-18 21:10:49 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2004-10-18 21:10:49 +0000 |
commit | a71ce6ca986dacad105df7823476e6f1a0756819 (patch) | |
tree | 08064faadc249a077bfa063d36a27c223e8d1529 | |
parent | f3747e4a3a388b98e1877e3984adcbf459f4a24c (diff) |
[hid] now outputs downcased event names from input.h and Makefile should work on MacOSX and GNU/Linux
svn path=/trunk/externals/hcs/hid/; revision=2121
-rw-r--r-- | Makefile | 35 | ||||
-rw-r--r-- | hid.c | 99 | ||||
-rwxr-xr-x | make-arrays-from-input.h.pl | 48 |
3 files changed, 106 insertions, 76 deletions
@@ -1,15 +1,30 @@ CC=gcc
-all: input_arrays pd_darwin
+OS_NAME = $(shell uname -s)
+
-pd_darwin: hid.pd_darwin macosxhid.pd_darwin
+# ----------------------- GNU/LINUX i386 -----------------------
+ifeq ($(OS_NAME),Linux)
+LDFLAGS = -export_dynamic -shared
+.SUFFIXES: .pd_linux
-clean: ; rm -f *.pd_darwin *.o *~ input_arrays.h
+all: input_arrays pd_linux
+pd_linux: hid.pd_linux
-# ----------------------- DARWIN i386 -----------------------
+endif
+# ----------------------- DARWIN -----------------------
+ifeq ($(OS_NAME),Darwin)
+LDFLAGS = -bundle -bundle_loader $(PDEXECUTABLE) -L/sw/lib
.SUFFIXES: .pd_darwin
+all: input_arrays pd_darwin
+pd_darwin: hid.pd_darwin
+
+endif
+
+# ----------------------- GENERAL -----------------------
+
PDEXECUTABLE = ../../../pd/bin/pd
CFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \
@@ -18,11 +33,19 @@ CFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \ INCLUDE = -I../ -I../../../pd/src -I/usr/local/include -I./HID\ Utilities\ Source
-LDFLAGS = -bundle -bundle_loader $(PDEXECUTABLE) -L/sw/lib
-
.c.pd_darwin:
$(CC) $(CFLAGS) $(INCLUDE) -o $*.o -c $*.c
$(CC) $(LDFLAGS) -o "$*.pd_darwin" "$*.o" -lc -lm
+.c.pd_linux:
+ $(CC) $(CFLAGS) $(INCLUDE) -o $*.o -c $*.c
+ ld $(LDFLAGS) -o $*.pd_linux $*.o -lc -lm
+ strip --strip-unneeded $*.pd_linux
+ rm $*.o
+
input_arrays:
./make-arrays-from-input.h.pl > input_arrays.h
+
+
+clean: ; rm -f *.pd_* *.o *~ input_arrays.h
+
@@ -54,7 +54,7 @@ #include "linuxhid.h" #include "input_arrays.h" -static char *version = "$Revision: 1.1 $"; +static char *version = "$Revision: 1.2 $"; /*------------------------------------------------------------------------------ * CLASS DEF @@ -156,52 +156,56 @@ static int hid_open(t_hid *x, t_symbol *s) { ff = 0; /* cycle through all possible event types */ - for (eventType = 0; eventType < EV_MAX; eventType++) { - if (test_bit(eventType, bitmask[0])) { - post(" %s (type %d) ", events[eventType] ? events[eventType] : "?", eventType); - // post("Event type %d",eventType); - - /* get bitmask representing supported button types */ - ioctl(x->x_fd, EVIOCGBIT(eventType, KEY_MAX), bitmask[eventType]); - - /* cycle through all possible event codes (axes, keys, etc.) - * testing to see which are supported - */ - for (eventCode = 0; eventCode < KEY_MAX; eventCode++) - if (test_bit(eventCode, bitmask[eventType])) { - post(" Event code %d (%s)", eventCode, names[eventType] ? (names[eventType][eventCode] ? names[eventType][eventCode] : "?") : "?"); - - switch(eventType) { + for (eventType = 0; eventType < EV_MAX; eventType++) + { + if (test_bit(eventType, bitmask[0])) + { + post(" %s (type %d) ", ev[eventType] ? ev[eventType] : "?", eventType); + // post("Event type %d",eventType); + + /* get bitmask representing supported button types */ + ioctl(x->x_fd, EVIOCGBIT(eventType, KEY_MAX), bitmask[eventType]); + + /* cycle through all possible event codes (axes, keys, etc.) + * testing to see which are supported + */ + for (eventCode = 0; eventCode < KEY_MAX; eventCode++) + if (test_bit(eventCode, bitmask[eventType])) + { + post(" Event code %s (%d)", event_names[eventType] ? (event_names[eventType][eventCode] ? event_names[eventType][eventCode] : "?") : "?", eventCode); +/* post(" Event code %d (%s)", eventCode, names[eventType] ? (names[eventType][eventCode] ? names[eventType][eventCode] : "?") : "?"); */ + + switch(eventType) { // the API changed at some point... #ifdef EV_RST - case EV_RST: - break; + case EV_RST: + break; #else - case EV_SYN: - break; + case EV_SYN: + break; #endif - case EV_KEY: - buttons++; - break; - case EV_REL: - rel_axes++; - break; - case EV_ABS: - abs_axes++; - break; - case EV_MSC: - break; - case EV_LED: - break; - case EV_SND: - break; - case EV_REP: - break; - case EV_FF: - ff++; - break; - } - } + case EV_KEY: + buttons++; + break; + case EV_REL: + rel_axes++; + break; + case EV_ABS: + abs_axes++; + break; + case EV_MSC: + break; + case EV_LED: + break; + case EV_SND: + break; + case EV_REP: + break; + case EV_FF: + ff++; + break; + } + } } } @@ -223,12 +227,13 @@ static int hid_read(t_hid *x,int fd) #ifdef __gnu_linux__ while (read (x->x_fd, &(x->x_input_event), sizeof(struct input_event)) > -1) { outlet_float (x->x_input_event_value_outlet, (int)x->x_input_event.value); - outlet_float (x->x_input_event_code_outlet, x->x_input_event.code); - outlet_float (x->x_input_event_type_outlet, x->x_input_event.type); + outlet_symbol (x->x_input_event_code_outlet, gensym(event_names[x->x_input_event.type][x->x_input_event.code])); + outlet_symbol (x->x_input_event_type_outlet, gensym(ev[x->x_input_event.type])); /* input_event.time is a timeval struct from <sys/time.h> */ /* outlet_float (x->x_input_event_time_outlet, x->x_input_event.time); */ } -#else defined (__APPLE__) +#endif +#ifdef __APPLE__ pRecDevice pCurrentHIDDevice = GetSetCurrentDevice (gWindow); pRecElement pCurrentHIDElement = GetSetCurrentElement (gWindow); @@ -307,7 +312,7 @@ static void *hid_new(t_symbol *s) { x->x_read_ok = 1; x->x_started = 0; x->x_delay = DEFAULT_DELAY; - x->x_devname = gensym(HID_DEVICE); + x->x_devname = gensym("/dev/input/event0"); x->x_clock = clock_new(x, (t_method)hid_read); diff --git a/make-arrays-from-input.h.pl b/make-arrays-from-input.h.pl index 060426b..9f4db42 100755 --- a/make-arrays-from-input.h.pl +++ b/make-arrays-from-input.h.pl @@ -30,7 +30,7 @@ sub getDataFromHeaderLine if ($index >=0) { $returnArray[0] = $index; - $returnArray[1] = "$1"; + $returnArray[1] = lc("$1"); return @returnArray; } # print "$1 \t\t\t $index $#returnArray\n "; @@ -47,7 +47,7 @@ sub printCArray # print("$arrayToPrint[0] $#arrayToPrint \n"); - print("int ${arrayToPrint[0]}_TOTAL = $#arrayToPrint; /* # of elements in array */\n"); + print("int ${arrayToPrint[0]}_total = $#arrayToPrint; /* # of elements in array */\n"); print("char *${arrayToPrint[0]}[$#arrayToPrint] = {"); for($i = 1; $i < $#arrayToPrint; $i++) @@ -70,18 +70,18 @@ $FILENAME = "linux/input.h"; open(INPUT_H, "<$FILENAME"); -while(<INPUT_H>) +while (<INPUT_H>) { - if (m/#define (FF_STATUS|[A-Z_]*?)_/) + if (m/\#define (FF_STATUS|[A-Z_]*?)_/) { # filter EV_VERSION and *_MAX - m/#define\s+(EV_VERSION|[A-Z_]+_MAX)\s+/; + m/\#define\s+(EV_VERSION|[A-Z_]+_MAX)\s+/; # print "$1 \n"; switch ($1) { - # types + # types case "EV" { ($index, $value) = getDataFromHeaderLine($_); $EV[$index] = $value; } - # codes + # codes case "SYN" { ($index, $value) = getDataFromHeaderLine($_); $SYN[$index] = $value; } case "KEY" { ($index, $value) = getDataFromHeaderLine($_); $KEY[$index] = $value; } # BTN codes are actually part of the KEY type @@ -94,28 +94,30 @@ while(<INPUT_H>) case "REP" { ($index, $value) = getDataFromHeaderLine($_); $REP[$index] = $value; } case "FF" { ($index, $value) = getDataFromHeaderLine($_); $FF[$index] = $value; } # there doesn't seem to be any PWR events yet... - case "PWR" { ($index, $value) = getDataFromHeaderLine($_); $PWR[$index] = $value; } +# case "PWR" { ($index, $value) = getDataFromHeaderLine($_); $PWR[$index] = $value; } case "FF_STATUS" { ($index, $value) = getDataFromHeaderLine($_); $FF_STATUS[$index] = $value; } # else { print " none $_"; } } } } -printCArray("EV",@EV); -printCArray("SYN",@SYN); -printCArray("KEY",@KEY); -printCArray("REL",@REL); -printCArray("ABS",@ABS); -printCArray("MSC",@MSC); -printCArray("LED",@LED); -printCArray("SND",@SND); -printCArray("REP",@REP); -printCArray("FF",@FF); -printCArray("PWR",@PWR); -printCArray("FF_STATUS",@FF_STATUS); +printCArray("ev",@EV); +printCArray("ev_syn",@SYN); +printCArray("ev_key",@KEY); +printCArray("ev_rel",@REL); +printCArray("ev_abs",@ABS); +printCArray("ev_msc",@MSC); +printCArray("ev_led",@LED); +printCArray("ev_snd",@SND); +printCArray("ev_rep",@REP); +printCArray("ev_ff",@FF); +# there doesn't seem to be any PWR events yet... +#printCArray("pwr",@PWR); +print("char *ev_pwr[1] = { NULL };\n\n"); +printCArray("ev_ff_status",@FF_STATUS); # print array of arrays -print("char **EVENTNAMES[",$#EV+1,"] = {"); +print("char **event_names[",$#EV+1,"] = {"); for($i = 0; $i < $#EV; $i++) { # format nicely in sets of 6 @@ -125,13 +127,13 @@ for($i = 0; $i < $#EV; $i++) if ($EV[$i]) { $_ = $EV[$i]; - m/EV_([A-Z_]+)/; + m/(ev_[a-z_]+)/; print("$1,"); } else { print("NULL,"); } } $_ = $EV[$#EV]; -m/EV_([A-Z_]+)/; +m/(ev_[a-z_]+)/; print("$1\n };\n"); |