--- /Users/hans/Desktop/aka.wiiremote-b2-src/aka.wiiremote.c 2006-12-15 08:36:06.000000000 -0500 +++ aka.wiiremote.c 2006-12-16 17:05:31.000000000 -0500 @@ -1,15 +1,28 @@ // aka.wiiremote.c // Copyright by Masayuki Akamatsu +// port to Pd by Hans-Christoph Steiner + +#ifdef PD +#include "m_pd.h" +#define SETLONG SETFLOAT +static t_class *wiiremote_class; +#else /* Max */ #include "ext.h" +#endif #include "wiiremote.h" #define kInterval 100 #define kMaxTrial 100 + typedef struct _akawiiremote { +#ifdef PD + t_object x_obj; +#else /* Max */ struct object obj; +#endif WiiRemoteRef wiiremote; @@ -44,6 +57,36 @@ void *akawiiremote_new(t_symbol *s, short ac, t_atom *av); void akawiiremote_free(t_akawiiremote *x); +#ifdef PD +void wiiremote_setup() +{ + wiiremote_class = class_new(gensym("wiiremote"), + (t_newmethod)akawiiremote_new, + (t_method)akawiiremote_free, + sizeof(t_akawiiremote), + CLASS_DEFAULT, + A_GIMME,0); + + class_addbang(wiiremote_class,(t_method)akawiiremote_bang); + class_addmethod(wiiremote_class,(t_method)akawiiremote_connect,gensym("connect"),0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_disconnect,gensym("disconnect"),0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_motionsensor,gensym("motionsensor"), A_DEFFLOAT, 0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_irsensor,gensym("irsensor"), A_DEFFLOAT, 0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_vibration,gensym("vibration"), A_DEFFLOAT, 0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_led,gensym("led"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); + + class_addmethod(wiiremote_class,(t_method)akawiiremote_getbatterylevel,gensym("getbatterylevel"),0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_getexpansionstatus,gensym("getexpansionstatus"),0); + class_addmethod(wiiremote_class,(t_method)akawiiremote_getledstatus,gensym("getledstatus"),0); + + class_addmethod(wiiremote_class,(t_method)akawiiremote_assist,gensym("assist"),A_CANT,0); + + post("aka.wiiremote 1.0B2-UB by Masayuki Akamatsu"); + post("\tPd port by Hans-Christoph Steiner"); + + akawiiremote_count = 0; +} +#else /* Max */ void main() { setup((t_messlist **)&akawiiremote_class, (method)akawiiremote_new, (method)akawiiremote_free, (short)sizeof(t_akawiiremote), 0L, A_GIMME, 0); @@ -66,7 +109,7 @@ akawiiremote_count = 0; } - +#endif /* PD */ //-------------------------------------------------------------------------------------------- void akawiiremote_bang(t_akawiiremote *x) @@ -76,6 +119,27 @@ if (x->wiiremote->device == nil) return; // do nothing +#ifdef PD + outlet_float(x->buttonsOut, (t_float) x->wiiremote->buttonData); + + if (x->wiiremote->isIRSensorEnabled) + { + SETFLOAT(list, x->wiiremote->posX); + SETFLOAT(list + 1, x->wiiremote->posY); + SETFLOAT(list + 2, x->wiiremote->angle); + SETFLOAT (list + 3, x->wiiremote->tracking); + outlet_list(x->irOut, &s_list, 4, list); + } + + if (x->wiiremote->isMotionSensorEnabled) + { + SETFLOAT(list, x->wiiremote->accX); + SETFLOAT(list + 1, x->wiiremote->accY); + SETFLOAT(list + 2, x->wiiremote->accZ); + SETFLOAT(list + 3, x->wiiremote->orientation); + outlet_list(x->accOut, &s_list, 4, list); + } +#else /* Max */ outlet_int(x->buttonsOut, x->wiiremote->buttonData); if (x->wiiremote->isIRSensorEnabled) @@ -95,6 +159,7 @@ SETLONG(list + 3, x->wiiremote->orientation); outlet_list(x->accOut, 0L, 4, &list); } +#endif /* PD */ wiiremote_getstatus(); } @@ -173,11 +238,19 @@ { t_atom list[4]; +#ifdef PD + SETFLOAT(list, x->wiiremote->isLED1Illuminated); + SETFLOAT(list + 1, x->wiiremote->isLED2Illuminated); + SETFLOAT(list + 2, x->wiiremote->isLED3Illuminated); + SETFLOAT(list + 3, x->wiiremote->isLED4Illuminated); + outlet_anything(x->statusOut, gensym("ledstatus"), 4, list); +#else /* Max */ SETLONG(list, x->wiiremote->isLED1Illuminated); SETLONG(list + 1, x->wiiremote->isLED2Illuminated); SETLONG(list + 2, x->wiiremote->isLED3Illuminated); SETLONG(list + 3, x->wiiremote->isLED4Illuminated); outlet_anything(x->statusOut, gensym("ledstatus"), 4, &list); +#endif } //-------------------------------------------------------------------------------------------- @@ -222,11 +295,13 @@ void akawiiremote_assist(t_akawiiremote *x, void *b, long m, long a, char *s) { +#ifndef PD /* Max */ if (m==ASSIST_INLET) { sprintf(s,"connect, bang, disconnect...."); } else +#endif /* NOT PD */ { switch(a) { @@ -242,6 +317,17 @@ void *akawiiremote_new(t_symbol *s, short ac, t_atom *av) { +#ifdef PD + t_akawiiremote *x = (t_akawiiremote *)pd_new(wiiremote_class); + + x->clock = clock_new(x, (t_method)akawiiremote_clock); + + /* create anything outlet used for HID data */ + x->statusOut = outlet_new(&x->x_obj, 0); + x->buttonsOut = outlet_new(&x->x_obj, &s_float); + x->irOut = outlet_new(&x->x_obj, &s_list); + x->accOut = outlet_new(&x->x_obj, &s_list); +#else /* Max */ t_akawiiremote *x; x = (t_akawiiremote *)newobject(akawiiremote_class); @@ -249,13 +335,15 @@ x->wiiremote = wiiremote_init(); x->clock = clock_new(x, (method)akawiiremote_clock); - x->trial = 0; - x->interval = kInterval; x->statusOut = outlet_new(x, 0); x->buttonsOut = intout(x); x->irOut = listout(x); x->accOut = listout(x); +#endif /* PD */ + x->trial = 0; + x->interval = kInterval; + akawiiremote_count++; return x; @@ -267,6 +355,12 @@ if (akawiiremote_count == 0) wiiremote_disconnect(); +#ifdef PD + if (x->clock) + clock_unset(x->clock); + clock_free(x->clock); +#else /* Max */ freeobject(x->clock); +#endif } --- /Users/hans/Desktop/aka.wiiremote-b2-src/wiiremote.h 2006-12-14 10:21:42.000000000 -0500 +++ wiiremote.h 2006-12-16 16:48:38.000000000 -0500 @@ -2,9 +2,13 @@ // Copyright by Masayuki Akamatsu // Based on "DarwiinRemote" by Hiroaki Kimura +#include #include #include +#include +#include + typedef struct { int x, y, s; } IRData; --- /Users/hans/Desktop/aka.wiiremote-b2-src/wiiremote.c 2006-12-15 08:31:05.000000000 -0500 +++ wiiremote.c 2006-12-16 17:12:14.000000000 -0500 @@ -4,6 +4,8 @@ #include "wiiremote.h" +#include + // this type is used a lot (data array): typedef unsigned char darr[];