Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
JUTGamePad.h
Go to the documentation of this file.
1#ifndef JUTGAMEPAD_H
2#define JUTGAMEPAD_H
3
7
8typedef void (*callbackFn)(int, void*);
9
16 virtual void getStatus(PADStatus* pad) = 0;
17 virtual void write(PADStatus* pad) = 0;
18
19 bool isActive() const { return mActive; }
20
21 /* 0x4 */ bool mActive;
22};
23
28struct JUTGamePad : public JKRDisposer {
29public:
32 };
33
38
46
52
54 virtual ~JUTGamePad();
55
56 void initList();
57 static BOOL init();
58 void clear();
59 static u32 read();
60 void assign();
61 void checkResetCallback(OSTime holdTime);
62 void update();
64 void setButtonRepeat(u32, u32, u32);
65
66 static void checkResetSwitch();
67 static void clearForReset();
68 static JUTGamePad* getGamePad(int port);
69 static bool recalibrate(u32 mask);
70
71 static void setAnalogMode(u32 mode) {
74 }
75
76 static int getClampMode() { return sClampMode; }
77
79
84
85 u32 getButton() const { return mButton.mButton; }
86 u32 getTrigger() const { return mButton.mTrigger; }
87 u32 getRelease() const { return mButton.mRelease; }
88 u32 getRepeat() const { return mButton.mRepeat; }
89 f32 getMainStickX() const { return mMainStick.mPosX; }
90 f32 getMainStickY() const { return mMainStick.mPosY; }
93 f32 getSubStickX() const { return mSubStick.mPosX; }
94 f32 getSubStickY() const { return mSubStick.mPosY; }
97 u8 getAnalogA() const { return mButton.mAnalogA; }
98 u8 getAnalogB() const { return mButton.mAnalogB; }
99 u8 getAnalogL() const { return mButton.mAnalogL; }
100 u8 getAnalogR() const { return mButton.mAnalogR; }
101 s8 getErrorStatus() const { return mErrorStatus; }
102
103 s16 getPortNum() const { return mPortNum; }
104
107
108 bool testButton(u32 button) const { return mButton.mButton & button; }
109 bool testTrigger(u32 button) const { return mButton.mTrigger & button; }
110
112 return mPortNum != EPortInvalid && mButtonReset.mReset != false;
113 }
114
118
119 static s8 getPortStatus(EPadPort port) {
120 JUT_ASSERT(360, 0 <= port && port < 4);
121 return mPadStatus[port].err;
122 }
123
124 struct CButton {
125 CButton() { clear(); }
126 void clear();
127 void update(const PADStatus* padStatus, u32 stickStatus);
128 void setRepeat(u32 mask, u32 delay, u32 rate);
129
130 /* 0x00 */ u32 mButton;
131 /* 0x04 */ u32 mTrigger; // Pressed Buttons
132 /* 0x08 */ u32 mRelease; // Released Buttons
133 /* 0x0C */ u8 mAnalogA;
134 /* 0x0D */ u8 mAnalogB;
135 /* 0x0E */ u8 mAnalogL;
136 /* 0x0F */ u8 mAnalogR;
137 /* 0x10 */ f32 mAnalogLf;
138 /* 0x14 */ f32 mAnalogRf;
139 /* 0x18 */ u32 mRepeat;
140 /* 0x1C */ u32 mRepeatCount;
141 /* 0x20 */ u32 mRepeatStart;
142 /* 0x24 */ u32 mRepeatMask;
143 /* 0x28 */ u32 mRepeatDelay;
144 /* 0x2C */ u32 mRepeatRate;
145 }; // Size: 0x30
146
148 C3ButtonReset() { mReset = false; }
149
153 static void* sCallbackArg;
156 static bool sResetOccurred;
158
159 /* 0x0 */ bool mReset;
160 }; // Size: 0x4
161
162 struct CStick {
165
166 CStick() { clear(); }
167 void clear();
168 void clear(JUTGamePad* pad);
170 u32 buttons);
171 u32 getButton(u32 buttons);
172
173 /* 0x0 */ f32 mPosX;
174 /* 0x4 */ f32 mPosY;
175 /* 0x8 */ f32 mValue;
176 /* 0xC */ s16 mAngle;
177 /* 0xE */ s8 mRawX;
178 /* 0xF */ s8 mRawY;
179 }; // Size: 0x10
180
182
183 struct CRumble {
184 CRumble(JUTGamePad* pad) { clear(pad); }
185
186 static u32 sChannelMask[4];
187 static u8 mStatus[4];
188 static u32 mEnabled;
189
190 enum ERumble {
191 VAL_0 = 0,
192 VAL_1 = 1,
193 VAL_2 = 2,
194 };
195
196 void clear();
197 void clear(JUTGamePad* pad);
198 static void startMotor(int port);
199 static void stopMotor(int port, bool hard_stop);
200 void update(s16 port);
201 void triggerPatternedRumble(u32 length);
202 void startPatternedRumble(void* data, ERumble rumble, u32 length);
203 void stopPatternedRumble(s16 port);
205 static void setEnabled(u32 mask);
206
207 static void stopMotor(int port) { stopMotor(port, false); }
208 static void stopMotorHard(int port) { stopMotor(port, true); }
209
210 static bool isEnabled(u32 mask) {
211 bool result;
212 if (mEnabled & mask) {
213 result = true;
214 } else {
215 result = false;
216 }
217 return result;
218 }
219
220 static bool isEnabledPort(int port) {
221 JUT_ASSERT(250, 0 <= port && port < 4);
222 return isEnabled(sChannelMask[port]);
223 }
224
225 /* 0x00 */ u32 mFrame;
226 /* 0x04 */ u32 mLength;
227 /* 0x08 */ u8* mPattern;
228 /* 0x0C */ u32 mFrameCount;
229 /* 0x10 */ u8* field_0x10;
230 }; // Size: 0x14
231
232 void startMotorWave(void* data, CRumble::ERumble rumble, u32 length) {
233 mRumble.startPatternedRumble(data, rumble, length);
234 }
235
237 static bool mListInitialized;
243 static int sClampMode;
244 static u8 mPadAssign[4];
248
249 /* 0x18 */ CButton mButton;
250 /* 0x48 */ CStick mMainStick;
251 /* 0x58 */ CStick mSubStick;
252 /* 0x68 */ CRumble mRumble;
253 /* 0x7C */ s16 mPortNum;
254 /* 0x7E */ s8 mErrorStatus;
259 /* 0x9C */ u8 field_0x9c[4];
261 /* 0xA8 */ u8 field_0xa8;
262};
263
270 void checkCallback(int port, u32 hold_time);
271
272 u32 getMaskPattern() const { return mMaskPattern; }
273 u32 getPattern() const { return mPattern; }
274 bool isValid() const { return mValid; }
275
276 /* 0x00 */ u8 field_0x0[0x10];
277 /* 0x10 */ bool mValid;
278 /* 0x11 */ bool field_0x11;
279 /* 0x14 */ u32 mPattern;
280 /* 0x18 */ u32 mMaskPattern;
281 /* 0x1C */ u32 mThreshold;
282 /* 0x20 */ bool mLongPressStatus[4];
283 /* 0x28 */ OSTime mStartHoldTime[4];
284 /* 0x48 */ bool field_0x48[4];
285 /* 0x4C */ void (*mCallback)(s32, JUTGamePadLongPress*, s32);
286 /* 0x50 */ s32 field_0x50;
287};
288
290 return JUTGamePad::read();
291}
292
293#endif /* JUTGAMEPAD_H */
void(* callbackFn)(int, void *)
Definition JUTGamePad.h:8
u32 JUTReadGamePad()
Definition JUTGamePad.h:289
Definition JKRDisposer.h:12
Definition JSUList.h:96
static void stick(b_gos_class *i_this)
Definition d_a_b_gos.cpp:141
u32 mode
Definition GXTev.c:56
s64 OSTime
Definition os.h:19
void PADSetAnalogMode(u32 mode)
Definition Pad.c:732
double x double x
Definition e_atan2.c:58
double u
Definition e_pow.c:114
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
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 JUTGamePad.h:268
u32 getPattern() const
Definition JUTGamePad.h:273
static JSUList< JUTGamePadLongPress > sPatternList
Definition JUTGamePad.h:269
bool field_0x48[4]
Definition JUTGamePad.h:284
bool mLongPressStatus[4]
Definition JUTGamePad.h:282
bool field_0x11
Definition JUTGamePad.h:278
void checkCallback(int port, u32 hold_time)
Definition JUTGamePad.cpp:595
u32 mThreshold
Definition JUTGamePad.h:281
u8 field_0x0[0x10]
Definition JUTGamePad.h:276
bool mValid
Definition JUTGamePad.h:277
u32 mPattern
Definition JUTGamePad.h:279
u32 mMaskPattern
Definition JUTGamePad.h:280
bool isValid() const
Definition JUTGamePad.h:274
OSTime mStartHoldTime[4]
Definition JUTGamePad.h:283
void(* mCallback)(s32, JUTGamePadLongPress *, s32)
Definition JUTGamePad.h:285
u32 getMaskPattern() const
Definition JUTGamePad.h:272
s32 field_0x50
Definition JUTGamePad.h:286
Definition JUTGamePad.h:14
virtual void getStatus(PADStatus *pad)=0
virtual void write(PADStatus *pad)=0
virtual ~JUTGamePadRecordBase()
Definition JUTGamePad.h:15
bool mActive
Definition JUTGamePad.h:21
bool isActive() const
Definition JUTGamePad.h:19
Definition JUTGamePad.h:147
static s32 sResetOccurredPort
Definition JUTGamePad.h:155
static OSTime sThreshold
Definition JUTGamePad.h:154
static u32 sResetMaskPattern
Definition JUTGamePad.h:151
static callbackFn sCallback
Definition JUTGamePad.h:152
static bool sResetSwitchPushing
Definition JUTGamePad.h:157
C3ButtonReset()
Definition JUTGamePad.h:148
static bool sResetOccurred
Definition JUTGamePad.h:156
static u32 sResetPattern
Definition JUTGamePad.h:150
static void * sCallbackArg
Definition JUTGamePad.h:153
bool mReset
Definition JUTGamePad.h:159
Definition JUTGamePad.h:124
u32 mRepeatStart
Definition JUTGamePad.h:141
u32 mRepeatRate
Definition JUTGamePad.h:144
u32 mButton
Definition JUTGamePad.h:130
u8 mAnalogL
Definition JUTGamePad.h:135
void clear()
Definition JUTGamePad.cpp:279
u8 mAnalogB
Definition JUTGamePad.h:134
u32 mRepeatCount
Definition JUTGamePad.h:140
u32 mRepeatMask
Definition JUTGamePad.h:142
f32 mAnalogRf
Definition JUTGamePad.h:138
u32 mTrigger
Definition JUTGamePad.h:131
u8 mAnalogR
Definition JUTGamePad.h:136
f32 mAnalogLf
Definition JUTGamePad.h:137
u32 mRepeat
Definition JUTGamePad.h:139
void setRepeat(u32 mask, u32 delay, u32 rate)
Definition JUTGamePad.cpp:569
u8 mAnalogA
Definition JUTGamePad.h:133
u32 mRelease
Definition JUTGamePad.h:132
u32 mRepeatDelay
Definition JUTGamePad.h:143
CButton()
Definition JUTGamePad.h:125
Definition JUTGamePad.h:183
static void stopMotor(int port, bool hard_stop)
Definition JUTGamePad.cpp:443
CRumble(JUTGamePad *pad)
Definition JUTGamePad.h:184
static bool isEnabled(u32 mask)
Definition JUTGamePad.h:210
static void stopMotorHard(int port)
Definition JUTGamePad.h:208
static u32 mEnabled
Definition JUTGamePad.h:188
static bool isEnabledPort(int port)
Definition JUTGamePad.h:220
void stopPatternedRumble(s16 port)
Definition JUTGamePad.cpp:530
u8 * field_0x10
Definition JUTGamePad.h:229
void startPatternedRumble(void *data, ERumble rumble, u32 length)
Definition JUTGamePad.cpp:512
static void startMotor(int port)
Definition JUTGamePad.cpp:436
static void stopMotor(int port)
Definition JUTGamePad.h:207
u32 mLength
Definition JUTGamePad.h:226
ERumble
Definition JUTGamePad.h:190
@ VAL_1
Definition JUTGamePad.h:192
@ VAL_2
Definition JUTGamePad.h:193
@ VAL_0
Definition JUTGamePad.h:191
static u8 mStatus[4]
Definition JUTGamePad.h:187
u8 * mPattern
Definition JUTGamePad.h:227
u32 mFrameCount
Definition JUTGamePad.h:228
void stopPatternedRumbleAtThePeriod()
Definition JUTGamePad.cpp:536
static u32 sChannelMask[4]
Definition JUTGamePad.h:6
static void setEnabled(u32 mask)
Definition JUTGamePad.cpp:551
void clear()
Definition JUTGamePad.cpp:419
u32 mFrame
Definition JUTGamePad.h:225
void triggerPatternedRumble(u32 length)
Definition JUTGamePad.cpp:505
Definition JUTGamePad.h:162
f32 mValue
Definition JUTGamePad.h:175
void clear()
Definition JUTGamePad.cpp:342
void clear(JUTGamePad *pad)
s8 mRawY
Definition JUTGamePad.h:178
f32 mPosY
Definition JUTGamePad.h:174
f32 mPosX
Definition JUTGamePad.h:173
static f32 sPressPoint
Definition JUTGamePad.h:163
CStick()
Definition JUTGamePad.h:166
s16 mAngle
Definition JUTGamePad.h:176
static f32 sReleasePoint
Definition JUTGamePad.h:164
s8 mRawX
Definition JUTGamePad.h:177
Definition JUTGamePad.h:28
void stopMotor()
Definition JUTGamePad.h:116
static s8 getPortStatus(EPadPort port)
Definition JUTGamePad.h:119
void stopPatternedRumble()
Definition JUTGamePad.h:63
static bool mListInitialized
Definition JUTGamePad.h:237
static u32 sRumbleSupported
Definition JUTGamePad.h:247
static u8 mPadAssign[4]
Definition JUTGamePad.h:244
static BOOL init()
Definition JUTGamePad.cpp:57
static JUTGamePad * getGamePad(int port)
Definition JUTGamePad.cpp:541
f32 getMainStickX() const
Definition JUTGamePad.h:89
void startMotorWave(void *data, CRumble::ERumble rumble, u32 length)
Definition JUTGamePad.h:232
u32 getRelease() const
Definition JUTGamePad.h:87
static int getClampMode()
Definition JUTGamePad.h:76
void checkResetCallback(OSTime holdTime)
Definition JUTGamePad.cpp:189
f32 getMainStickValue() const
Definition JUTGamePad.h:91
u8 field_0xa8
Definition JUTGamePad.h:261
u8 getAnalogR() const
Definition JUTGamePad.h:100
s16 getMainStickAngle() const
Definition JUTGamePad.h:92
EPadPort
Definition JUTGamePad.h:39
@ EPort4
Definition JUTGamePad.h:44
@ EPort2
Definition JUTGamePad.h:42
@ EPort3
Definition JUTGamePad.h:43
@ EPort1
Definition JUTGamePad.h:41
@ EPortInvalid
Definition JUTGamePad.h:40
JSULink< JUTGamePad > mLink
Definition JUTGamePad.h:255
static CButton mPadButton[4]
Definition JUTGamePad.h:239
void assign()
Definition JUTGamePad.cpp:161
JUTGamePadRecordBase * getPadReplay() const
Definition JUTGamePad.h:105
EWhichStick
Definition JUTGamePad.h:34
@ EMainStick
Definition JUTGamePad.h:35
@ ESubStick
Definition JUTGamePad.h:36
u8 getAnalogB() const
Definition JUTGamePad.h:98
virtual ~JUTGamePad()
Definition JUTGamePad.cpp:35
static u32 read()
Definition JUTGamePad.cpp:82
CStick mSubStick
Definition JUTGamePad.h:251
static void setAnalogMode(u32 mode)
Definition JUTGamePad.h:71
f32 getSubStickValue() const
Definition JUTGamePad.h:95
s16 mPortNum
Definition JUTGamePad.h:253
static u32 sSuppressPadReset
Definition JUTGamePad.h:245
CRumble mRumble
Definition JUTGamePad.h:252
static bool recalibrate(u32 mask)
Definition JUTGamePad.cpp:584
JUTGamePadRecordBase * mPadRecord
Definition JUTGamePad.h:256
void stopMotorWaveHard()
Definition JUTGamePad.h:181
void clear()
Definition JUTGamePad.cpp:63
EClampMode
Definition JUTGamePad.h:47
@ EClampNone
Definition JUTGamePad.h:48
@ EClampStick
Definition JUTGamePad.h:49
@ EClampCircle
Definition JUTGamePad.h:50
bool testTrigger(u32 button) const
Definition JUTGamePad.h:109
bool testButton(u32 button) const
Definition JUTGamePad.h:108
s16 getPortNum() const
Definition JUTGamePad.h:103
static void checkResetSwitch()
Definition JUTGamePad.cpp:255
static PADStatus mPadStatus[4]
Definition JUTGamePad.h:238
f32 getMainStickY() const
Definition JUTGamePad.h:90
JUTGamePadRecordBase * getPadRecord() const
Definition JUTGamePad.h:106
u8 field_0x9c[4]
Definition JUTGamePad.h:259
C3ButtonReset mButtonReset
Definition JUTGamePad.h:258
CButton mButton
Definition JUTGamePad.h:249
void stopMotorHard()
Definition JUTGamePad.h:117
static JSUList< JUTGamePad > mPadList
Definition JUTGamePad.h:236
void update()
Definition JUTGamePad.cpp:208
u32 getRepeat() const
Definition JUTGamePad.h:88
EStickMode
Definition JUTGamePad.h:30
@ EStickMode1
Definition JUTGamePad.h:31
f32 getSubStickX() const
Definition JUTGamePad.h:93
void setButtonRepeat(u32, u32, u32)
Definition JUTGamePad.cpp:577
s8 getErrorStatus() const
Definition JUTGamePad.h:101
bool isPushing3ButtonReset() const
Definition JUTGamePad.h:111
CStick mMainStick
Definition JUTGamePad.h:250
static EStickMode sStickMode
Definition JUTGamePad.h:242
static void clearResetOccurred()
Definition JUTGamePad.h:78
u32 getButton() const
Definition JUTGamePad.h:85
static CStick mPadMStick[4]
Definition JUTGamePad.h:240
static CStick mPadSStick[4]
Definition JUTGamePad.h:241
static void setResetCallback(callbackFn callback, void *arg)
Definition JUTGamePad.h:80
s16 getSubStickAngle() const
Definition JUTGamePad.h:96
JUTGamePad(JUTGamePad::EPadPort port)
Definition JUTGamePad.cpp:21
void stopMotorWave()
Definition JUTGamePad.h:115
f32 getSubStickY() const
Definition JUTGamePad.h:94
u32 getTrigger() const
Definition JUTGamePad.h:86
s8 mErrorStatus
Definition JUTGamePad.h:254
JUTGamePadRecordBase * mPadReplay
Definition JUTGamePad.h:257
static void clearForReset()
Definition JUTGamePad.cpp:274
static s32 sAnalogMode
Definition JUTGamePad.h:246
u8 getAnalogL() const
Definition JUTGamePad.h:99
u8 getAnalogA() const
Definition JUTGamePad.h:97
OSTime mResetHoldStartTime
Definition JUTGamePad.h:260
static int sClampMode
Definition JUTGamePad.h:243
void initList()
Definition JUTGamePad.cpp:44
Definition pad.h:52
s8 err
Definition pad.h:62