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
65 static void checkResetSwitch();
66 static void clearForReset();
67 static JUTGamePad* getGamePad(int port);
68 static bool recalibrate(u32 mask);
69
70 static void setAnalogMode(u32 mode) {
73 }
74
76
81
82 u32 getButton() const { return mButton.mButton; }
83 u32 getTrigger() const { return mButton.mTrigger; }
84 f32 getMainStickX() const { return mMainStick.mPosX; }
85 f32 getMainStickY() const { return mMainStick.mPosY; }
88 f32 getSubStickX() const { return mSubStick.mPosX; }
89 f32 getSubStickY() const { return mSubStick.mPosY; }
92 u8 getAnalogA() const { return mButton.mAnalogA; }
93 u8 getAnalogB() const { return mButton.mAnalogB; }
94 u8 getAnalogL() const { return mButton.mAnalogL; }
95 u8 getAnalogR() const { return mButton.mAnalogR; }
96 s8 getErrorStatus() const { return mErrorStatus; }
97
98 s16 getPortNum() const { return mPortNum; }
99
102
103 bool testTrigger(u32 button) const { return mButton.mTrigger & button; }
104
106 return mPortNum != EPortInvalid && mButtonReset.mReset != false;
107 }
108
112
113 static s8 getPortStatus(EPadPort port) {
114 JUT_ASSERT(360, 0 <= port && port < 4);
115 return mPadStatus[port].err;
116 }
117
118 struct CButton {
119 CButton() { clear(); }
120 void clear();
121 void update(const PADStatus* padStatus, u32 stickStatus);
122 void setRepeat(u32 mask, u32 delay, u32 rate);
123
124 /* 0x00 */ u32 mButton;
125 /* 0x04 */ u32 mTrigger; // Pressed Buttons
126 /* 0x08 */ u32 mRelease; // Released Buttons
127 /* 0x0C */ u8 mAnalogA;
128 /* 0x0D */ u8 mAnalogB;
129 /* 0x0E */ u8 mAnalogL;
130 /* 0x0F */ u8 mAnalogR;
131 /* 0x10 */ f32 mAnalogLf;
132 /* 0x14 */ f32 mAnalogRf;
133 /* 0x18 */ u32 mRepeat;
134 /* 0x1C */ u32 mRepeatCount;
135 /* 0x20 */ u32 mRepeatStart;
136 /* 0x24 */ u32 mRepeatMask;
137 /* 0x28 */ u32 mRepeatDelay;
138 /* 0x2C */ u32 mRepeatRate;
139 }; // Size: 0x30
140
142 C3ButtonReset() { mReset = false; }
143
147 static void* sCallbackArg;
150 static bool sResetOccurred;
152
153 /* 0x0 */ bool mReset;
154 }; // Size: 0x4
155
156 struct CStick {
159
160 CStick() { clear(); }
161 void clear();
162 void clear(JUTGamePad* pad);
164 u32 buttons);
165 u32 getButton(u32 buttons);
166
167 /* 0x0 */ f32 mPosX;
168 /* 0x4 */ f32 mPosY;
169 /* 0x8 */ f32 mValue;
170 /* 0xC */ s16 mAngle;
171 /* 0xE */ s8 mRawX;
172 /* 0xF */ s8 mRawY;
173 }; // Size: 0x10
174
176
177 struct CRumble {
178 CRumble(JUTGamePad* pad) { clear(pad); }
179
180 static u32 sChannelMask[4];
181 static bool mStatus[4];
182 static u32 mEnabled;
183
184 enum ERumble {
185 VAL_0 = 0,
186 VAL_1 = 1,
187 VAL_2 = 2,
188 };
189
190 void clear();
191 void clear(JUTGamePad* pad);
192 static void startMotor(int port);
193 static void stopMotor(int port, bool hard_stop);
194 void update(s16 port);
195 void triggerPatternedRumble(u32 length);
196 void startPatternedRumble(void* data, ERumble rumble, u32 length);
197 void stopPatternedRumble(s16 port);
199 static void setEnabled(u32 mask);
200
201 void stopMotorHard(int port) { stopMotor(port, true); }
202
203 static bool isEnabled(u32 mask) { return mEnabled & mask; }
204
205 static bool isEnabledPort(int port) {
206 JUT_ASSERT(250, 0 <= port && port < 4);
207 return isEnabled(sChannelMask[port]);
208 }
209
210 /* 0x00 */ u32 mFrame;
211 /* 0x04 */ u32 mLength;
212 /* 0x08 */ u8* mPattern;
213 /* 0x0C */ u32 mFrameCount;
214 /* 0x10 */ u8* field_0x10;
215 }; // Size: 0x14
216
217 void startMotorWave(void* data, CRumble::ERumble rumble, u32 length) {
218 mRumble.startPatternedRumble(data, rumble, length);
219 }
220
222 static bool mListInitialized;
228 static int sClampMode;
229 static u8 mPadAssign[4];
233
234 /* 0x18 */ CButton mButton;
235 /* 0x48 */ CStick mMainStick;
236 /* 0x58 */ CStick mSubStick;
237 /* 0x68 */ CRumble mRumble;
238 /* 0x7C */ s16 mPortNum;
239 /* 0x7E */ s8 mErrorStatus;
244 /* 0x9C */ u8 field_0x9c[4];
246 /* 0xA8 */ u8 field_0xa8;
247};
248
255 void checkCallback(int port, u32 hold_time);
256
257 u32 getMaskPattern() const { return mMaskPattern; }
258 u32 getPattern() const { return mPattern; }
259 bool isValid() const { return mValid; }
260
261 /* 0x00 */ u8 field_0x0[0x10];
262 /* 0x10 */ bool mValid;
263 /* 0x11 */ bool field_0x11;
264 /* 0x14 */ u32 mPattern;
265 /* 0x18 */ u32 mMaskPattern;
266 /* 0x1C */ u32 mThreshold;
267 /* 0x20 */ bool mLongPressStatus[4];
268 /* 0x28 */ OSTime mStartHoldTime[4];
269 /* 0x48 */ bool field_0x48[4];
270 /* 0x4C */ void (*mCallback)(s32, JUTGamePadLongPress*, s32);
271 /* 0x50 */ s32 field_0x50;
272};
273
274#endif /* JUTGAMEPAD_H */
u32 mode
Definition GXTev.c:56
void(* callbackFn)(int, void *)
Definition JUTGamePad.h:8
Definition JKRDisposer.h:12
Definition JSUList.h:96
static void stick(b_gos_class *i_this)
Definition d_a_b_gos.cpp:141
s64 OSTime
Definition os.h:19
void PADSetAnalogMode(u32 mode)
Definition Pad.c:732
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
double x double x
Definition e_atan2.c:58
double u
Definition e_pow.c:163
static void callback(u32 param_0)
Definition OSExec.c:308
Definition JUTGamePad.h:253
u32 getPattern() const
Definition JUTGamePad.h:258
static JSUList< JUTGamePadLongPress > sPatternList
Definition JUTGamePad.h:254
bool field_0x48[4]
Definition JUTGamePad.h:269
bool mLongPressStatus[4]
Definition JUTGamePad.h:267
bool field_0x11
Definition JUTGamePad.h:263
void checkCallback(int port, u32 hold_time)
Definition JUTGamePad.cpp:578
u32 mThreshold
Definition JUTGamePad.h:266
u8 field_0x0[0x10]
Definition JUTGamePad.h:261
bool mValid
Definition JUTGamePad.h:262
u32 mPattern
Definition JUTGamePad.h:264
u32 mMaskPattern
Definition JUTGamePad.h:265
bool isValid() const
Definition JUTGamePad.h:259
OSTime mStartHoldTime[4]
Definition JUTGamePad.h:268
void(* mCallback)(s32, JUTGamePadLongPress *, s32)
Definition JUTGamePad.h:270
u32 getMaskPattern() const
Definition JUTGamePad.h:257
s32 field_0x50
Definition JUTGamePad.h:271
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:141
static s32 sResetOccurredPort
Definition JUTGamePad.h:149
static OSTime sThreshold
Definition JUTGamePad.h:148
static u32 sResetMaskPattern
Definition JUTGamePad.h:145
static callbackFn sCallback
Definition JUTGamePad.h:146
static bool sResetSwitchPushing
Definition JUTGamePad.h:151
C3ButtonReset()
Definition JUTGamePad.h:142
static bool sResetOccurred
Definition JUTGamePad.h:150
static u32 sResetPattern
Definition JUTGamePad.h:144
static void * sCallbackArg
Definition JUTGamePad.h:147
bool mReset
Definition JUTGamePad.h:153
Definition JUTGamePad.h:118
u32 mRepeatStart
Definition JUTGamePad.h:135
u32 mRepeatRate
Definition JUTGamePad.h:138
u32 mButton
Definition JUTGamePad.h:124
u8 mAnalogL
Definition JUTGamePad.h:129
void clear()
Definition JUTGamePad.cpp:272
u8 mAnalogB
Definition JUTGamePad.h:128
u32 mRepeatCount
Definition JUTGamePad.h:134
u32 mRepeatMask
Definition JUTGamePad.h:136
f32 mAnalogRf
Definition JUTGamePad.h:132
u32 mTrigger
Definition JUTGamePad.h:125
u8 mAnalogR
Definition JUTGamePad.h:130
f32 mAnalogLf
Definition JUTGamePad.h:131
u32 mRepeat
Definition JUTGamePad.h:133
void setRepeat(u32 mask, u32 delay, u32 rate)
Definition JUTGamePad.cpp:560
u8 mAnalogA
Definition JUTGamePad.h:127
u32 mRelease
Definition JUTGamePad.h:126
u32 mRepeatDelay
Definition JUTGamePad.h:137
CButton()
Definition JUTGamePad.h:119
Definition JUTGamePad.h:177
static void stopMotor(int port, bool hard_stop)
Definition JUTGamePad.cpp:440
CRumble(JUTGamePad *pad)
Definition JUTGamePad.h:178
static bool isEnabled(u32 mask)
Definition JUTGamePad.h:203
static u32 mEnabled
Definition JUTGamePad.h:182
void stopMotorHard(int port)
Definition JUTGamePad.h:201
static bool isEnabledPort(int port)
Definition JUTGamePad.h:205
void stopPatternedRumble(s16 port)
Definition JUTGamePad.cpp:522
u8 * field_0x10
Definition JUTGamePad.h:214
void startPatternedRumble(void *data, ERumble rumble, u32 length)
Definition JUTGamePad.cpp:504
static void startMotor(int port)
Definition JUTGamePad.cpp:433
u32 mLength
Definition JUTGamePad.h:211
ERumble
Definition JUTGamePad.h:184
@ VAL_1
Definition JUTGamePad.h:186
@ VAL_2
Definition JUTGamePad.h:187
@ VAL_0
Definition JUTGamePad.h:185
u8 * mPattern
Definition JUTGamePad.h:212
u32 mFrameCount
Definition JUTGamePad.h:213
void stopPatternedRumbleAtThePeriod()
Definition JUTGamePad.cpp:527
static bool mStatus[4]
Definition JUTGamePad.h:181
static u32 sChannelMask[4]
Definition JUTGamePad.h:6
static void setEnabled(u32 mask)
Definition JUTGamePad.cpp:543
void clear()
Definition JUTGamePad.cpp:416
u32 mFrame
Definition JUTGamePad.h:210
void triggerPatternedRumble(u32 length)
Definition JUTGamePad.cpp:497
Definition JUTGamePad.h:156
f32 mValue
Definition JUTGamePad.h:169
void clear()
Definition JUTGamePad.cpp:342
void clear(JUTGamePad *pad)
s8 mRawY
Definition JUTGamePad.h:172
f32 mPosY
Definition JUTGamePad.h:168
f32 mPosX
Definition JUTGamePad.h:167
static f32 sPressPoint
Definition JUTGamePad.h:157
CStick()
Definition JUTGamePad.h:160
s16 mAngle
Definition JUTGamePad.h:170
static f32 sReleasePoint
Definition JUTGamePad.h:158
s8 mRawX
Definition JUTGamePad.h:171
Definition JUTGamePad.h:28
void stopMotor()
Definition JUTGamePad.h:110
static s8 getPortStatus(EPadPort port)
Definition JUTGamePad.h:113
void stopPatternedRumble()
Definition JUTGamePad.h:63
static bool mListInitialized
Definition JUTGamePad.h:222
static u32 sRumbleSupported
Definition JUTGamePad.h:232
static u8 mPadAssign[4]
Definition JUTGamePad.h:229
static BOOL init()
Definition JUTGamePad.cpp:55
static JUTGamePad * getGamePad(int port)
Definition JUTGamePad.cpp:531
f32 getMainStickX() const
Definition JUTGamePad.h:84
void startMotorWave(void *data, CRumble::ERumble rumble, u32 length)
Definition JUTGamePad.h:217
void checkResetCallback(OSTime holdTime)
Definition JUTGamePad.cpp:183
f32 getMainStickValue() const
Definition JUTGamePad.h:86
u8 field_0xa8
Definition JUTGamePad.h:246
u8 getAnalogR() const
Definition JUTGamePad.h:95
s16 getMainStickAngle() const
Definition JUTGamePad.h:87
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:240
static CButton mPadButton[4]
Definition JUTGamePad.h:224
void assign()
Definition JUTGamePad.cpp:153
JUTGamePadRecordBase * getPadReplay() const
Definition JUTGamePad.h:100
EWhichStick
Definition JUTGamePad.h:34
@ EMainStick
Definition JUTGamePad.h:35
@ ESubStick
Definition JUTGamePad.h:36
u8 getAnalogB() const
Definition JUTGamePad.h:93
virtual ~JUTGamePad()
Definition JUTGamePad.cpp:35
static u32 read()
Definition JUTGamePad.cpp:80
CStick mSubStick
Definition JUTGamePad.h:236
static void setAnalogMode(u32 mode)
Definition JUTGamePad.h:70
f32 getSubStickValue() const
Definition JUTGamePad.h:90
s16 mPortNum
Definition JUTGamePad.h:238
static u32 sSuppressPadReset
Definition JUTGamePad.h:230
CRumble mRumble
Definition JUTGamePad.h:237
static bool recalibrate(u32 mask)
Definition JUTGamePad.cpp:568
JUTGamePadRecordBase * mPadRecord
Definition JUTGamePad.h:241
void stopMotorWaveHard()
Definition JUTGamePad.h:175
void clear()
Definition JUTGamePad.cpp:61
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:103
s16 getPortNum() const
Definition JUTGamePad.h:98
static void checkResetSwitch()
Definition JUTGamePad.cpp:249
static PADStatus mPadStatus[4]
Definition JUTGamePad.h:223
f32 getMainStickY() const
Definition JUTGamePad.h:85
JUTGamePadRecordBase * getPadRecord() const
Definition JUTGamePad.h:101
u8 field_0x9c[4]
Definition JUTGamePad.h:244
C3ButtonReset mButtonReset
Definition JUTGamePad.h:243
CButton mButton
Definition JUTGamePad.h:234
void stopMotorHard()
Definition JUTGamePad.h:111
static JSUList< JUTGamePad > mPadList
Definition JUTGamePad.h:221
void update()
Definition JUTGamePad.cpp:202
EStickMode
Definition JUTGamePad.h:30
@ EStickMode1
Definition JUTGamePad.h:31
f32 getSubStickX() const
Definition JUTGamePad.h:88
s8 getErrorStatus() const
Definition JUTGamePad.h:96
bool isPushing3ButtonReset() const
Definition JUTGamePad.h:105
CStick mMainStick
Definition JUTGamePad.h:235
static EStickMode sStickMode
Definition JUTGamePad.h:227
static void clearResetOccurred()
Definition JUTGamePad.h:75
u32 getButton() const
Definition JUTGamePad.h:82
static CStick mPadMStick[4]
Definition JUTGamePad.h:225
static CStick mPadSStick[4]
Definition JUTGamePad.h:226
static void setResetCallback(callbackFn callback, void *arg)
Definition JUTGamePad.h:77
s16 getSubStickAngle() const
Definition JUTGamePad.h:91
JUTGamePad(JUTGamePad::EPadPort port)
Definition JUTGamePad.cpp:21
void stopMotorWave()
Definition JUTGamePad.h:109
f32 getSubStickY() const
Definition JUTGamePad.h:89
u32 getTrigger() const
Definition JUTGamePad.h:83
s8 mErrorStatus
Definition JUTGamePad.h:239
JUTGamePadRecordBase * mPadReplay
Definition JUTGamePad.h:242
static void clearForReset()
Definition JUTGamePad.cpp:267
static s32 sAnalogMode
Definition JUTGamePad.h:231
u8 getAnalogL() const
Definition JUTGamePad.h:94
u8 getAnalogA() const
Definition JUTGamePad.h:92
OSTime mResetHoldStartTime
Definition JUTGamePad.h:245
static int sClampMode
Definition JUTGamePad.h:228
void initList()
Definition JUTGamePad.cpp:44
Definition pad.h:52
s8 err
Definition pad.h:62