1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
// wiiremote.h
// Copyright by Masayuki Akamatsu
// Based on "DarwiinRemote" by Hiroaki Kimura
#define BLUETOOTH_VERSION_USE_CURRENT // gets rid of deprecated warnings
#include <CoreFoundation/CoreFoundation.h>
#include <IOBluetooth/Bluetooth.h>
#include <IOBluetooth/IOBluetoothUserLib.h>
#include <stdio.h>
#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
{
IOBluetoothDeviceInquiryRef inquiry;
IOBluetoothDeviceRef device;
IOBluetoothL2CAPChannelRef ichan;
IOBluetoothL2CAPChannelRef cchan;
CFStringRef address;
unsigned char accX;
unsigned char accY;
unsigned char accZ;
unsigned short buttonData;
float lowZ;
float lowX;
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;
Boolean isLED3Illuminated;
Boolean isLED4Illuminated;
Boolean isExtraOutputEnabled;
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);
|