Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
si.h
Go to the documentation of this file.
1#ifndef _REVOLUTION_SI_H_
2#define _REVOLUTION_SI_H_
3
4#include <revolution/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
88typedef struct {
89 s32 chan;
90 u32 poll;
91 u32 inputBytes;
92 void* input;
94} SIControl;
95
96typedef struct {
97 s32 chan;
98 void* output;
99 u32 outputBytes;
100 void* input;
101 u32 inputBytes;
103 OSTime fire;
104} SIPacket;
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);
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
137typedef struct {
138 u8 output[3];
139 u8 input[8];
140 u32 outputBytes;
141 u32 inputBytes;
143 s32 ret;
144 OSThreadQueue threadQueue;
145 void (*proc)(s32);
147
148typedef struct {
149 u16 button;
150 u8 misc;
151 s8 steering;
152 u8 gas;
153 u8 brake;
154 u8 left;
155 u8 right;
156 s8 err;
158
162
163void SIInitSteering(void);
166
169void SIControlSteering(s32 chan, u32 control, s32 level);
170
171#ifdef __cplusplus
172}
173#endif
174
175#endif // _REVOLUTION_SI_H_
static OSContext context
Definition JUTException.cpp:157
void(* __OSInterruptHandler)(__OSInterrupt interrupt, OSContext *context)
Definition OSInterrupt.h:100
s64 OSTime
Definition os.h:19
BOOL SIRegisterPollingHandler(__OSInterruptHandler handler)
Definition SIBios.c:222
u32 __PADFixBits
Definition SIBios.c:33
void SIInit(void)
Definition SIBios.c:275
void(* SICallback)(s32 chan, u32 sr, OSContext *context)
Definition si.h:88
void(* SISteeringCallback)(s32 chan, s32)
Definition si.h:138
BOOL SIUnregisterPollingHandler(__OSInterruptHandler handler)
Definition SIBios.c:247
void(* SITypeCallback)(s32 chan, u32 type)
Definition si.h:89
BOOL SIIsChanBusy(s32 chan)
Definition SIBios.c:48
BOOL SIBusy(void)
Definition SIBios.c:44
void SISetCommand(s32 chan, u32 command)
Definition SIBios.c:388
int BOOL
Definition types.h:33
signed char s8
Definition types.h:7
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
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
static void callback(u32 param_0)
Definition OSExec.c:308
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
void SIRefreshSamplingRate(void)
Definition SISamplingRate.c:78
u32 SISetXY(u32 x, u32 y)
Definition SIBios.c:402
u32 SIDecodeType(u32 type)
Definition SIBios.c:701
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 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
SISteeringControl __SISteering[4]
Definition SISteering.c:12
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:140
Definition OSThread.h:22
Definition si.h:91
Definition si.h:99
Definition si.h:140
Definition si.h:151