wut v1.8.0
Wii U Toolchain
Loading...
Searching...
No Matches
kpad.h
Go to the documentation of this file.
1#pragma once
2#include <wut.h>
3#include <padscore/wpad.h>
4
13#ifdef __cplusplus
14extern "C" {
15#endif
16
18typedef enum WPADChan KPADChan;
25
26typedef struct KPADStatus KPADStatus;
28typedef struct KPADVec2D KPADVec2D;
29typedef struct KPADVec3D KPADVec3D;
30
47
62
65{
67 float x;
69 float y;
70};
71WUT_CHECK_OFFSET(KPADVec2D, 0x00, x);
72WUT_CHECK_OFFSET(KPADVec2D, 0x04, y);
73WUT_CHECK_SIZE(KPADVec2D, 0x08);
74
77{
79 float x;
81 float y;
83 float z;
84};
85WUT_CHECK_OFFSET(KPADVec3D, 0x00, x);
86WUT_CHECK_OFFSET(KPADVec3D, 0x04, y);
87WUT_CHECK_OFFSET(KPADVec3D, 0x08, z);
88WUT_CHECK_SIZE(KPADVec3D, 0x0C);
89
92{
94 uint32_t hold;
95
97 uint32_t trigger;
98
100 uint32_t release;
101
104
107
110
113
116
119
122
125
128
130 float dist;
131
133 float distDiff;
134
137
140
143
145 int8_t error;
146
148 int8_t posValid;
149
151 uint8_t format;
152
154 union
155 {
157 struct
158 {
160 KPADVec2D stick;
164 float accMagnitude;
166 float accVariation;
168 uint32_t hold;
170 uint32_t trigger;
172 uint32_t release;
173 } nunchuk;
174
176 struct
177 {
179 uint32_t hold;
181 uint32_t trigger;
183 uint32_t release;
185 KPADVec2D leftStick;
187 KPADVec2D rightStick;
189 float leftTrigger;
191 float rightTrigger;
192 } classic;
193
195 struct
196 {
198 uint32_t hold;
200 uint32_t trigger;
202 uint32_t release;
204 KPADVec2D leftStick;
206 KPADVec2D rightStick;
208 int32_t charging;
210 int32_t wired;
211 } pro;
212
219 struct
220 {
223 double avgTGCWeight;
225 double weights[WPAD_MAX_PRESSURE_SENSORS];
227 double avgWeights[WPAD_MAX_PRESSURE_SENSORS];
229 int32_t error;
232 int32_t calibration;
233 } balance;
234 };
235
237 struct
238 {
242 KPADVec3D angles;
244 KPADVec3D dirX;
246 KPADVec3D dirY;
248 KPADVec3D dirZ;
250
251 WUT_PADDING_BYTES(4);
252};
253WUT_CHECK_OFFSET(KPADStatus, 0x00, hold);
254WUT_CHECK_OFFSET(KPADStatus, 0x04, trigger);
255WUT_CHECK_OFFSET(KPADStatus, 0x08, release);
256WUT_CHECK_OFFSET(KPADStatus, 0x0C, acc);
257WUT_CHECK_OFFSET(KPADStatus, 0x18, accMagnitude);
258WUT_CHECK_OFFSET(KPADStatus, 0x1C, accVariation);
259WUT_CHECK_OFFSET(KPADStatus, 0x20, pos);
260WUT_CHECK_OFFSET(KPADStatus, 0x28, posDiff);
261WUT_CHECK_OFFSET(KPADStatus, 0x30, posDiffMagnitude);
262WUT_CHECK_OFFSET(KPADStatus, 0x34, angle);
263WUT_CHECK_OFFSET(KPADStatus, 0x3C, angleDiff);
264WUT_CHECK_OFFSET(KPADStatus, 0x44, angleDiffMagnitude);
265WUT_CHECK_OFFSET(KPADStatus, 0x48, dist);
266WUT_CHECK_OFFSET(KPADStatus, 0x4C, distDiff);
267WUT_CHECK_OFFSET(KPADStatus, 0x50, distDiffMagnitude);
268WUT_CHECK_OFFSET(KPADStatus, 0x54, down);
269WUT_CHECK_OFFSET(KPADStatus, 0x5C, extensionType);
270WUT_CHECK_OFFSET(KPADStatus, 0x5D, error);
271WUT_CHECK_OFFSET(KPADStatus, 0x5E, posValid);
272WUT_CHECK_OFFSET(KPADStatus, 0x5F, format);
273// Nunchuk fields.
274WUT_CHECK_OFFSET(KPADStatus, 0x60, nunchuk.stick);
275WUT_CHECK_OFFSET(KPADStatus, 0x68, nunchuk.acc);
276WUT_CHECK_OFFSET(KPADStatus, 0x74, nunchuk.accMagnitude);
277WUT_CHECK_OFFSET(KPADStatus, 0x78, nunchuk.accVariation);
278WUT_CHECK_OFFSET(KPADStatus, 0x7C, nunchuk.hold);
279WUT_CHECK_OFFSET(KPADStatus, 0x80, nunchuk.trigger);
280WUT_CHECK_OFFSET(KPADStatus, 0x84, nunchuk.release);
281// Classic fields.
282WUT_CHECK_OFFSET(KPADStatus, 0x60, classic.hold);
283WUT_CHECK_OFFSET(KPADStatus, 0x64, classic.trigger);
284WUT_CHECK_OFFSET(KPADStatus, 0x68, classic.release);
285WUT_CHECK_OFFSET(KPADStatus, 0x6C, classic.leftStick);
286WUT_CHECK_OFFSET(KPADStatus, 0x74, classic.rightStick);
287WUT_CHECK_OFFSET(KPADStatus, 0x7C, classic.leftTrigger);
288WUT_CHECK_OFFSET(KPADStatus, 0x80, classic.rightTrigger);
289// Pro fields.
290WUT_CHECK_OFFSET(KPADStatus, 0x60, pro.hold);
291WUT_CHECK_OFFSET(KPADStatus, 0x64, pro.trigger);
292WUT_CHECK_OFFSET(KPADStatus, 0x68, pro.release);
293WUT_CHECK_OFFSET(KPADStatus, 0x6C, pro.leftStick);
294WUT_CHECK_OFFSET(KPADStatus, 0x74, pro.rightStick);
295WUT_CHECK_OFFSET(KPADStatus, 0x7C, pro.charging);
296WUT_CHECK_OFFSET(KPADStatus, 0x80, pro.wired);
297// Balance Board fields.
298WUT_CHECK_OFFSET(KPADStatus, 0x60, balance.avgTGCWeight);
299WUT_CHECK_OFFSET(KPADStatus, 0x68, balance.weights);
300WUT_CHECK_OFFSET(KPADStatus, 0x88, balance.avgWeights);
301WUT_CHECK_OFFSET(KPADStatus, 0xA8, balance.error);
302WUT_CHECK_OFFSET(KPADStatus, 0xAC, balance.calibration);
303// MotionPlus fields.
304WUT_CHECK_OFFSET(KPADStatus, 0xB0, mplus.acc);
305WUT_CHECK_OFFSET(KPADStatus, 0xBC, mplus.angles);
306WUT_CHECK_OFFSET(KPADStatus, 0xC8, mplus.dirX);
307WUT_CHECK_OFFSET(KPADStatus, 0xD4, mplus.dirY);
308WUT_CHECK_OFFSET(KPADStatus, 0xE0, mplus.dirZ);
309WUT_CHECK_SIZE(KPADStatus, 0xF0);
310
319 union {
320 WPADStatus core;
321 WPADStatusNunchuk nunchuk;
322 WPADStatusClassic classic;
323 WPADStatusPro pro;
325 WPADStatusTrain train;
326 };
328 uint8_t format;
329 WUT_PADDING_BYTES(3);
330};
331WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, core);
332WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, nunchuk);
333WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, classic);
334WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, pro);
335WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, balance);
336WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x00, train);
337WUT_CHECK_OFFSET(KPADUnifiedWpadStatus, 0x40, format);
338WUT_CHECK_SIZE(KPADUnifiedWpadStatus, 0x44);
339
342
345
351void
353
357void
359 uint32_t count);
360
364void
366
382uint32_t
384 KPADStatus *data,
385 uint32_t size);
386
405uint32_t
407 KPADStatus *data,
408 uint32_t size,
409 KPADError *error);
410
414void
416 KPADUnifiedWpadStatus *buffer,
417 uint32_t count);
418
428int32_t
429KPADSetMaxControllers(uint32_t maxControllers);
430
437uint32_t
439
446uint32_t
448
463 KPADConnectCallback callback);
464
470 KPADSamplingCallback callback);
471
475uint32_t
477
485void
487
498void
500 KPADControlMplsCallback callback);
501
513void
515 KPADMplsMode mode);
516
520void
522
530
534void
536
540void
542
546void
548
552void
554
558void
560
561#ifdef __cplusplus
562}
563#endif
564
uint8_t extensionType
Value from KPADExtensionType.
Definition kpad.h:142
KPADVec2D angleDiff
Difference from previous angle.
Definition kpad.h:124
KPADVec3D acc
Indicates the value of the acceleration sensor.
Definition kpad.h:103
float dist
Distance to the sensor bar, in meters.
Definition kpad.h:130
struct KPADStatus::@47 mplus
Structure to use when MotionPlus is enabled.
KPADVec2D posDiff
Difference from previous pos.
Definition kpad.h:115
uint32_t hold
Indicates what KPADButtons are held down.
Definition kpad.h:94
int8_t posValid
Validity of the pos field.
Definition kpad.h:148
KPADVec2D angle
Angle: horizon vector (+x is right, +y is down.)
Definition kpad.h:121
uint8_t format
Value from KPADDataFormat.
Definition kpad.h:151
float angleDiffMagnitude
Magnitude of angleDiff.
Definition kpad.h:127
KPADVec2D down
The "down" vector from accelerometer: when down.y is negative, wiimote is facing down.
Definition kpad.h:139
float y
y.
Definition kpad.h:69
uint32_t release
Indicates what KPADButtons have been released since last sample.
Definition kpad.h:100
float distDiff
Difference from previous dist.
Definition kpad.h:133
int8_t error
Value from KPADError.
Definition kpad.h:145
float distDiffMagnitude
Absolute value of distDiff.
Definition kpad.h:136
uint32_t trigger
Indicates what KPADButtons have been pressed since last sample.
Definition kpad.h:97
float x
x.
Definition kpad.h:67
float accVariation
Indicates the variation in acceleration.
Definition kpad.h:109
float posDiffMagnitude
Magnitude of posDiff.
Definition kpad.h:118
float accMagnitude
Indicates the magnitude of acceleration.
Definition kpad.h:106
float z
z.
Definition kpad.h:83
KPADVec2D pos
Indicates the position where the Wii Remote is pointing; positive for right and down.
Definition kpad.h:112
WPADConnectCallback KPADConnectCallback
Definition kpad.h:340
KPADControlMplsStatus
Status codes for KPADControlMplsCallback.
Definition kpad.h:50
KPADError
Error.
Definition kpad.h:33
void KPADShutdown(void)
Cleans up and frees the KPAD library.
enum WPADExtensionType KPADExtensionType
Extension type.
Definition kpad.h:22
enum WPADDataFormat KPADDataFormat
Data format.
Definition kpad.h:20
KPADSamplingCallback KPADSetSamplingCallback(KPADChan channel, KPADSamplingCallback callback)
Same usage as , except compatible with other KPAD functions.
uint32_t KPADReadEx(KPADChan chan, KPADStatus *data, uint32_t size, KPADError *error)
Read data from the desired controller.
void KPADDisableDPD(KPADChan chan)
Disable IR pointing.
void KPADResetWbcTgcWeight(void)
Recalculate the Balance Board's TGC coefficients and zero.
KPADConnectCallback KPADSetConnectCallback(KPADChan chan, KPADConnectCallback callback)
Set a callback for when a controller connection status changes.
uint32_t KPADGetGameMaxControllers(void)
Get the maximum amount of controllers which can be connected, as reported by IOS-PAD.
enum WPADMplsMode KPADMplsMode
MotionPlus Mode.
Definition kpad.h:24
uint32_t KPADRead(KPADChan chan, KPADStatus *data, uint32_t size)
Read data from the desired controller.
void(* KPADControlMplsCallback)(KPADChan chan, KPADControlMplsStatus status)
Callback used for KPADSetControlMplsCallback().
Definition kpad.h:344
void KPADResetWbcZeroPoint(void)
Resets the Balance Board's zero.
uint32_t KPADGetMaxControllers(void)
Get the maximum amount of controllers which can be connected to the system.
void KPADDisableMpls(KPADChan channel)
Disables MotionPlus for the controller.
void KPADSetControlMplsCallback(KPADChan chan, KPADControlMplsCallback callback)
Set a callback for when the MotionPlus extension is configured.
enum WPADChan KPADChan
Wii Remote channel.
Definition kpad.h:18
void KPADSetMplsWorkarea(void *buf)
Sets the extra memory KPAD will use to process MotionPlus data.
void KPADGetUnifiedWpadStatus(KPADChan chan, KPADUnifiedWpadStatus *buffer, uint32_t count)
Read a number of entries from the internal buffer.
KPADMplsMode KPADGetMplsStatus(KPADChan chan)
Get MotionPlus mode.
void KPADInit(void)
Initialises the KPAD library for use.
WPADSamplingCallback KPADSamplingCallback
Definition kpad.h:341
void KPADInitEx(KPADUnifiedWpadStatus *buffer, uint32_t count)
Initializes the KPAD library with extra buffers.
void KPADResetMpls(KPADChan chan)
Resets the MotionPlus state.
void KPADEnableMpls(KPADChan channel, KPADMplsMode mode)
Sets MotionPlus for the controller in specified mode.
void KPADEnableDPD(KPADChan chan)
Enable IR pointing.
uint32_t KPADGetMplsWorkSize(void)
Returns the amount of memory needed for KPADSetMplsWorkarea().
int32_t KPADSetMaxControllers(uint32_t maxControllers)
Set the maximum amount of controllers which can be connected to the system.
@ KPAD_CONTROL_MPLS_STATUS_FAILED_MPLS_CLASSIC
When KPADEnableMpls(chan, WPAD_MPLS_MODE_MPLS_CLASSIC) failed.
Definition kpad.h:60
@ KPAD_CONTROL_MPLS_STATUS_FINISHED
When MotionPlus mode was set correctly, or wiimote disconnected prematurely.
Definition kpad.h:54
@ KPAD_CONTROL_MPLS_STATUS_FAILED_MPLS_NUNCHUK
When KPADEnableMpls(chan, WPAD_MPLS_MODE_MPLS_NUNCHUK) failed.
Definition kpad.h:58
@ KPAD_CONTROL_MPLS_STATUS_FAILED_MPLS_ONLY
When KPADEnableMpls(chan, WPAD_MPLS_MODE_MPLS_ONLY) failed.
Definition kpad.h:56
@ KPAD_CONTROL_MPLS_STATUS_STARTED
When KPADEnableMpls() is called.
Definition kpad.h:52
@ KPAD_ERROR_OK
No error occurred, and data was written to the buffers.
Definition kpad.h:35
@ KPAD_ERROR_WPAD_UNINIT
WPAD is uninitialized, shouldn't happen unless WPADShutdown() is manually called.
Definition kpad.h:41
@ KPAD_ERROR_BUSY
KPAD channel is busy, perhaps being accessed by another thread.
Definition kpad.h:43
@ KPAD_ERROR_NO_SAMPLES
There was no sample new data available to write.
Definition kpad.h:37
@ KPAD_ERROR_INVALID_CONTROLLER
The requested controller or channel was invalid.
Definition kpad.h:39
@ KPAD_ERROR_UNINITIALIZED
KPAD is uninitialized, need to call KPADInit()
Definition kpad.h:45
A structure containing the Wii Remote data.
Definition kpad.h:92
Storage type for the internal KPAD ring buffer.
Definition kpad.h:318
2D vector.
Definition kpad.h:65
3D vector.
Definition kpad.h:77
WPADCallback WPADConnectCallback
Definition wpad.h:759
WPADDataFormat
Data format.
Definition wpad.h:75
WPADChan
Wii Remote channel.
Definition wpad.h:56
void(* WPADSamplingCallback)(WPADChan channel)
Definition wpad.h:763
WPADExtensionType
Extension type.
Definition wpad.h:114
WPADMplsMode
MotionPlus Mode.
Definition wpad.h:348
#define WPAD_MAX_PRESSURE_SENSORS
Definition wpad.h:18
Core Wii Remote status.
Definition wpad.h:468
Balance Board status.
Definition wpad.h:653
Classic Controller and Classic Controller Pro status.
Definition wpad.h:544
Wii Remote + Nunchuk status.
Definition wpad.h:513
Pro Controller status.
Definition wpad.h:570
Bullet Train controller status.
Definition wpad.h:675