[PD-cvs] externals/io/wiiremote aka.wiiremote.c, 1.6, 1.7 wiiremote.c, 1.4, 1.5 wiiremote.h, 1.3, 1.4

Hans-Christoph Steiner eighthave at users.sourceforge.net
Thu May 17 07:33:47 CEST 2007


Update of /cvsroot/pure-data/externals/io/wiiremote
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28500

Modified Files:
	aka.wiiremote.c wiiremote.c wiiremote.h 
Log Message:
merged in b6 and got it compiling, lots of warning, I would be surprised if it actually works

Index: wiiremote.c
===================================================================
RCS file: /cvsroot/pure-data/externals/io/wiiremote/wiiremote.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** wiiremote.c	28 Dec 2006 23:16:03 -0000	1.4
--- wiiremote.c	17 May 2007 05:33:45 -0000	1.5
***************
*** 10,15 ****
  
  #define	kTrial	10
  
- //static	WiiRemoteRec	gWiiRemote;		// remove in 1.0B4
  
  //--------------------------------------------------------------------------------------------
--- 10,23 ----
  
  #define	kTrial	10
+ #define kWait	10000
[...1365 lines suppressed...]
+ 		if ((ret = writeData(wiiremote, (darr){0x08}, 0x04B00030, 1)) == false)	return ret;
+ 		usleep(kWait);
+ 		
+ 		requestUpdates(wiiremote);
+ 	}
+ 	else
+ 	{
+ 		// probably should do some writes to power down the camera, save battery
+ 		// but don't know how yet.
+ 		
+ 		ret = wiiremote_motionsensor(wiiremote, wiiremote->isMotionSensorEnabled);
+ 		ret = wiiremote_vibration(wiiremote, wiiremote->isVibrationEnabled);
+ 		ret = wiiremote_expansion(wiiremote, wiiremote->isExpansionPortEnabled);
+ 	}
+ 	
+ 	return ret;
+ }
+ 
  Boolean wiiremote_getstatus(WiiRemoteRef wiiremote)
  {

Index: wiiremote.h
===================================================================
RCS file: /cvsroot/pure-data/externals/io/wiiremote/wiiremote.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** wiiremote.h	28 Dec 2006 23:16:03 -0000	1.3
--- wiiremote.h	17 May 2007 05:33:45 -0000	1.4
***************
*** 9,16 ****
--- 9,94 ----
  #include <string.h>
  
+ // Macros for PD for compability with Max macros
+ #ifdef PD
+ #define SETSYM SETSYMBOL
+ #define SETLONG SETFLOAT
+ #endif
+ 
+ typedef unsigned char WiiIRModeType;
+ enum {
+ 	kWiiIRModeBasic			= 0x01,
+ 	kWiiIRModeExtended		= 0x03,
+ 	kWiiIRModeFull			= 0x05
+ };
+ 
  typedef struct {
  	int x, y, s;
  } IRData;
  
+ typedef struct {
+ 	unsigned char accX_zero, accY_zero, accZ_zero, accX_1g, accY_1g, accZ_1g; 
+ } WiiAccCalibData;
+ 
+ typedef struct {
+ 	unsigned char x_min, x_max, x_center, y_min, y_max, y_center; 
+ } WiiJoyStickCalibData;
+ 
+ typedef UInt16 WiiButtonType;
+ enum {
+ 	WiiRemoteAButton,
+ 	WiiRemoteBButton,
+ 	WiiRemoteOneButton,
+ 	WiiRemoteTwoButton,
+ 	WiiRemoteMinusButton,
+ 	WiiRemoteHomeButton,
+ 	WiiRemotePlusButton,
+ 	WiiRemoteUpButton,
+ 	WiiRemoteDownButton,
+ 	WiiRemoteLeftButton,
+ 	WiiRemoteRightButton,
+ 	
+ 	WiiNunchukZButton,
+ 	WiiNunchukCButton,
+ 	
+ 	WiiClassicControllerXButton,
+ 	WiiClassicControllerYButton,
+ 	WiiClassicControllerAButton,
+ 	WiiClassicControllerBButton,
+ 	WiiClassicControllerLButton,
+ 	WiiClassicControllerRButton,
+ 	WiiClassicControllerZLButton,
+ 	WiiClassicControllerZRButton,
+ 	WiiClassicControllerUpButton,
+ 	WiiClassicControllerDownButton,
+ 	WiiClassicControllerLeftButton,
+ 	WiiClassicControllerRightButton,
+ 	WiiClassicControllerMinusButton,
+ 	WiiClassicControllerHomeButton,
+ 	WiiClassicControllerPlusButton
+ };
+ 
+ 
+ typedef UInt16 WiiExpansionPortType;
+ enum{
+ 	WiiExpNotAttached,
+ 	WiiNunchuk,
+ 	WiiClassicController
+ };
+ 
+ typedef UInt16 WiiAccelerationSensorType;
+ enum{
+ 	WiiRemoteAccelerationSensor,
+ 	WiiNunchukAccelerationSensor
+ };
+ 
+ 
+ typedef UInt16 WiiJoyStickType;
+ enum{
+ 	WiiNunchukJoyStick,
+ 	WiiClassicControllerLeftJoyStick,
+ 	WiiClassicControllerRightJoyStick
+ };
+ 
+ 
  typedef struct _WiiRemoteRec
  {
***************
*** 19,22 ****
--- 97,102 ----
  	IOBluetoothL2CAPChannelRef	ichan;
  	IOBluetoothL2CAPChannelRef	cchan;
+ 	
+ 	CFStringRef		address;
  
  	unsigned char	accX;
***************
*** 29,45 ****
  	int				orientation;
  	int				leftPoint; // is point 0 or 1 on the left. -1 when not tracking.
  	float			posX;
  	float			posY;
  	float			angle;
  	Boolean			tracking;
! 
  	IRData			irData[4];
  	double			batteryLevel;
  	
! 	Boolean			isIRSensorEnabled;
  	Boolean			isMotionSensorEnabled;
  	Boolean			isVibrationEnabled;
! 	
! 	Boolean			isExpansionPortUsed;
  	Boolean			isLED1Illuminated;
  	Boolean			isLED2Illuminated;
--- 109,131 ----
  	int				orientation;
  	int				leftPoint; // is point 0 or 1 on the left. -1 when not tracking.
+ 	
  	float			posX;
  	float			posY;
  	float			angle;
  	Boolean			tracking;
! 	
! 	WiiExpansionPortType expType;
! 	WiiAccCalibData	wiiCalibData, nunchukCalibData;
! 	WiiJoyStickCalibData nunchukJoyStickCalibData;
! 	WiiIRModeType	wiiIRMode;
  	IRData			irData[4];
  	double			batteryLevel;
  	
! 	Boolean			readingRegister;
  	Boolean			isMotionSensorEnabled;
+ 	Boolean			isIRSensorEnabled;
  	Boolean			isVibrationEnabled;
! 	Boolean			isExpansionPortEnabled;
! 	Boolean			initExpPort;
  	Boolean			isLED1Illuminated;
  	Boolean			isLED2Illuminated;
***************
*** 47,62 ****
  	Boolean			isLED4Illuminated;
  	
  	IOBluetoothUserNotificationRef	disconnectNotification;
  }	WiiRemoteRec, *WiiRemoteRef;
  
  void			wiiremote_init(WiiRemoteRef wiiremote);
  Boolean			wiiremote_isconnected(WiiRemoteRef wiiremote);
! Boolean			wiiremote_search(WiiRemoteRef wiiremote);
  Boolean			wiiremote_stopsearch(WiiRemoteRef wiiremote);
  Boolean			wiiremote_connect(WiiRemoteRef wiiremote);
  Boolean			wiiremote_disconnect(WiiRemoteRef wiiremote);
  Boolean			wiiremote_motionsensor(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_irsensor(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_vibration(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_led(WiiRemoteRef wiiremote, Boolean enabled1, Boolean enabled2, Boolean enabled3, Boolean enabled4);
  Boolean			wiiremote_getstatus(WiiRemoteRef wiiremote);
--- 133,175 ----
  	Boolean			isLED4Illuminated;
  	
+ 	Boolean			isExpansionPortAttached;
+ 
  	IOBluetoothUserNotificationRef	disconnectNotification;
+ 	
+ 	//nunchuk
+ 	unsigned char	nStickX;
+ 	unsigned char	nStickY;
+ 	unsigned char	nAccX;
+ 	unsigned char	nAccY;
+ 	unsigned char	nAccZ;
+ 	unsigned char	nButtonData;
+ 	
+ 	float			nLowZ;
+ 	float			nLowX;
+ 	int				nOrientation;
+ 	
+ 	//classic controller
+ 	unsigned short	cButtonData;
+ 	unsigned char	cStickX1;
+ 	unsigned char	cStickY1;
+ 	unsigned char	cStickX2;
+ 	unsigned char	cStickY2;
+ 	unsigned char	cAnalogL;
+ 	unsigned char	cAnalogR;
+ 
  }	WiiRemoteRec, *WiiRemoteRef;
  
  void			wiiremote_init(WiiRemoteRef wiiremote);
  Boolean			wiiremote_isconnected(WiiRemoteRef wiiremote);
! Boolean			wiiremote_search(WiiRemoteRef wiiremote, char *address);
  Boolean			wiiremote_stopsearch(WiiRemoteRef wiiremote);
  Boolean			wiiremote_connect(WiiRemoteRef wiiremote);
  Boolean			wiiremote_disconnect(WiiRemoteRef wiiremote);
+ void			wiiremote_getaddress(WiiRemoteRef wiiremote, char *address);
  Boolean			wiiremote_motionsensor(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_irsensor(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_vibration(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_led(WiiRemoteRef wiiremote, Boolean enabled1, Boolean enabled2, Boolean enabled3, Boolean enabled4);
+ Boolean			wiiremote_expansion(WiiRemoteRef wiiremote, Boolean enabled);
  Boolean			wiiremote_getstatus(WiiRemoteRef wiiremote);
+ 

Index: aka.wiiremote.c
===================================================================
RCS file: /cvsroot/pure-data/externals/io/wiiremote/aka.wiiremote.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** aka.wiiremote.c	3 Jan 2007 01:01:08 -0000	1.6
--- aka.wiiremote.c	17 May 2007 05:33:45 -0000	1.7
***************
*** 1,11 ****
--- 1,17 ----
  // aka.wiiremote.c
  // Copyright by Masayuki Akamatsu
+ // Code for PD by Hans-Christoph Steiner
  // 1.0B1 : 2006.12.12
  // 1.0B2 : 2006.12.15
  // 1.0B3 : 2006.12.20
+ // 1.0B4 : 2006.12.24
+ // 1.0B5 : 2007.02.03
+ // 1.0B6 : 2007.04.24
  
  #ifdef PD
  #include "m_pd.h"
+ #define SETSYM SETSYMBOL
  #define SETLONG SETFLOAT
+ #define method t_method
  static t_class *wiiremote_class;
  #else /* Max */
***************
*** 28,40 ****
  	
  	WiiRemoteRef	wiiremote;
  	
  	void			*clock;
! 	long			interval;
! 	long			trial;
  	
  	void			*statusOut;
! 	void			*buttonsOut;
! 	void			*irOut;
! 	void			*accOut;
  } t_akawiiremote;
  
--- 34,44 ----
  	
  	WiiRemoteRef	wiiremote;
+ 	char			address[32];
  	
  	void			*clock;
! 	Boolean			connected;
  	
  	void			*statusOut;
! 	void			*dataOut
  } t_akawiiremote;
  
***************
*** 42,45 ****
--- 46,50 ----
  
  void akawiiremote_bang(t_akawiiremote *x);
+ void akawiiremote_address(t_akawiiremote *x, t_symbol *s);
  void akawiiremote_connect(t_akawiiremote *x);
  void akawiiremote_disconnect(t_akawiiremote *x);
***************
*** 48,55 ****
  void akawiiremote_vibration(t_akawiiremote *x, long enable);
  void akawiiremote_led(t_akawiiremote *x, long enable1, long enable2, long enable3, long enable4);
  
! void akawiiremote_getbatterylevel(t_akawiiremote *x);
! void akawiiremote_getexpansionstatus(t_akawiiremote *x);
! void akawiiremote_getledstatus(t_akawiiremote *x);
  
  void akawiiremote_assist(t_akawiiremote *x, void *b, long m, long a, char *s);
--- 53,63 ----
  void akawiiremote_vibration(t_akawiiremote *x, long enable);
  void akawiiremote_led(t_akawiiremote *x, long enable1, long enable2, long enable3, long enable4);
+ void akawiiremote_expansion(t_akawiiremote *x, long enable);
  
! void akawiiremote_getbattery(t_akawiiremote *x);
! void akawiiremote_getexpansion(t_akawiiremote *x);
! void akawiiremote_getled(t_akawiiremote *x);
! void akawiiremote_getaddress(t_akawiiremote *x);
! void akawiiremote_getcalibration(t_akawiiremote *x);
  
  void akawiiremote_assist(t_akawiiremote *x, void *b, long m, long a, char *s);
***************
*** 58,61 ****
--- 66,73 ----
  void akawiiremote_free(t_akawiiremote *x);
  
+ char	remoteStr[] = "remote";
+ char	nunchukStr[] = "nunchuk";
+ char	classicStr[] = "classic";
+ 
  #ifdef PD
  void wiiremote_setup()
***************
*** 67,70 ****
--- 79,84 ----
  	BluetoothHCIVersionInfo	outHardwareVersion;
  	
+ 	post("aka.wiiremote 1.0B6-UB by Masayuki Akamatsu");
+ 
  	if (IOBluetoothGetVersion(&outSoftwareVersion, &outHardwareVersion)==kIOReturnSuccess)
  	{
***************
*** 81,86 ****
  	}
  
- 	post("aka.wiiremote 1.0B4-UB by Masayuki Akamatsu");
- 
  #ifdef PD
  	post("\tPd port by Hans-Christoph Steiner");
--- 95,98 ----
***************
*** 96,107 ****
  	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);
--- 108,119 ----
  	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("motion"), A_DEFFLOAT, 0);
! 	class_addmethod(wiiremote_class,(t_method)akawiiremote_irsensor,gensym("ir"), 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_getbattery,gensym("getbattery"),0);
! 	class_addmethod(wiiremote_class,(t_method)akawiiremote_getexpansion,gensym("getexpansion"),0);
! 	class_addmethod(wiiremote_class,(t_method)akawiiremote_getled,gensym("getled"),0);
  	
  	class_addmethod(wiiremote_class,(t_method)akawiiremote_assist,gensym("assist"),A_CANT,0);
***************
*** 110,123 ****
  
  	addbang((method)akawiiremote_bang);
! 	addmess((method)akawiiremote_connect,"connect",0);
  	addmess((method)akawiiremote_disconnect,"disconnect",0);
! 	addmess((method)akawiiremote_motionsensor,"motionsensor", A_DEFLONG, 0);
! 	addmess((method)akawiiremote_irsensor,"irsensor", A_DEFLONG, 0);
  	addmess((method)akawiiremote_vibration,"vibration", A_DEFLONG, 0);
  	addmess((method)akawiiremote_led,"led", A_DEFLONG, A_DEFLONG, A_DEFLONG, A_DEFLONG, 0);
  
! 	addmess((method)akawiiremote_getbatterylevel,"getbatterylevel",0);
! 	addmess((method)akawiiremote_getexpansionstatus,"getexpansionstatus",0);
! 	addmess((method)akawiiremote_getledstatus,"getledstatus",0);
  	
  	addmess((method)akawiiremote_assist,"assist",A_CANT,0);
--- 122,140 ----
  
  	addbang((method)akawiiremote_bang);
! 	addmess((method)akawiiremote_address,"address",A_DEFSYM, 0);
! 	addmess((method)akawiiremote_connect,"connect", 0);
  	addmess((method)akawiiremote_disconnect,"disconnect",0);
! 	addmess((method)akawiiremote_motionsensor,"motion", A_DEFLONG, 0);
! 	addmess((method)akawiiremote_irsensor,"ir", A_DEFLONG, 0);
  	addmess((method)akawiiremote_vibration,"vibration", A_DEFLONG, 0);
  	addmess((method)akawiiremote_led,"led", A_DEFLONG, A_DEFLONG, A_DEFLONG, A_DEFLONG, 0);
+ 	addmess((method)akawiiremote_expansion,"expansion", A_DEFLONG, 0);
+ 	addmess((method)akawiiremote_expansion,"nunchuk", A_DEFLONG, 0);
  
! 	addmess((method)akawiiremote_getbattery,"getbattery",0);
! 	addmess((method)akawiiremote_getexpansion,"getexpansion",0);
! 	addmess((method)akawiiremote_getled,"getled",0);
! 	addmess((method)akawiiremote_getaddress,"getaddress",0);
! 	addmess((method)akawiiremote_getcalibration,"getcalibration", 0);
  	
  	addmess((method)akawiiremote_assist,"assist",A_CANT,0);
***************
*** 129,164 ****
  void akawiiremote_bang(t_akawiiremote *x)
  {
! 	t_atom list[4]; 
  	
  	if (x->wiiremote->device == nil)
  		return;	// do nothing
  	
! #ifdef PD
! 	outlet_float(x->buttonsOut, (t_float) x->wiiremote->buttonData);
! #else /* Max */	
! 	outlet_int(x->buttonsOut, x->wiiremote->buttonData);
! #endif /* PD */
  
  	if (x->wiiremote->isIRSensorEnabled)
  	{
! 		SETFLOAT(list,     x->wiiremote->posX);
! 		SETFLOAT(list + 1, x->wiiremote->posY);
! 		SETFLOAT(list + 2, x->wiiremote->angle);
! 		SETLONG (list + 3, x->wiiremote->tracking);
! 		outlet_list(x->irOut, 0L, 4, list); 
  	}
  
  	if (x->wiiremote->isMotionSensorEnabled)
  	{
! 		SETLONG(list,     x->wiiremote->accX);
! 		SETLONG(list + 1, x->wiiremote->accY);
! 		SETLONG(list + 2, x->wiiremote->accZ);
! 		SETLONG(list + 3, x->wiiremote->orientation);
! 		outlet_list(x->accOut, 0L, 4, list); 
  	}
- 	
- 	//wiiremote_getstatus();	// stopped in B3
  }
  
  void akawiiremote_connect(t_akawiiremote *x)
  {
--- 146,257 ----
  void akawiiremote_bang(t_akawiiremote *x)
  {
! 	t_atom av[5]; 
  	
  	if (x->wiiremote->device == nil)
  		return;	// do nothing
  	
! //#ifdef PD
! //	outlet_float(x->buttonsOut, (t_float) x->wiiremote->buttonData);
! //#else /* Max */	
! //#endif /* PD */
  
+ 	if (x->wiiremote->isExpansionPortAttached && x->wiiremote->isExpansionPortEnabled)
+ 	{
+ 		// Classic Controller
+ 		if (x->wiiremote->expType == WiiClassicController)
+ 		{
+ 			// Buttons
+ 			SETSYM(av, gensym("buttons"));
+ 			SETLONG(av + 1, x->wiiremote->cButtonData);
+ 			outlet_anything(x->dataOut, gensym(classicStr), 2, av);
+ 
+ 			// Joystick 1
+ 			SETSYM(av, gensym("stick1"));
+ 			SETLONG(av + 1, x->wiiremote->cStickX1);
+ 			SETLONG(av + 2, x->wiiremote->cStickY1);
+ 			outlet_anything(x->dataOut, gensym(classicStr), 3, av);
+ 
+ 			// Joystick 2
+ 			SETSYM(av, gensym("stick2"));
+ 			SETLONG(av + 1, x->wiiremote->cStickX2);
+ 			SETLONG(av + 2, x->wiiremote->cStickY2);
+ 			outlet_anything(x->dataOut, gensym(classicStr), 3, av);
+ 
+ 			// Analog
+ 			SETSYM(av, gensym("analog"));
+ 			SETLONG(av + 1, x->wiiremote->cAnalogL);
+ 			SETLONG(av + 2, x->wiiremote->cAnalogR);
+ 			outlet_anything(x->dataOut, gensym(classicStr), 3, av);
+ 		}
+ 		
+ 		// Nunchuk
+ 		if (x->wiiremote->expType == WiiNunchuk)
+ 		{
+ 			// Buttons
+ 			SETSYM(av, gensym("buttons"));
+ 			SETLONG(av + 1, x->wiiremote->nButtonData);
+ 			outlet_anything(x->dataOut, gensym(nunchukStr), 2, av);
+ 			
+ 			// Joystick
+ 			SETSYM(av, gensym("stick"));
+ 			SETLONG(av + 1, x->wiiremote->nStickX);
+ 			SETLONG(av + 2, x->wiiremote->nStickY);
+ 			outlet_anything(x->dataOut, gensym(nunchukStr), 3, av);
+ 			
+ 			// Motion Sensor
+ 			if (x->wiiremote->isMotionSensorEnabled)
+ 			{
+ 				SETSYM(av, gensym("motion"));
+ 				SETLONG(av + 1, x->wiiremote->nAccX);
+ 				SETLONG(av + 2, x->wiiremote->nAccY);
+ 				SETLONG(av + 3, x->wiiremote->nAccZ);
+ 				SETLONG(av + 4, x->wiiremote->nOrientation);
+ 				outlet_anything(x->dataOut, gensym(nunchukStr), 5, av);
+ 			}
+ 		}
+ 	}
+ 	
+ 	// Wii Remote
+ 
+ 	// Buttons
+ 	SETSYM(av, gensym("buttons"));
+ 	SETLONG(av + 1, x->wiiremote->buttonData);
+ 	outlet_anything(x->dataOut, gensym(remoteStr), 2, av);
+ 
+ 	// IR Sensor
  	if (x->wiiremote->isIRSensorEnabled)
  	{
! 		SETSYM(av, gensym("ir"));
! 		SETFLOAT(av + 1, x->wiiremote->posX);	// posX and posY are "float"????
! 		SETFLOAT(av + 2, x->wiiremote->posY);
! 		SETFLOAT(av + 3, x->wiiremote->angle);
! 		SETLONG (av + 4, x->wiiremote->tracking);
! 		outlet_anything(x->dataOut, gensym(remoteStr), 5, av);
  	}
  
+ 	// Motion Sensor
  	if (x->wiiremote->isMotionSensorEnabled)
  	{
! 		SETSYM(av, gensym("motion"));
! 		SETLONG(av + 1, x->wiiremote->accX);
! 		SETLONG(av + 2, x->wiiremote->accY);
! 		SETLONG(av + 3, x->wiiremote->accZ);
! 		SETLONG(av + 4, x->wiiremote->orientation);
! 		outlet_anything(x->dataOut, gensym(remoteStr), 5, av);
  	}
  }
  
+ //--------------------------------------------------------------------------------------------
+ 
+ void akawiiremote_address(t_akawiiremote *x, t_symbol *s)
+ {
+ 	if (*(s->s_name) == 0)	// if null string
+ 		*(x->address) = 0;
+ 	else
+ 		strcpy(x->address, s->s_name);
+ }
+ 
+ //--------------------------------------------------------------------------------------------
+ 
  void akawiiremote_connect(t_akawiiremote *x)
  {
***************
*** 173,178 ****
  	else
  	{
! 		result = wiiremote_search(x->wiiremote);	// start searching the device
! 		x->trial = 0;
  		clock_unset(x->clock);			// stop clock
  		clock_delay(x->clock, 0);		// start clock to check the device found
--- 266,271 ----
  	else
  	{
! 		result = wiiremote_search(x->wiiremote, x->address);	// start searching the device
! 		x->connected = false;
  		clock_unset(x->clock);			// stop clock
  		clock_delay(x->clock, 0);		// start clock to check the device found
***************
*** 189,244 ****
  	t_atom	status;
  	
  	result = wiiremote_disconnect(x->wiiremote);
  	SETLONG(&status, result);
! 	outlet_anything(x->statusOut, gensym("disconnect"), 1, &status);		
  }
  
  void akawiiremote_motionsensor(t_akawiiremote *x, long enable)
  {
! 	wiiremote_motionsensor(x->wiiremote, enable);
  }
  
  void akawiiremote_irsensor(t_akawiiremote *x, long enable)
  {
! 	wiiremote_irsensor(x->wiiremote, enable);
  }
  
  void akawiiremote_vibration(t_akawiiremote *x, long enable)
  {
! 	wiiremote_vibration(x->wiiremote, enable);
  }
  
  void akawiiremote_led(t_akawiiremote *x, long enable1, long enable2, long enable3, long enable4)
  {
! 	wiiremote_led(x->wiiremote, enable1, enable2, enable3, enable4);
  }
  
  //--------------------------------------------------------------------------------------------
  
! void akawiiremote_getbatterylevel(t_akawiiremote *x)
  {
! 	t_atom	status;
  
! 	SETFLOAT(&status, x->wiiremote->batteryLevel);
! 	outlet_anything(x->statusOut, gensym("batterylevel"), 1, &status);		
  }
  
! void akawiiremote_getexpansionstatus(t_akawiiremote *x)
  {
! 	t_atom	status;
! 	
! 	SETLONG(&status, x->wiiremote->isExpansionPortUsed);
! 	outlet_anything(x->statusOut, gensym("expansionstatus"), 1, &status);		
  }
  
! void akawiiremote_getledstatus(t_akawiiremote *x)
  {
! 	t_atom list[4]; 
! 	
! 	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);		
  }
  
--- 282,460 ----
  	t_atom	status;
  	
+ 	clock_unset(x->clock);		// stop clock	
+ 	wiiremote_stopsearch(x->wiiremote);
+ 
  	result = wiiremote_disconnect(x->wiiremote);
  	SETLONG(&status, result);
! 	outlet_anything(x->statusOut, gensym("disconnect"), 1, &status);
! 	
! 	x->connected = !result;
  }
  
+ //--------------------------------------------------------------------------------------------
+ 
  void akawiiremote_motionsensor(t_akawiiremote *x, long enable)
  {
! 	Boolean	result;
! 	t_atom	status;
! 
! 	result = wiiremote_motionsensor(x->wiiremote, enable);
! 	//SETLONG(&status, result);
! 	//outlet_anything(x->statusOut, gensym("motion"), 1, &status);		
  }
  
  void akawiiremote_irsensor(t_akawiiremote *x, long enable)
  {
! 	Boolean	result;
! 	t_atom	status;
! 	
! 	result = wiiremote_irsensor(x->wiiremote, enable);
! 	//SETLONG(&status, result);
! 	//outlet_anything(x->statusOut, gensym("ir"), 1, &status);		
! }
! 
! void akawiiremote_expansion(t_akawiiremote *x, long enable)
! {
! 	Boolean	result;
! 	t_atom	status;
! 	
! 	result = wiiremote_expansion(x->wiiremote, enable);
! 	//SETLONG(&status, result);
! 	//outlet_anything(x->statusOut, gensym("nunchuk"), 1, &status);		
  }
  
  void akawiiremote_vibration(t_akawiiremote *x, long enable)
  {
! 	Boolean	result;
! 	t_atom	status;
! 	
! 	result = wiiremote_vibration(x->wiiremote, enable);
! 	//SETLONG(&status, result);
! 	//outlet_anything(x->statusOut, gensym("vibration"), 1, &status);		
  }
  
  void akawiiremote_led(t_akawiiremote *x, long enable1, long enable2, long enable3, long enable4)
  {
! 	Boolean	result;
! 	t_atom	status;
! 	
! 	result = wiiremote_led(x->wiiremote, enable1, enable2, enable3, enable4);
! 	//SETLONG(&status, result);
! 	//outlet_anything(x->statusOut, gensym("led"), 1, &status);		
  }
  
  //--------------------------------------------------------------------------------------------
  
! void akawiiremote_getbattery(t_akawiiremote *x)
  {
! 	if (x->wiiremote->device == nil)
! 	{
! 		outlet_anything(x->statusOut, gensym("battery"), 0, nil);
! 	}
! 	else
! 	{
! 		t_atom	status;
! 		
! 		SETFLOAT(&status, x->wiiremote->batteryLevel);
! 		outlet_anything(x->statusOut, gensym("battery"), 1, &status);		
! 	}
! }
  
! void akawiiremote_getexpansion(t_akawiiremote *x)
! {
! 	if (x->wiiremote->device == nil)
! 	{
! 		outlet_anything(x->statusOut, gensym("expansion"), 0, nil);
! 	}
! 	else
! 	{
! 		t_atom	status;
! 		if (x->wiiremote->isExpansionPortAttached)
! 			SETLONG(&status, x->wiiremote->expType);
! 		else
! 			SETLONG(&status, 0);
! 	outlet_anything(x->statusOut, gensym("expansion"), 1, &status);
! 	}
  }
  
! void akawiiremote_getled(t_akawiiremote *x)
  {
! 	if (x->wiiremote->device == nil)
! 	{
! 		outlet_anything(x->statusOut, gensym("led"), 0, nil);
! 	}
! 	else
! 	{
! 		t_atom list[4]; 
! 		
! 		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("led"), 4, list);
! 	}
  }
  
! void akawiiremote_getcalibration(t_akawiiremote *x)
  {
! 	if (x->wiiremote->device == nil)
! 	{
! 		outlet_anything(x->statusOut, gensym("calibration"), 0, nil);
! 	}
! 	else
! 	{
! 		t_atom list[8]; 
! 		
! 		if (x->wiiremote->isExpansionPortAttached)
! 		{
! 			SETSYM(list,      gensym(nunchukStr));
! 			SETSYM(list +  1, gensym("stick"));
! 			SETLONG(list + 2, x->wiiremote->nunchukJoyStickCalibData.x_max);
! 			SETLONG(list + 3, x->wiiremote->nunchukJoyStickCalibData.x_min);
! 			SETLONG(list + 4, x->wiiremote->nunchukJoyStickCalibData.x_center);
! 			SETLONG(list + 5, x->wiiremote->nunchukJoyStickCalibData.y_max);
! 			SETLONG(list + 6, x->wiiremote->nunchukJoyStickCalibData.y_min);
! 			SETLONG(list + 7, x->wiiremote->nunchukJoyStickCalibData.y_center);
! 			outlet_anything(x->statusOut, gensym("calibration"), 8, list);
! 			
! 			SETSYM(list +  1, gensym("motion"));
! 			SETLONG(list + 2, x->wiiremote->nunchukCalibData.accX_zero);
! 			SETLONG(list + 3, x->wiiremote->nunchukCalibData.accY_zero);
! 			SETLONG(list + 4, x->wiiremote->nunchukCalibData.accZ_zero);
! 			SETLONG(list + 5, x->wiiremote->nunchukCalibData.accX_1g);
! 			SETLONG(list + 6, x->wiiremote->nunchukCalibData.accY_1g);
! 			SETLONG(list + 7, x->wiiremote->nunchukCalibData.accZ_1g);
! 			outlet_anything(x->statusOut, gensym("calibration"), 8, list);
! 		}
! 		
! 		SETSYM(list,      gensym(remoteStr));
! 		SETSYM(list +  1, gensym("motion"));
! 		SETLONG(list + 2, x->wiiremote->wiiCalibData.accX_zero);
! 		SETLONG(list + 3, x->wiiremote->wiiCalibData.accY_zero);
! 		SETLONG(list + 4, x->wiiremote->wiiCalibData.accZ_zero);
! 		SETLONG(list + 5, x->wiiremote->wiiCalibData.accX_1g);
! 		SETLONG(list + 6, x->wiiremote->wiiCalibData.accY_1g);
! 		SETLONG(list + 7, x->wiiremote->wiiCalibData.accZ_1g);
! 		outlet_anything(x->statusOut, gensym("calibration"), 8, list);
! 	}
! }
! 
! //--------------------------------------------------------------------------------------------
! 
! void akawiiremote_getaddress(t_akawiiremote *x)
! {
! 	if (x->wiiremote->device == nil)
! 	{
! 		outlet_anything(x->statusOut, gensym("address"), 0, nil);		
! 	}
! 	else
! 	{
! 		char	str[32];
! 		t_atom	address;
! 		
! 		wiiremote_getaddress(x->wiiremote, str);
! 		SETSYM(&address, gensym(str));
! 		outlet_anything(x->statusOut, gensym("address"), 1, &address);		
! 	}
  }
  
***************
*** 247,283 ****
  void akawiiremote_clock(t_akawiiremote *x)
  {
! 	//Boolean	result;
  	t_atom	status;
  	
! 	if (wiiremote_isconnected(x->wiiremote))	// if the device is connected...
  	{
! 		clock_unset(x->clock);			// stop clock
! 
! 		wiiremote_stopsearch(x->wiiremote);
! 		//result = wiiremote_connect();	// remove in B3
! 		wiiremote_getstatus(x->wiiremote);		// add in B3
  		SETLONG(&status, 1);
  		outlet_anything(x->statusOut, gensym("connect"), 1, &status);
  	}
! 	else	// if the device is not connected...
  	{
! 		x->trial++;
! 		//SETLONG(&status, x->trial);
! 		//outlet_anything(x->statusOut, gensym("searching"), 1, &status);
! 
! 		if (x->trial >= kMaxTrial)		// if trial is over
! 		{
! 			clock_unset(x->clock);		// stop clock
! 
! 			wiiremote_stopsearch(x->wiiremote);
! 			SETLONG(&status, 0);
! 			outlet_anything(x->statusOut, gensym("connect"), 1, &status);
! 		}
! 		else
! 		{
! 			//post("trial %d",x->trial);
! 			clock_delay(x->clock, x->interval);	// restart clock
! 		}
  	}
  }
  
--- 463,487 ----
  void akawiiremote_clock(t_akawiiremote *x)
  {
! 	Boolean	connection;
  	t_atom	status;
  	
! 	connection = wiiremote_isconnected(x->wiiremote);
! 	
! 	if (x->connected == false && connection == true)	// if the device is connected...
  	{
! 		wiiremote_getstatus(x->wiiremote);
! 		x->connected = true;
  		SETLONG(&status, 1);
  		outlet_anything(x->statusOut, gensym("connect"), 1, &status);
  	}
! 	
! 	if (x->connected == true && connection == false)
  	{
! 		x->connected = false;
! 		SETLONG(&status, 0);
! 		outlet_anything(x->statusOut, gensym("connect"), 1, &status);
  	}
+ 	
+ 	clock_delay(x->clock, kInterval);	// restart clock
  }
  
***************
*** 296,303 ****
  		switch(a)
  		{
! 			case 0: sprintf(s,"list(acc-x acc-y acc-z orientation)"); break;
! 			case 1: sprintf(s,"list(pos-x pos-y angle tracking)"); break;
! 			case 2: sprintf(s,"int(buttons)"); break;
! 			case 3: sprintf(s,"message(status)"); break;
  		}
  	}
--- 500,505 ----
  		switch(a)
  		{
! 			case 0: sprintf(s,"data messages"); break;
! 			case 2: sprintf(s,"status messages"); break;
  		}
  	}
***************
*** 308,343 ****
  void *akawiiremote_new(t_symbol *s, short ac, t_atom *av)
  {
- #ifdef PD
- 	t_akawiiremote *x = (t_akawiiremote *)pd_new(wiiremote_class);
- 
- 	x->wiiremote = (WiiRemoteRef)getbytes(sizeof(WiiRemoteRec));		// add in 1.0B4
- 	if (x->wiiremote != nil)
- 		wiiremote_init(x->wiiremote);
- 	
- 	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);
  	
! 	x->wiiremote = (WiiRemoteRef)getbytes(sizeof(WiiRemoteRec));		// add in 1.0B4
  	if (x->wiiremote != nil)
  		wiiremote_init(x->wiiremote);
  	
  	x->clock = clock_new(x, (method)akawiiremote_clock);
  	
  	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;
  
  	return x;
--- 510,550 ----
  void *akawiiremote_new(t_symbol *s, short ac, t_atom *av)
  {
  	t_akawiiremote *x;
  	
+ #ifdef PD
+ 	x = (t_akawiiremote *)pd_new(wiiremote_class);
+ #else /* Max */	
  	x = (t_akawiiremote *)newobject(akawiiremote_class);
+ #endif /* PD */
  	
! 	x->wiiremote = (WiiRemoteRef)getbytes(sizeof(WiiRemoteRec));
  	if (x->wiiremote != nil)
+ 	{
  		wiiremote_init(x->wiiremote);
+ 		x->wiiremote->isMotionSensorEnabled = true;
+ 		x->wiiremote->isIRSensorEnabled = false;
+ 		x->wiiremote->isVibrationEnabled = false;
+ 		x->wiiremote->isExpansionPortEnabled = false;
+ 		x->wiiremote->isLED1Illuminated = false;
+ 		x->wiiremote->isLED2Illuminated = false;
+ 		x->wiiremote->isLED3Illuminated = false;
+ 		x->wiiremote->isLED4Illuminated = false;
+ 	}
  	
  	x->clock = clock_new(x, (method)akawiiremote_clock);
+ #ifdef PD
+ 	if (ac>0 && av[0].a_type == A_SYMBOL)
+ 		strcpy(x->address, av[0].a_w.w_symbol->s_name);
+ 
+ 	x->statusOut = outlet_new(&x->x_obj, 0);
+ 	x->dataOut = outlet_new(&x->x_obj, 0);
+ #else /* Max */	
+ 	if (ac>0 && av[0].a_type == A_SYM)
+ 		strcpy(x->address, av[0].a_w.w_sym->s_name);
  	
  	x->statusOut = outlet_new(x, 0);
! 	x->dataOut = outlet_new(x, 0);
  #endif /* PD */
! 	x->connected = false;
  
  	return x;
***************
*** 346,353 ****
  void akawiiremote_free(t_akawiiremote *x)
  {
! 	if (x->wiiremote != nil)							// add in 1.0B4
  	{
! 		wiiremote_disconnect(x->wiiremote);
! 		freebytes(x->wiiremote, sizeof(WiiRemoteRec));	// add in 1.0B4
  	}
  	
--- 553,562 ----
  void akawiiremote_free(t_akawiiremote *x)
  {
! 	if (x->wiiremote != nil)
  	{
! 		if (wiiremote_isconnected(x->wiiremote))
! 			wiiremote_disconnect(x->wiiremote);
! 		freebytes(x->wiiremote, sizeof(WiiRemoteRec));
! 		x->wiiremote = nil;
  	}
  	





More information about the Pd-cvs mailing list