JUtility debug (#3020)

This commit is contained in:
Jcw87
2026-01-05 04:07:04 -08:00
committed by GitHub
parent e15ba03caa
commit 5b987084ea
39 changed files with 494 additions and 467 deletions
+44 -29
View File
@@ -80,7 +80,7 @@ u32 JUTGamePad::sRumbleSupported;
u32 JUTGamePad::read() {
sRumbleSupported = PADRead(mPadStatus);
switch (sClampMode) {
switch (getClampMode()) {
case EClampStick:
PADClamp(mPadStatus);
break;
@@ -115,7 +115,7 @@ u32 JUTGamePad::read() {
}
}
for (JSUListIterator<JUTGamePad> pad(mPadList.getFirst()); pad != mPadList.getEnd(); pad++) {
for (JSUListIterator<JUTGamePad> pad(mPadList.getFirst()); pad != mPadList.getEnd(); ++pad) {
if (pad->getPadReplay() != NULL && pad->getPadReplay()->isActive()) {
PADStatus status;
pad->getPadReplay()->getStatus(&status);
@@ -162,7 +162,7 @@ void JUTGamePad::assign() {
}
}
bool JUTGamePad::CRumble::mStatus[4];
u8 JUTGamePad::CRumble::mStatus[4];
u32 JUTGamePad::CRumble::mEnabled;
@@ -246,6 +246,7 @@ JSUList<JUTGamePadLongPress> JUTGamePadLongPress::sPatternList(false);
void JUTGamePad::checkResetSwitch() {
if (!JUTGamePad::C3ButtonReset::sResetOccurred) {
int unused;
if (OSGetResetSwitchState()) {
C3ButtonReset::sResetSwitchPushing = true;
} else {
@@ -284,14 +285,7 @@ void JUTGamePad::CButton::clear() {
}
void JUTGamePad::CButton::update(const PADStatus* padStatus, u32 stickStatus) {
u32 buttons;
if (padStatus != NULL) {
buttons = padStatus->button;
} else {
buttons = 0;
}
buttons = stickStatus | buttons;
u32 buttons = stickStatus | (padStatus != NULL ? padStatus->button : 0);
mRepeat = 0;
if (mRepeatDelay != 0 && mRepeatMask != 0) {
@@ -347,7 +341,7 @@ void JUTGamePad::CStick::clear() {
u32 JUTGamePad::CStick::update(s8 x, s8 y, JUTGamePad::EStickMode mode,
JUTGamePad::EWhichStick stick, u32 buttons) {
s32 clamp;
switch (sClampMode) {
switch (getClampMode()) {
case EClampStick:
clamp = stick == EMainStick ? 54 : 42;
break;
@@ -385,8 +379,7 @@ u32 JUTGamePad::CStick::update(s8 x, s8 y, JUTGamePad::EStickMode mode,
}
}
u32 button_shift = stick == EMainStick ? 0x18 : 0x10;
return getButton(buttons >> button_shift);
return getButton(buttons >> (stick == EMainStick ? 0x18 : 0x10));
}
u32 JUTGamePad::CStick::getButton(u32 buttons) {
@@ -436,8 +429,13 @@ void JUTGamePad::CRumble::startMotor(int port) {
}
void JUTGamePad::CRumble::stopMotor(int port, bool hard_stop) {
u8 command;
if (isEnabledPort(port)) {
u8 command = hard_stop ? PAD_MOTOR_STOP_HARD : PAD_MOTOR_STOP;
if (hard_stop) {
command = PAD_MOTOR_STOP_HARD;
} else {
command = PAD_MOTOR_STOP;
}
PADControlMotor(port, command);
mStatus[port] = false;
}
@@ -484,7 +482,7 @@ void JUTGamePad::CRumble::update(s16 port) {
if (status) {
stopMotor(port, hard_stop);
} else if (hard_stop) {
stopMotorHard(port);
stopMotor(port, true);
}
}
}
@@ -518,18 +516,18 @@ void JUTGamePad::CRumble::startPatternedRumble(void* data, JUTGamePad::CRumble::
}
void JUTGamePad::CRumble::stopPatternedRumble(s16 port) {
JUT_ASSERT(1341, 0 <= port && port < 4);
mLength = 0;
stopMotorHard(port);
}
void JUTGamePad::CRumble::stopPatternedRumbleAtThePeriod() {
u32 r31 = mFrame % mFrameCount;
mLength = (mFrame + mFrameCount - 1) % mFrameCount;
}
JUTGamePad* JUTGamePad::getGamePad(int port) {
JSUListIterator<JUTGamePad> pad(mPadList.getFirst());
for (; pad != mPadList.getEnd(); pad++) {
for (JSUListIterator<JUTGamePad> pad(mPadList.getFirst()); pad != mPadList.getEnd(); ++pad) {
if (port == pad->mPortNum) {
return pad.getObject();
}
@@ -539,20 +537,21 @@ JUTGamePad* JUTGamePad::getGamePad(int port) {
}
void JUTGamePad::CRumble::setEnabled(u32 mask) {
mask = (mask & (PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT));
for (int i = 0; i < 4; i++) {
if ((mEnabled & channel_mask[i]) == 0) {
if (mStatus[i]) {
stopMotor(i, false);
stopMotor(i);
}
JUTGamePad* pad = getGamePad(i);
if (pad != NULL) {
pad->mRumble.stopPatternedRumble(pad->mPortNum);
pad->stopMotorWaveHard();
}
}
}
mEnabled = (mask & (PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT));
mEnabled = mask;
}
void JUTGamePad::CButton::setRepeat(u32 mask, u32 delay, u32 rate) {
@@ -563,6 +562,13 @@ void JUTGamePad::CButton::setRepeat(u32 mask, u32 delay, u32 rate) {
mRepeatRate = rate;
}
void JUTGamePad::setButtonRepeat(u32 mask, u32 delay, u32 rate) {
mButton.setRepeat(mask, delay, rate);
if (mPortNum >= 0) {
mPadButton[mPortNum].setRepeat(mask, delay, rate);
}
}
bool JUTGamePad::recalibrate(u32 mask) {
for (int i = 0; i < 4; i++) {
if (sSuppressPadReset & channel_mask[i]) {
@@ -570,16 +576,25 @@ bool JUTGamePad::recalibrate(u32 mask) {
}
}
return PADRecalibrate(mask);
BOOL result = PADRecalibrate(mask);
return result;
}
void JUTGamePadLongPress::checkCallback(int port, u32 hold_time) {
if (port >= 0 && hold_time >= mThreshold) {
field_0x11 = true;
field_0x48[port] = true;
if (port < 0) {
return;
}
if (mCallback != NULL) {
mCallback(port, this, field_0x50);
}
JUT_ASSERT(1673, 0 <= port && port < 4);
if (hold_time < mThreshold) {
return;
}
field_0x11 = true;
field_0x48[port] = true;
if (mCallback != NULL) {
mCallback(port, this, field_0x50);
}
}