Loading [MathJax]/extensions/tex2jax.js
Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
si.h
Go to the documentation of this file.
1#ifndef _DOLPHIN_SI_H_
2#define _DOLPHIN_SI_H_
3
4#include <dolphin/os.h>
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10#define SI_MAX_CHAN 4
11#define SI_MAX_TYPE 4
12
13#define SI_COMCSR_IDX 13
14#define SI_STATUS_IDX 14
15
16#define SI_COMCSR_TCINT_MASK (1 << 31)
17#define SI_COMCSR_TCINTMSK_MASK (1 << 30)
18#define SI_COMCSR_COMERR_MASK (1 << 29)
19#define SI_COMCSR_RDSTINT_MASK (1 << 28)
20#define SI_COMCSR_RDSTINTMSK_MASK (1 << 27)
21
22// 4 bits of padding
23#define SI_COMCSR_OUTLNGTH_MASK (1 << 22) \
24 | (1 << 21) \
25 | (1 << 20) \
26 | (1 << 19) \
27 | (1 << 18) \
28 | (1 << 17) \
29 | (1 << 16)
30
31// 1 bit of padding
32#define SI_COMCSR_INLNGTH_MASK (1 << 14) \
33 | (1 << 13) \
34 | (1 << 12) \
35 | (1 << 11) \
36 | (1 << 10) \
37 | (1 << 9) \
38 | (1 << 8)
39
40// 5 bits of padding
41#define SI_COMCSR_CHANNEL_MASK (1 << 2) \
42 | (1 << 1)
43
44#define SI_COMCSR_TSTART_MASK (1 << 0)
45
46#define SI_ERROR_UNDER_RUN 0x0001
47#define SI_ERROR_OVER_RUN 0x0002
48#define SI_ERROR_COLLISION 0x0004
49#define SI_ERROR_NO_RESPONSE 0x0008
50#define SI_ERROR_WRST 0x0010
51#define SI_ERROR_RDST 0x0020
52#define SI_ERROR_UNKNOWN 0x0040
53#define SI_ERROR_BUSY 0x0080
54
55#define SI_TYPE_MASK 0x18000000u
56#define SI_TYPE_N64 0x00000000u
57#define SI_TYPE_DOLPHIN 0x08000000u
58#define SI_TYPE_GC SI_TYPE_DOLPHIN
59#define SI_GC_WIRELESS 0x80000000
60#define SI_GC_NOMOTOR 0x20000000
61#define SI_GC_STANDARD 0x01000000
62#define SI_WIRELESS_RECEIVED 0x40000000
63#define SI_WIRELESS_IR 0x04000000
64#define SI_WIRELESS_STATE 0x02000000
65#define SI_WIRELESS_ORIGIN 0x00200000
66#define SI_WIRELESS_FIX_ID 0x00100000
67#define SI_WIRELESS_TYPE 0x000f0000
68#define SI_WIRELESS_LITE_MASK 0x000c0000
69#define SI_WIRELESS_LITE 0x00040000
70#define SI_WIRELESS_CONT_MASK 0x00080000
71#define SI_WIRELESS_CONT 0x00000000
72#define SI_WIRELESS_ID 0x00c0ff00
73#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID)
74#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000)
75#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000)
76#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000)
77#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000)
78#define SI_GBA (SI_TYPE_N64 | 0x00040000)
79#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD)
80#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS)
81#define SI_GC_WAVEBIRD (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID)
82#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000)
83#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000)
84
85typedef void (*SICallback)(s32 chan, u32 sr, OSContext *context);
86typedef void (*SITypeCallback)(s32 chan, u32 type);
87
95
105
106// SIBios
107BOOL SIBusy(void);
108BOOL SIIsChanBusy(s32 chan);
111void SIInit(void);
112u32 SISync(void);
113u32 SIGetStatus(s32 chan);
114void SISetCommand(s32 chan, u32 command);
115u32 SIGetCommand(s32 chan);
116void SITransferCommands(void);
117u32 SISetXY(u32 x, u32 y);
120BOOL SIGetResponse(s32 chan, void* data);
121BOOL SITransfer(s32 chan, void* output, u32 outputBytes, void* input, u32 inputBytes, SICallback callback, OSTime delay);
122u32 SIGetType(s32 chan);
123u32 SIGetTypeAsync(s32 chan, SITypeCallback callback);
124u32 SIDecodeType(u32 type);
125u32 SIProbe(s32 chan);
126char* SIGetTypeString(u32 type);
127
128extern u32 __PADFixBits;
129
130// SISamplingRate
131void SISetSamplingRate(u32 msec);
132void SIRefreshSamplingRate(void);
133
134// SISteering
135typedef void (*SISteeringCallback)(s32 chan, s32);
136
147
158
162
163void SIInitSteering(void);
166
168void (* SISetSteeringSamplingCallback(void (*callback)()))();
169void SIControlSteering(s32 chan, u32 control, s32 level);
170
171#ifdef __cplusplus
172}
173#endif
174
175#endif // _DOLPHIN_SI_H_
static OSContext context
Definition JUTException.cpp:181
void(* __OSInterruptHandler)(__OSInterrupt interrupt, OSContext *context)
Definition OSInterrupt.h:97
double x double x
Definition e_atan2.c:58
double x double y
Definition e_atan2.c:58
static u32 status
Definition fstload.c:9
s64 OSTime
Definition os.h:16
char * SIGetTypeString(u32 type)
Definition SIBios.c:768
void(*)() SISetSteeringSamplingCallback(void(*callback)())
Definition si.h:168
s32 SIReadSteering(s32 chan, SISteeringStatus *status)
Definition SISteeringAuto.c:31
BOOL SIGetResponse(s32 chan, void *data)
Definition SIBios.c:479
BOOL SIRegisterPollingHandler(__OSInterruptHandler handler)
Definition SIBios.c:222
void SIRefreshSamplingRate(void)
Definition SISamplingRate.c:78
u32 __PADFixBits
Definition SIBios.c:33
u32 SISetXY(u32 x, u32 y)
Definition SIBios.c:402
u32 SIDecodeType(u32 type)
Definition SIBios.c:701
void SIInit(void)
Definition SIBios.c:275
void SIControlSteering(s32 chan, u32 control, s32 level)
Definition SISteeringAuto.c:103
void SIInitSteering(void)
Definition SISteering.c:17
BOOL __SIResetSteering
Definition SISteering.c:13
u32 __SISteeringEnableBits
Definition SISteeringAuto.c:5
BOOL SITransfer(s32 chan, void *output, u32 outputBytes, void *input, u32 inputBytes, SICallback callback, OSTime delay)
Definition SIBios.c:515
u32 SIEnablePolling(u32 poll)
Definition SIBios.c:421
u32 SIDisablePolling(u32 poll)
Definition SIBios.c:446
u32 SIProbe(s32 chan)
Definition SIBios.c:764
void(* SICallback)(s32 chan, u32 sr, OSContext *context)
Definition si.h:85
void(* SISteeringCallback)(s32 chan, s32)
Definition si.h:135
void SISetSamplingRate(u32 msec)
Definition SISamplingRate.c:45
u32 SIGetStatus(s32 chan)
Definition SIBios.c:368
s32 SIResetSteering(s32 chan)
Definition SISteering.c:79
u32 SIGetTypeAsync(s32 chan, SITypeCallback callback)
Definition SIBios.c:672
u32 SIGetType(s32 chan)
Definition SIBios.c:635
s32 SIResetSteeringAsync(s32 chan, SISteeringCallback callback)
Definition SISteering.c:65
BOOL SIUnregisterPollingHandler(__OSInterruptHandler handler)
Definition SIBios.c:247
void(* SITypeCallback)(s32 chan, u32 type)
Definition si.h:86
BOOL SIIsChanBusy(s32 chan)
Definition SIBios.c:48
SISteeringControl __SISteering[4]
Definition SISteering.c:12
BOOL SIBusy(void)
Definition SIBios.c:44
void SISetCommand(s32 chan, u32 command)
Definition SIBios.c:388
u32 SISync(void)
Definition SIBios.c:355
void SITransferCommands(void)
Definition SIBios.c:398
u32 SIGetCommand(s32 chan)
Definition SIBios.c:393
Definition OSContext.h:137
Definition OSThread.h:19
Definition si.h:88
u32 poll
Definition si.h:90
void * input
Definition si.h:92
s32 chan
Definition si.h:89
SICallback callback
Definition si.h:93
u32 inputBytes
Definition si.h:91
Definition si.h:96
void * input
Definition si.h:100
OSTime fire
Definition si.h:103
SICallback callback
Definition si.h:102
s32 chan
Definition si.h:97
u32 outputBytes
Definition si.h:99
void * output
Definition si.h:98
u32 inputBytes
Definition si.h:101
Definition si.h:137
u32 inputBytes
Definition si.h:141
SISteeringCallback callback
Definition si.h:142
s32 ret
Definition si.h:143
u32 outputBytes
Definition si.h:140
OSThreadQueue threadQueue
Definition si.h:144
Definition si.h:148
u8 misc
Definition si.h:150
s8 steering
Definition si.h:151
u8 right
Definition si.h:155
u16 button
Definition si.h:149
u8 left
Definition si.h:154
u8 brake
Definition si.h:153
u8 gas
Definition si.h:152
s8 err
Definition si.h:156
int BOOL
Definition types.h:30
signed char s8
Definition types.h:4
unsigned long u32
Definition types.h:9
unsigned short int u16
Definition types.h:7
signed long s32
Definition types.h:8
unsigned char u8
Definition types.h:5