aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile35
-rw-r--r--hid.c99
-rwxr-xr-xmake-arrays-from-input.h.pl48
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 <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");