From a71ce6ca986dacad105df7823476e6f1a0756819 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 18 Oct 2004 21:10:49 +0000 Subject: [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 --- Makefile | 35 +++++++++++++--- hid.c | 99 ++++++++++++++++++++++++--------------------- make-arrays-from-input.h.pl | 48 +++++++++++----------- 3 files changed, 106 insertions(+), 76 deletions(-) diff --git a/Makefile b/Makefile index dc8be9d..a205252 100644 --- a/Makefile +++ b/Makefile @@ -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 + diff --git a/hid.c b/hid.c index d5248f7..78febea 100644 --- a/hid.c +++ b/hid.c @@ -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 */ /* 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() +while () { - 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() 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"); -- cgit v1.2.1