Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
__wpad.h
Go to the documentation of this file.
1#ifndef _REVOLUTION_WPAD_PRIVATE_H_
2#define _REVOLUTION_WPAD_PRIVATE_H_
3
4#include <revolution/os.h>
5#include <revolution/wpad.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#define RPT_REPORT_ID 0
12#define RPT_MAX_SIZE 21
13
14// Limits
15#define RPTID_OUT_LO RPTID_SET_RUMBLE
16#define RPTID_OUT_HI RPTID_SET_DPD_CSB
17
18#define RPTID_IN_LO RPTID_STATUS
19#define RPTID_IN_HI RPTID_DATA_BTN_ACC_DPD18_2
20
21// All outgoing reports
22#define RPT_OUT_FLAGS 1
23
24#define RPT_OUT_FLAG_ENABLE_FEATURE 2
25#define RPT_OUT_FLAG_REQUEST_ACK_RPT 1
26#define RPT_OUT_FLAG_RUMBLE 0
27
28// All incoming reports with Button data (all except 0x3d)
29#define RPT_BTN0 1
30#define RPT_BTN1 2
31
32// All incoming reports with Accelerometer (Standard) data (0x31, 0x33, 0x35, 0x37)
33#define RPT_ACC_OFFSET 1
34#define RPT_ACC_SIZE 3
35
36/*
37 * Outgoing reports (from POV of the host)
38 */
39
40// Report 0x10: Set rumble status
41#define RPTID_SET_RUMBLE 0x10
42#define RPT10_SIZE 1
43
44#define RPT10_RUMBLE 0
45
46// Report 0x11: Set LED lights
47#define RPTID_SET_PORT 0x11 // internally called SetPort
48#define RPT11_SIZE 1
49
50#define RPT11_LED 0
51
52// Report 0x12: Set data reporting mode
53#define RPTID_SET_DATA_REPORT_MODE 0x12
54#define RPT12_SIZE 2
55
56#define RPT12_CONT_REPORT 0
57#define RPT12_DATA_REPORT_MODE 1
58
59// Report 0x13: Enable IR camera
60#define RPTID_ENABLE_DPD 0x13 // internally called the DPD
61#define RPT13_SIZE 1
62
63#define RPT13_DPD_ENABLE 0
64
65// Report 0x14: Enable IR camera
66#define RPTID_ENABLE_SPEAKER 0x14
67#define RPT14_SIZE 1
68
69#define RPT14_SPEAKER_ENABLE 0
70
71// Report 0x15: Request status report
72#define RPTID_REQUEST_STATUS 0x15
73#define RPT15_SIZE 1
74
75// Report 0x16: Write data
76#define RPTID_WRITE_DATA 0x16
77#define RPT16_SIZE RPT_MAX_SIZE
78
79#define RPT16_DATA_DST_ADDRESS 0
80#define RPT16_DATA_LENGTH 4
81#define RPT16_DATA 5
82
83// Report 0x17: Read data
84#define RPTID_READ_DATA 0x17
85#define RPT17_SIZE 6
86
87#define RPT17_DATA_SRC_ADDRESS 0
88#define RPT17_DATA_LENGTH 4
89
90// Report 0x18: Send speaker data
91#define RPTID_SEND_SPEAKER_DATA 0x18
92#define RPT18_SIZE RPT_MAX_SIZE
93
94#define RPT18_DATA_LENGTH 0
95#define RPT18_DATA 1
96
97// Report 0x19: Mute speaker
98#define RPTID_MUTE_SPEAKER 0x19
99#define RPT19_SIZE 1
100
101#define RPT19_SPEAKER_MUTE 0
102
103// Report 0x19: WPADiSendDPDCSB (?)
104#define RPTID_SEND_DPD_CSB 0x1a
105#define RPT1A_SIZE 1
106
107#define RPT1A_DPD_CSB 0
108
109/*
110 * Incoming reports (from POV of the host)
111 */
112
113// Report 0x20: Status report
114#define RPTID_STATUS 0x20
115#define RPT20_FLAGS 3
116#define RPT20_PROTO_FW 5
117#define RPT20_BATTERY 6
118
119// Report 0x21: Read Wiimote data
120#define RPTID_DATA_READ 0x21
121#define RPT21_SIZE_ERR 3
122#define RPT21_ADDR0 4
123#define RPT21_ADDR1 5
124#define RPT21_DATA 6
125
126// Report 0x22: Acknowledgement and request result
127#define RPTID_ACK 0x22
128#define RPT22_ACKED_RPT_ID 3
129#define RPT22_ERR_CODE 4
130
131// Reports 0x23-0x2f: Unused
132
133// Report 0x30: Buttons
134#define RPTID_DATA_BTN 0x30
135
136// Report 0x31: Buttons, Accelerometer (Standard)
137#define RPTID_DATA_BTN_ACC 0x31
138
139// Report 0x32: Buttons, Extension (8 bytes)
140#define RPTID_DATA_BTN_EXT8 0x32
141#define RPT32_EXT_OFFSET 3
142#define RPT32_EXT_LENGTH 8
143
144/* Report 0x33: Buttons, Accelerometer (Standard), IR Camera (Standard, 12
145 * bytes)
146 */
147#define RPTID_DATA_BTN_ACC_DPD12 0x33
148#define RPT33_DPD_OFFSET 6
149#define RPT33_DPD_LENGTH 12
150
151// Report 0x34: Buttons, Extension (19 bytes)
152#define RPTID_DATA_BTN_EXT19 0x34
153#define RPT34_EXT_OFFSET 3
154#define RPT34_EXT_LENGTH 19
155
156// Report 0x35: Buttons, Accelerometer (Standard), Extension (16 bytes)
157#define RPTID_DATA_BTN_ACC_EXT16 0x35
158#define RPT35_EXT_OFFSET 6
159#define RPT35_EXT_LENGTH 16
160
161// Report 0x36: Buttons, IR Camera (Basic, 10 bytes), Extension (9 bytes)
162#define RPTID_DATA_BTN_DPD10_EXT9 0x36
163#define RPT36_DPD_OFFSET 3
164#define RPT36_DPD_LENGTH 10
165#define RPT36_EXT_OFFSET 13
166#define RPT36_EXT_LENGTH 9
167
168/* Report 0x37: Buttons, Accelerometer (Standard), IR Camera (Basic, 10
169 * bytes), Extension (6 bytes)
170 */
171#define RPTID_DATA_BTN_ACC_DPD10_EXT9 0x37
172#define RPT37_DPD_OFFSET 6
173#define RPT37_DPD_LENGTH 10
174#define RPT37_EXT_OFFSET 16
175#define RPT37_EXT_LENGTH 6
176
177// Report 0x38-0x3c: Unused
178
179// Report 0x3d: Extension (21 bytes)
180#define RPTID_DATA_EXT21 0x3d
181#define RPT3D_EXT_OFFSET 1
182#define RPT3D_EXT_LENGTH 21
183
184/* Report 0x3e: Buttons, Accelerometer (Interleaved 1), IR Camera (Full 1,
185 * 18 bytes)
186 */
187#define RPTID_DATA_BTN_ACC_DPD18_1 0x3e
188#define RPT3E_DPD0 0
189#define RPT3E_DPD0_OFFSET 4
190#define RPT3E_DPD1 1
191#define RPT3E_DPD1_OFFSET 13
192
193/* Report 0x3f: Buttons, Accelerometer (Interleaved 2), IR Camera (Full 2,
194 * 18 bytes)
195 */
196#define RPTID_DATA_BTN_ACC_DPD18_2 0x3f
197#define RPT3F_DPD2 2
198#define RPT3F_DPD2_OFFSET 4
199#define RPT3F_DPD3 3
200#define RPT3F_DPD3_OFFSET 13
201
202#define WPAD_EXT_REG_SPEAKER 0xa2
203#define WPAD_EXT_REG_EXTENSION 0xa4
204#define WPAD_EXT_REG_MOTION_PLUS 0xa6
205#define WPAD_EXT_REG_DPD 0xb0
206
207#define RX_BUFFER_SIZE OSRoundUp32B(sizeof(WPADStatusEx))
208#define LINT_NUM_MAX_LENGTH 64
209#define LINT_NUM_MAX_BUFSIZ (1 + LINT_NUM_MAX_LENGTH + 1)
210
211#define WM_MEM_ADDR(addr_) ((addr_) & 0xffff)
212#define WM_EXT_REG_ADDR(type_, addr_) \
213 (((addr_) & 0xffff) | ((WPAD_EXT_REG_##type_) << 16) | (1 << 26))
214
215// https://wiibrew.org/wiki/Wiimote#EEPROM_Memory
216#define WM_ADDR_MEM_DEV_CONFIG_0 WM_MEM_ADDR(0x0000)
217#define WM_ADDR_MEM_GAME_INFO_0 WM_MEM_ADDR(0x002a)
218#define WM_ADDR_MEM_GAME_INFO_1 WM_MEM_ADDR(0x0062)
219
220// out of range??? wiibrew says the wiimote only has 0x1600 bytes of memory
221#define WM_ADDR_MEM_176C WM_MEM_ADDR(0x176c)
222#define WM_ADDR_MEM_1770 WM_MEM_ADDR(0x1770)
223
224/*
225 * Wiimote extension register addresses
226 */
227
228// Speaker register addresses
229#define SPK_RST_REG WM_EXT_REG_ADDR(SPEAKER, 0x01)
230#define SPK_CTRL_REG WM_EXT_REG_ADDR(SPEAKER, 0x08)
231#define SPK_CLK_REG WM_EXT_REG_ADDR(SPEAKER, 0x09)
232
233// Extension register addresses
234#define WM_REG_EXTENSION_CONFIG WM_EXT_REG_ADDR(EXTENSION, 0x20)
235#define WM_REG_EXTENSION_40 WM_EXT_REG_ADDR(EXTENSION, 0x40)
236#define WM_REG_EXTENSION_46 WM_EXT_REG_ADDR(EXTENSION, 0x46)
237#define WM_REG_EXTENSION_4C WM_EXT_REG_ADDR(EXTENSION, 0x4c)
238#define WM_REG_EXTENSION_CERT_PARAM WM_EXT_REG_ADDR(EXTENSION, 0x50)
239#define WM_REG_EXTENSION_F0 WM_EXT_REG_ADDR(EXTENSION, 0xf0)
240#define WM_REG_EXTENSION_CERT_CHALLENGE WM_EXT_REG_ADDR(EXTENSION, 0xf1)
241#define WM_REG_EXTENSION_F2 WM_EXT_REG_ADDR(EXTENSION, 0xf2)
242#define WM_REG_EXTENSION_F3 WM_EXT_REG_ADDR(EXTENSION, 0xf3)
243#define WM_REG_EXTENSION_EXT_TYPE_2 WM_EXT_REG_ADDR(EXTENSION, 0xf6)
244#define WM_REG_EXTENSION_CERT_PROBE WM_EXT_REG_ADDR(EXTENSION, 0xf7)
245#define WM_REG_EXTENSION_FA WM_EXT_REG_ADDR(EXTENSION, 0xfa)
246#define WM_REG_EXTENSION_FB WM_EXT_REG_ADDR(EXTENSION, 0xfb)
247#define WM_REG_EXTENSION_DEV_MODE WM_EXT_REG_ADDR(EXTENSION, 0xfe)
248#define WM_REG_EXTENSION_ID_BYTE WM_EXT_REG_ADDR(EXTENSION, 0xff)
249
250#define WM_EXTENSION_CONFIG_SIZE 0x20 // 0xa40020 - 0xa4003f
251#define WM_EXTENSION_CERT_PARAM_SIZE 0x40 // 0xa40050 - 0xa4008f
252
253// Wiimote Motion Plus register addresses
254#define WM_REG_MPLS_F0 WM_EXT_REG_ADDR(MOTION_PLUS, 0xf0)
255#define WM_REG_MPLS_DEV_MODE WM_EXT_REG_ADDR(MOTION_PLUS, 0xfe)
256#define WM_REG_MPLS_ID_BYTE WM_EXT_REG_ADDR(MOTION_PLUS, 0xff)
257
258// IR camera register addresses
259#define WM_REG_DPD_CONFIG_BLOCK_1 WM_EXT_REG_ADDR(DPD, 0x00)
260#define WM_REG_DPD_CONFIG_BLOCK_2 WM_EXT_REG_ADDR(DPD, 0x1a)
261#define WM_REG_DPD_30 WM_EXT_REG_ADDR(DPD, 0x30)
262#define WM_REG_DPD_DATA_FORMAT WM_EXT_REG_ADDR(DPD, 0x33)
263
264
265#define WPAD_NZFILTER_ACC 0
266#define WPAD_NZFILTER_DPD 1
267#define WPAD_NZFILTER_EXT 2
268#define WPAD_NZFILTER_MPLS 3
269#define WPAD_MAX_NZFILTERS 4
270
271#define WPAD_BATTERY_LEVEL_CRITICAL 0
272#define WPAD_BATTERY_LEVEL_LOW 1
273#define WPAD_BATTERY_LEVEL_MEDIUM 2
274#define WPAD_BATTERY_LEVEL_HIGH 3
275#define WPAD_BATTERY_LEVEL_MAX 4
276
277#define WPAD_RADIO_QUALITY_GOOD 0 // 80+
278#define WPAD_RADIO_QUALITY_BAD 1 // 80-
279
280#define WPAD_RX_DATASIZE 96
281#define WPAD_COMMAND_CMD_MAX_LEN 24
282#if PLATFORM_SHIELD
283#define WPAD_COMMAND_EXT_MAX_LEN 12
284#else
285#define WPAD_COMMAND_EXT_MAX_LEN 8
286#endif
287#define WPAD_COMMAND_BUF_LEN 22
288
289#define WPAD_I2CDEV_SEL_MASK (u32)(0xFF000000)
290#define WPAD_I2CDEV_DADR_MASK (u32)(0x00FF0000)
291#define WPAD_I2CDEV_UADR_MASK (u32)(0x0000FF00)
292#define WPAD_I2CDEV_LADR_MASK (u32)(0x000000FF)
293#define WPAD_WRITE_LEN_MASK (u16)(0x001F)
294#define WPAD_READ_ULEN_MASK (u16)(0xFF00)
295#define WPAD_READ_LLEN_MASK (u16)(0x00FF)
296
297#define SPK_CLK_OFF 0x00
298#define SPK_CLK_ON 0x01
299#define SPK_DERESET 0x01
300#if SDK_AUG2010
301#define SPK_RESET 0x80
302#else
303#define SPK_RESET 0x08
304#endif
305#define SPK_CTRL_PLAY 0x01
306
307// Utility macros to help with SDK version differences
308
309#if SDK_AUG2010
310#define DIFF_COUNT_DPD(p_wpd) (p_wpd->filterDiff[WPAD_NZFILTER_DPD])
311#define HYST_COUNT_DPD(p_wpd) (p_wpd->filterSame[WPAD_NZFILTER_DPD])
312#define DIFF_COUNT_ACC(p_wpd) (p_wpd->filterDiff[WPAD_NZFILTER_ACC])
313#define HYST_COUNT_ACC(p_wpd) (p_wpd->filterSame[WPAD_NZFILTER_ACC])
314#define DIFF_COUNT_FS_ACC(p_wpd) (p_wpd->filterDiff[WPAD_NZFILTER_EXT])
315#define HYST_COUNT_FS_ACC(p_wpd) (p_wpd->filterSame[WPAD_NZFILTER_EXT])
316#else
317#define DIFF_COUNT_DPD(p_wpd) (p_wpd->diffCountDpd)
318#define HYST_COUNT_DPD(p_wpd) (p_wpd->hystCountDpd)
319#define DIFF_COUNT_ACC(p_wpd) (p_wpd->diffCountAcc)
320#define HYST_COUNT_ACC(p_wpd) (p_wpd->hystCountAcc)
321#define DIFF_COUNT_FS_ACC(p_wpd) (p_wpd->diffCountfsAcc)
322#define HYST_COUNT_FS_ACC(p_wpd) (p_wpd->hystCountfsAcc)
323#endif
324
325typedef struct WPADUnkStatus {
326 /* 0x00 */ WPADStatus base;
327 /* 0x2A */ u8 field_0x2a[0x60 - 0x2a];
329
330typedef struct WPADMEMGameInfo {
332 /* 0x08 */ u16 gameTitle[17];
333 /* 0x2A */ char gameId[4];
334 /* 0x2E */ u8 gameType;
335 /* 0x2F */ u8 checkSum;
336 /* 0x30 */ u8 reserved[8];
338
339typedef struct WPADMemBlock {
340 /* 0x00 */ BOOL busy;
341 /* 0x04 */ const u8* data;
342 /* 0x08 */ BOOL len;
343 /* 0x0C */ BOOL addr;
344 /* 0x10 */ WPADCallback* cb;
346
347typedef struct WPADCommand {
348 /* 0x00 */ u32 command;
349 /* 0x04 */ u8 data[22];
350 /* 0x1A */ u16 len;
351 /* 0x1C */ void* readBuf;
352 /* 0x20 */ u16 readLen;
353 /* 0x24 */ u32 readAddr;
354 /* 0x28 */ WPADInfo* info;
357
358typedef struct WPADCmdQueue {
359 /* 0x00 */ s8 head;
360 /* 0x01 */ s8 tail;
361 /* 0x04 */ WPADCommand* cmd;
362 /* 0x08 */ u32 cmdlen;
364
365typedef struct WPADDevConfig {
366 /* 0x00 */ DPDObject obj[WPAD_DPD_MAX_OBJECTS];
367 /* 0x20 */ WPADAcc acc_0g;
368 /* 0x26 */ WPADAcc acc_1g;
369 /* 0x2C */ u8 motor;
370 /* 0x2D */ u8 volume;
371#if SDK_AUG2010
372 /* 0x2E */ u8 unk_0x2e[0x30 - 0x2e];
373#endif
375
376typedef struct WPADStick {
377 /* 0x00 */ s16 x;
378 /* 0x02 */ s16 x_min;
379 /* 0x04 */ s16 x_max;
380 /* 0x06 */ s16 y;
381 /* 0x08 */ s16 y_min;
382 /* 0x0A */ s16 y_max;
384
385typedef struct WPADMplsCalibration {
386 /* 0x00 */ f32 pitchZero;
387 /* 0x04 */ f32 pitchScale;
388 /* 0x08 */ f32 yawZero;
389 /* 0x0c */ f32 yawScale;
390 /* 0x10 */ f32 rollZero;
391 /* 0x14 */ f32 rollScale;
392 /* 0x18 */ s32 degrees;
394
395typedef struct WPADFsConfig {
396 /* 0x00 */ WPADStick stick;
397 /* 0x0C */ WPADAcc acc_0g;
398 /* 0x12 */ WPADAcc acc_1g;
400
401typedef struct WPADClConfig {
402 /* 0x00 */ WPADStick lstk;
403 /* 0x0C */ WPADStick rstk;
404 /* 0x18 */ u8 triggerL;
405 /* 0x19 */ u8 triggerR;
407
408typedef struct WPADExtConfig {
409 /* 0x00 */ union {
412#if SDK_AUG2010
413 u8 bytes[0x1c];
414#else
415 u8 bytes[0x18];
416#endif
417 };
418#if SDK_AUG2010
422 /* 0x38 */ u32 calibCRC;
423 /* 0x3c */ u16 calibID;
424 } /* 0x1a */ mpls;
425#endif
427
428typedef struct WPADControlBlock {
430 /* 0x038 */ s32 gameInfoErr[2];
431 /* 0x040 */ WPADUnkStatus prBuf[1];
432 /* 0x0A0 */ WPADUnkStatus rxBufs[2];
434 /* 0x16C */ WPADCommand stdCmdQueueList[WPAD_COMMAND_CMD_MAX_LEN];
436 /* 0x5F8 */ WPADCommand extCmdQueueList[WPAD_COMMAND_EXT_MAX_LEN];
437 /* 0x778 */ WPADInfo info;
438 /* 0x790 */ WPADInfo* infoOut;
445 /* 0x7EC */ void* samplingBufs_ptr;
448 /* 0x7F8 */ u32 dataFormat;
449 /* 0x7FC */ s32 status;
450 /* 0x800 */ u8 statusReqBusy;
451 /* 0x801 */ u8 devType;
452 /* 0x802 */ u8 devMode;
453 /* 0x803 */ s8 devHandle;
454#if SDK_AUG2010
455 /* 0x908 */ int at_0x908; /* unknown */
456 /* 0x90c */ u8 rxBufIndex;
457 /* 0x90d */ s8 at_0x90d; /* unknown */
458 /* 0x90e */ u8 dpdDummyObjSize; // maybe?
461#else
462 /* 0x804 */ u16 dpdDummyObjSize;
463 /* 0x806 */ u8 rxBufIndex;
464 /* 0x807 */ u8 reqVolume;
466#endif
467 /* 0x80C */ u8 radioQuality;
468 /* 0x80D */ u8 radioQualityOkMs; // see __wpadCalcRadioQuality
469 /* 0x80E */ u8 audioFrames;
470 /* 0x810 */ BOOL motorBusy;
471 /* 0x814 */ BOOL motorRunning;
472 /* 0x818 */ BOOL used;
474 /* 0x820 */ BOOL oldFw;
476#if SDK_AUG2010
478 /* 0x934 */ u8 controlMplsBusy;
479 /* 0x935 */ u8 mplsCBReadBuf[2];
480 /* 0x937 */ u8 mplsCBCounter; // idk???
482 /* 0x939 */ u8 noParseMplsCount;
483 /* 0x93a */ u8 isInitingMpls; // maybe?
484 /* 0x93b */ u8 hasReadExtType2; // maybe?
485 /* 0x93c */ u8 at_0x93c; /* unknown */
486 /* 0x93d */ u8 parseMPState;
487 /* 0x93e */ u8 wmParamOffset;
488 /* 0x93f */ u8 certWorkCounter; // idk???
489 /* 0x940 */ u16 certWorkMs;
490 /* 0x942 */ s16 certStateWorkMs;
492 /* 0x945 */ u8 certWorkBusy;
494 /* 0x947 */ s8 certState;
495 /* 0x948 */ u32* certParamPtr;
496 /* 0x94c */ u32 certLintX[1 + 16 + 1];
497 /* 0x994 */ u32 certLintY[1 + 16 + 1];
498 /* 0x994 */ u32 certLintBig[LINT_NUM_MAX_BUFSIZ];
499 /* 0xae4 */ int at_0xae4; /* unknown */
500#endif
502#if SDK_AUG2010
503 /* 0xaf0 */ u16 filterDiff[WPAD_MAX_NZFILTERS];
504 /* 0xaf8 */ u16 filterSame[WPAD_MAX_NZFILTERS];
505#else
506 /* 0x838 */ u16 diffCountDpd;
507 /* 0x83A */ u16 hystCountDpd;
508 /* 0x83C */ u16 diffCountAcc;
509 /* 0x83E */ u16 hystCountAcc;
510 /* 0x840 */ u16 diffCountfsAcc;
511 /* 0x842 */ u16 hystCountfsAcc;
512#endif
514 /* 0x850 */ u8 cmdTimeoutAction;
515 /* 0x851 */ u8 calibrated;
517 /* 0x854 */ u8 key[16];
518 /* 0x864 */ u8 ft[8];
519 /* 0x86C */ u8 sb[8];
520 /* 0x874 */ u8 wmReadDataBuf[64];
521 /* 0x8B4 */ void* wmReadDataPtr;
522 /* 0x8B8 */ u32 wmReadAddr;
523 /* 0x8BC */ s32 wmReadErr;
524 /* 0x8C0 */ u16 wmReadLength;
525 /* 0x8C2 */ u8 keyIdx;
526 /* 0x8C3 */ u8 radioSensitivity;
527 /* 0x8C4 */ u16 packetCnt;
528 /* 0x8C6 */ u8 disconnect;
529 /* 0x8C7 */ u8 lastReportId;
530#if SDK_AUG2010
532 /* 0xB84 */ u8 getInfoBusy;
533 /* 0xB85 */ u8 extState;
534 /* 0xB86 */ u8 savePower;
535 /* 0xB87 */ u8 blcBattery;
536 /* 0xB88 */ u8 savedDevType; // maybe?
538 /* 0xB8A */ s16 reconnectExtMs;
541 /* 0xBA4 */ u8 parseMPBuf;
542 /* 0xBA5 */ u8 certProbeByte;
543 /* 0xBA6 */ u8 dpdBusy;
544 /* 0xBA7 */ u8 interleaveFlags;
546 /* 0xBAC */ u8 mplsCBState;
547 /* 0xBAD */ u8 mplsUptimeMs;
549 /* 0xBAF */ u8 unk_0xbaf[0xbb1 - 0xbaf]; /* unknown (can't be alignment) */
551 /* 0xBB2 */ u16 lastMplsCalibID;
553 /* 0xBB8 */ u8 noParseExtCount;
554 /* 0xBB9 */ s8 extErr;
555 /* 0xBBA */ u8 extDataLength;
556 /* 0xBBB */ u8 extDevType;
557 /* 0xBBC */ u8 currPwmDuty;
558 /* 0xBBD */ u8 pendingPwmDuty;
559 /* 0xBBE */ u8 unk_0xbbe[0xbc0 - 0xbbe]; /* unknown (can't be alignment) */
560 /* 0xBC0 */ u8 extDataBuf[32];
561#else
562 /* 0x8C8 */ u8 extDataBuf[0x8e0 - 0x8c8];
563#endif
565
566typedef struct WPADMEMControlBlock {
567 /* 0x00 */ BOOL used;
568 /* 0x04 */ u8* p_buf;
569 /* 0x08 */ u16 len;
570 /* 0x0C */ u32 addr;
573
574struct WPADCmd {
575 /* 0x00 */ u32 reportID;
576 /* 0x04 */ u8 dataBuf[RPT_MAX_SIZE];
577 /* 0x1a */ u16 dataLength;
578 /* 0x1c */ void* dstBuf;
579 /* 0x20 */ u16 readLength;
580 /* 0x24 */ u32 readAddress;
582 /* 0x2c */ WPADCallback cmdCB;
583}; // size 0x30
584
585extern WPADMEMControlBlock _wmb[WPAD_MAX_CONTROLLERS];
586#if SDK_AUG2010
587extern WPADControlBlock* __rvl_p_wpadcb[WPAD_MAX_CONTROLLERS];
588#define _wpdcb __rvl_p_wpadcb
589#else
590extern WPADControlBlock* _wpdcb[WPAD_MAX_CONTROLLERS];
591#endif
592
593/* WPAD.c */
594
595void WPADiCreateKey(s32);
597s32 WPADiHIDParser(u8 chan, u8* p_rpt);
598
599void WPADiClearQueue(WPADCmdQueue* queue);
604
605void WPADiCopyOut(s32 chan);
608
610void WPADiDisconnect(s32 chan, BOOL polite);
611
614#if SDK_AUG2010
616#else
618#endif
619void WPADiCheckContInputs(s32 chan);
620
623
629void WPADiRumbleMotor(s32 chan, BOOL sendCmd);
630void WPADiRadioSensitivity(s32 chan);
631
632void WPADiContMapTableUpdate(void);
633void WPADiAfh(void);
634void WPADiGetScSettings(void);
635
636void WPADiConnCallback(u8 dev_handle, u8 open);
637void WPADiRecvCallback(u8 dev_handle, u8* p_rpt, u16);
638
639/* WPADEncrypt.c */
640void WPADiCreateKey(s32 chan);
641void WPADiDecode(s32 chan, void* p_buf, u16 len, u16 offset);
642
643/* wpad_debug_msg.c */
644void DEBUGPrint(const char* fmt, ...);
645
646#ifdef __cplusplus
647}
648#endif
649
650#endif // _REVOLUTION_WPAD_PRIVATE_H_
static u32 addr
Definition WUD.c:1668
static s32 offset
Definition WUD.c:1669
BOOL WPADiSendSetReportType(WPADCmdQueue *queue, u32 fmt, WPADCallback callback)
void WPADiClearQueue(WPADCmdQueue *queue)
Definition WPAD.c:748
void WPADiExcludeButton(s32 chan)
void WPADiAfh(void)
Definition WPAD.c:859
void WPADiCopyOut(s32 chan)
BOOL WPADiSendReadData(WPADCmdQueue *queue, void *p_buf, u16 len, u32 addr, WPADCallback callback)
Definition WPAD.c:790
BOOL WPADiGetCommand(WPADCmdQueue *queue, WPADCommand *cmd)
struct WPADExtConfig WPADExtConfig
void WPADiShutdown()
struct WPADMplsCalibration WPADMplsCalibration
void DEBUGPrint(const char *fmt,...)
Definition KPAD.c:51
struct WPADMEMGameInfo WPADMEMGameInfo
void WPADiRadioSensitivity(s32 chan)
Definition WPAD.c:336
void WPADiCreateKey(s32)
Definition WPADEncrypt.c:191
BOOL WPADiProcessExtCommand(s32 chan)
Definition WPAD.c:885
WPADMEMControlBlock _wmb[WPAD_MAX_CONTROLLERS]
Definition WPADMem.c:3
s32 WPADiRetrieveChannel(u8 dev_handle)
void WPADiDecode(s32 chan, void *p_buf, u16 len, u16 offset)
Definition WPADEncrypt.c:253
struct WPADStick WPADStick
struct WPADFsConfig WPADFsConfig
BOOL WPADiSendDPDCSB(WPADCmdQueue *queue, BOOL enable, WPADCallback callback)
Definition WPAD.c:777
struct WPADDevConfig WPADDevConfig
void WPADiGetScSettings(void)
Definition WPAD.c:847
void WPADiConnCallback(u8 dev_handle, u8 open)
struct WPADClConfig WPADClConfig
BOOL WPADiSendSetPort(WPADCmdQueue *queue, u8 pattern, WPADCallback callback)
struct WPADMemBlock WPADMemBlock
WPADControlBlock * _wpdcb[WPAD_MAX_CONTROLLERS]
Definition WPAD.c:21
BOOL WPADiPopCommand(WPADCmdQueue *queue)
s32 WPADiHIDParser(u8 chan, u8 *p_rpt)
Definition WPADHIDParser.c:457
s32 WPADiGetStatus(s32 chan)
Definition WPAD.c:131
void WPADiRecvCallback(u8 dev_handle, u8 *p_rpt, u16)
void WPADiCheckContInputs(s32 chan)
Definition WPAD.c:680
void WPADiCreateKeyFor3rd(s32)
struct WPADUnkStatus WPADUnkStatus
s32 WPADiSendData(s32 chan, WPADCommand cmd)
BOOL WPADiSendWriteData(WPADCmdQueue *queue, void *p_buf, u16 len, u32 addr, WPADCallback callback)
void WPADiContMapTableUpdate(void)
Definition WPAD.c:874
BOOL WPADiSendWriteDataCmd(WPADCmdQueue *queue, u8 cmd, u32 addr, WPADCallback callback)
void WPADiDisconnect(s32 chan, BOOL polite)
WPADControlBlock * __rvl_p_wpadcb[WPAD_MAX_CONTROLLERS]
Definition WPAD.c:19
BOOL WPADiProcessCommand(s32 chan)
struct WPADControlBlock WPADControlBlock
struct WPADMEMControlBlock WPADMEMControlBlock
BOOL __wpadPushCommand(WPADCmdQueue *queue, WPADCommand cmd)
Definition WPAD.c:760
BOOL WPADiSendGetContStat(WPADCmdQueue *queue, WPADInfo *info, WPADCallback callback)
Definition WPAD.c:903
void WPADiRumbleMotor(s32 chan, BOOL sendCmd)
struct WPADCmdQueue WPADCmdQueue
struct WPADCommand WPADCommand
static void open(obj_keyhole_class *i_this)
Definition d_a_obj_keyhole.cpp:375
s64 OSTime
Definition os.h:19
int BOOL
Definition types.h:33
signed char s8
Definition types.h:7
unsigned long u32
Definition types.h:12
signed short int s16
Definition types.h:9
float f32
Definition types.h:25
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
static void callback(u32 param_0)
Definition OSExec.c:308
Definition wpad.h:177
Definition OSThread.h:22
Definition wpad.h:171
Definition __wpad.h:401
WPADStick lstk
Definition __wpad.h:402
WPADStick rstk
Definition __wpad.h:403
u8 triggerR
Definition __wpad.h:405
u8 triggerL
Definition __wpad.h:404
Definition __wpad.h:358
s8 head
Definition __wpad.h:359
s8 tail
Definition __wpad.h:360
WPADCommand * cmd
Definition __wpad.h:361
u32 cmdlen
Definition __wpad.h:362
Definition __wpad.h:574
u32 readAddress
Definition __wpad.h:580
u16 dataLength
Definition __wpad.h:577
WPADInfo * statusReportOut
Definition __wpad.h:581
u32 reportID
Definition __wpad.h:575
u8 dataBuf[RPT_MAX_SIZE]
Definition __wpad.h:576
WPADCallback cmdCB
Definition __wpad.h:582
u16 readLength
Definition __wpad.h:579
void * dstBuf
Definition __wpad.h:578
Definition __wpad.h:347
u16 len
Definition __wpad.h:350
u8 data[22]
Definition __wpad.h:349
u32 readAddr
Definition __wpad.h:353
WPADCallback callback
Definition __wpad.h:355
void * readBuf
Definition __wpad.h:351
u32 command
Definition __wpad.h:348
u16 readLen
Definition __wpad.h:352
WPADInfo * info
Definition __wpad.h:354
Definition __wpad.h:428
u8 certWorkBusy
Definition __wpad.h:492
OSTime lastReportSendTime
Definition __wpad.h:513
s8 certChallengeRandomBit
Definition __wpad.h:491
BOOL used
Definition __wpad.h:472
u8 pendingPwmDuty
Definition __wpad.h:558
s8 certState
Definition __wpad.h:494
BOOL motorRunning
Definition __wpad.h:471
WPADInfo info
Definition __wpad.h:437
WPADDevConfig devConf
Definition __wpad.h:439
BOOL oldFw
Definition __wpad.h:474
u8 lastReportId
Definition __wpad.h:529
u8 interleaveFlags
Definition __wpad.h:544
WPADConnectCallback connectCallback
Definition __wpad.h:443
u8 getInfoBusy
Definition __wpad.h:532
u8 certProbeStartingValue
Definition __wpad.h:550
u32 certLintBig[LINT_NUM_MAX_BUFSIZ]
Definition __wpad.h:498
s32 status
Definition __wpad.h:449
WPADCallback reqVolCb
Definition __wpad.h:465
s8 extErr
Definition __wpad.h:554
WPADUnkStatus prBuf[1]
Definition __wpad.h:431
u8 controlMplsBusy
Definition __wpad.h:478
u16 packetCnt
Definition __wpad.h:527
u16 hystCountAcc
Definition __wpad.h:509
BOOL motorBusy
Definition __wpad.h:470
s8 certMayVerifyByCalibBlock
Definition __wpad.h:548
u16 filterDiff[WPAD_MAX_NZFILTERS]
Definition __wpad.h:503
s16 reconnectExtMs
Definition __wpad.h:538
u16 diffCountDpd
Definition __wpad.h:506
u8 parseMPBuf
Definition __wpad.h:541
u8 certWorkCounter
Definition __wpad.h:488
u8 dpdDummyObjSize
Definition __wpad.h:458
u8 sb[8]
Definition __wpad.h:519
u8 mplsUptimeMs
Definition __wpad.h:547
u8 radioSensitivity
Definition __wpad.h:526
int at_0x908
Definition __wpad.h:455
u16 recalibrateCount
Definition __wpad.h:516
u8 extWasDisconnected
Definition __wpad.h:537
u8 currPwmDuty
Definition __wpad.h:557
void * wmReadDataPtr
Definition __wpad.h:521
OSTime lastUpdateTime
Definition __wpad.h:501
u8 unk_0xbbe[0xbc0 - 0xbbe]
Definition __wpad.h:559
u8 statusReqBusy
Definition __wpad.h:450
WPADCallback getInfoCB
Definition __wpad.h:531
u8 mplsCBCounter
Definition __wpad.h:480
u8 reqVolume
Definition __wpad.h:464
u8 mplsCBState
Definition __wpad.h:546
u8 devType
Definition __wpad.h:451
WPADCallback cmdBlkCallback
Definition __wpad.h:441
s32 gameInfoErr[2]
Definition __wpad.h:430
WPADCallback vsmCallback
Definition __wpad.h:477
WPADInfo * infoOut
Definition __wpad.h:438
u32 certLintY[1+16+1]
Definition __wpad.h:497
u8 at_0x93c
Definition __wpad.h:485
u8 devMode
Definition __wpad.h:452
WPADCommand extCmdQueueList[WPAD_COMMAND_EXT_MAX_LEN]
Definition __wpad.h:436
u32 mplsCBReadAddress
Definition __wpad.h:545
WPADMemBlock memBlock
Definition __wpad.h:539
u16 certWorkMs
Definition __wpad.h:489
s32 wmReadErr
Definition __wpad.h:523
u16 hystCountDpd
Definition __wpad.h:507
u8 radioQuality
Definition __wpad.h:467
u8 hasReadExtType2
Definition __wpad.h:484
WPADUnkStatus rxBufs[2]
Definition __wpad.h:432
void * samplingBufs_ptr
Definition __wpad.h:445
u8 cmdTimeoutAction
Definition __wpad.h:514
u8 key[16]
Definition __wpad.h:517
WPADSamplingCallback samplingCallback
Definition __wpad.h:444
u8 extDevType
Definition __wpad.h:556
u8 extState
Definition __wpad.h:533
u8 wmParamOffset
Definition __wpad.h:487
WPADCallback controlMplsCB
Definition __wpad.h:540
WPADCommand stdCmdQueueList[WPAD_COMMAND_CMD_MAX_LEN]
Definition __wpad.h:434
u8 parseMPState
Definition __wpad.h:486
u8 audioFrames
Definition __wpad.h:469
u8 blcBattery
Definition __wpad.h:535
u32 certLintX[1+16+1]
Definition __wpad.h:496
u32 dataFormat
Definition __wpad.h:448
s16 certStateWorkMs
Definition __wpad.h:490
u8 disconnect
Definition __wpad.h:528
WPADMEMGameInfo gameInfo
Definition __wpad.h:429
WPADExtConfig extConf
Definition __wpad.h:440
WPADCmdQueue stdCmdQueue
Definition __wpad.h:433
u8 extDataLength
Definition __wpad.h:555
u8 keyIdx
Definition __wpad.h:525
u8 radioQualityOkMs
Definition __wpad.h:468
u8 unk_0xbaf[0xbb1 - 0xbaf]
Definition __wpad.h:549
u8 savedDevType
Definition __wpad.h:536
u8 mplsCBReadBuf[2]
Definition __wpad.h:479
WPADCmdQueue extCmdQueue
Definition __wpad.h:435
u32 samplingBufIndex
Definition __wpad.h:446
u8 noParseExtCount
Definition __wpad.h:553
u16 hystCountfsAcc
Definition __wpad.h:511
OSThreadQueue threadQueue
Definition __wpad.h:475
WPADExtensionCallback extensionCallback
Definition __wpad.h:442
u8 noParseMplsCount
Definition __wpad.h:482
u8 pendingDpdCommand
Definition __wpad.h:460
u8 certProbeByte
Definition __wpad.h:542
u8 wmReadDataBuf[64]
Definition __wpad.h:520
BOOL handshakeFinished
Definition __wpad.h:473
u8 calibrated
Definition __wpad.h:515
s8 certValidityStatus
Definition __wpad.h:493
u8 currentDpdCommand
Definition __wpad.h:459
u16 diffCountAcc
Definition __wpad.h:508
u8 isInitingMpls
Definition __wpad.h:483
s8 devHandle
Definition __wpad.h:453
u8 savePower
Definition __wpad.h:534
u8 rxBufIndex
Definition __wpad.h:456
u16 dpdDummyObjSize
Definition __wpad.h:462
u8 ft[8]
Definition __wpad.h:518
u16 wmReadLength
Definition __wpad.h:524
u8 dpdBusy
Definition __wpad.h:543
u8 pendingMplsCommand
Definition __wpad.h:481
u32 * certParamPtr
Definition __wpad.h:495
u32 samplingBufLength
Definition __wpad.h:447
u32 lastMplsCalibCRC
Definition __wpad.h:552
u32 wmReadAddr
Definition __wpad.h:522
u16 diffCountfsAcc
Definition __wpad.h:510
u8 extDataBuf[32]
Definition __wpad.h:560
u16 filterSame[WPAD_MAX_NZFILTERS]
Definition __wpad.h:504
u16 lastMplsCalibID
Definition __wpad.h:551
int at_0xae4
Definition __wpad.h:499
s8 at_0x90d
Definition __wpad.h:457
Definition __wpad.h:365
DPDObject obj[WPAD_DPD_MAX_OBJECTS]
Definition __wpad.h:366
u8 motor
Definition __wpad.h:369
u8 unk_0x2e[0x30 - 0x2e]
Definition __wpad.h:372
u8 volume
Definition __wpad.h:370
WPADAcc acc_0g
Definition __wpad.h:367
WPADAcc acc_1g
Definition __wpad.h:368
Definition __wpad.h:419
WPADMplsCalibration low
Definition __wpad.h:421
u16 calibID
Definition __wpad.h:423
WPADMplsCalibration high
Definition __wpad.h:420
u32 calibCRC
Definition __wpad.h:422
Definition __wpad.h:408
u8 bytes[0x1c]
Definition __wpad.h:413
struct WPADExtConfig::WPADMplsConfig mpls
WPADClConfig cl
Definition __wpad.h:411
WPADFsConfig fs
Definition __wpad.h:410
Definition __wpad.h:395
WPADStick stick
Definition __wpad.h:396
WPADAcc acc_0g
Definition __wpad.h:397
WPADAcc acc_1g
Definition __wpad.h:398
Definition wpad.h:159
Definition __wpad.h:566
u32 addr
Definition __wpad.h:570
u16 len
Definition __wpad.h:569
WPADCallback callback
Definition __wpad.h:571
u8 * p_buf
Definition __wpad.h:568
BOOL used
Definition __wpad.h:567
Definition __wpad.h:330
u8 checkSum
Definition __wpad.h:335
OSTime calendarTimeTick
Definition __wpad.h:331
u16 gameTitle[17]
Definition __wpad.h:332
u8 reserved[8]
Definition __wpad.h:336
u8 gameType
Definition __wpad.h:334
char gameId[4]
Definition __wpad.h:333
Definition __wpad.h:339
const u8 * data
Definition __wpad.h:341
BOOL len
Definition __wpad.h:342
WPADCallback * cb
Definition __wpad.h:344
BOOL busy
Definition __wpad.h:340
BOOL addr
Definition __wpad.h:343
Definition __wpad.h:385
f32 pitchZero
Definition __wpad.h:386
f32 rollZero
Definition __wpad.h:390
f32 pitchScale
Definition __wpad.h:387
f32 yawScale
Definition __wpad.h:389
s32 degrees
Definition __wpad.h:392
f32 yawZero
Definition __wpad.h:388
f32 rollScale
Definition __wpad.h:391
Definition wpad.h:184
Definition __wpad.h:376
s16 x
Definition __wpad.h:377
s16 x_min
Definition __wpad.h:378
s16 y_min
Definition __wpad.h:381
s16 y_max
Definition __wpad.h:382
s16 y
Definition __wpad.h:380
s16 x_max
Definition __wpad.h:379
Definition __wpad.h:325
WPADStatus base
Definition __wpad.h:326
u8 field_0x2a[0x60 - 0x2a]
Definition __wpad.h:327
void(* WPADCallback)(s32 chan, s32 result)
Definition wpad.h:146
void(* WPADExtensionCallback)(s32 chan, s32 devType)
Definition wpad.h:147
void(* WPADConnectCallback)(s32 chan, s32 result)
Definition wpad.h:152
void(* WPADSamplingCallback)(s32 chan)
Definition wpad.h:151