FIX94 / Nintendont

A Wii Homebrew Project to play GC Games on Wii and vWii on Wii U
1.94k stars 324 forks source link

Ofiicial GameCube USB gamepad (HORI Battle Pad) issue #923

Closed obibann closed 2 years ago

obibann commented 3 years ago

This GamePad is supposed to be supported because Hid Test sees it and when buttons are pressed, values change.

However, despite of having a folder "controllers" and the file controller.ini on SD root, the gamepad does not work under Nintendont.

But something is strange about this controller.

1) identification problem

On the computer, the gamepad is identified as 0F0D:00DC.

Bus 001 Device 019: ID 0f0d:00dc Hori Co., Ltd HORIPAD S

On HID test 2 devices are listed : 0F0D:00DC and 0F0D:00C1.

When I use a controller.ini file fo 0F0D:00DC, Hid Test tells me it's not the right file. When I use a controller.ini file fo 0F0D:00C1, Hid Test detects the gamepad and I can test the buttons.

2) Nintendont

I tried using 0F0D:00DC and 0F0D:00C1 in controller.ini, the controller is not detected. controller.ini.txt

obibann commented 3 years ago

Hi all,

I tried to build Nintendont with HID debug enabled, but I have no traces in the generated log file ...

What I changed :

in global.h

#define DEBUG_HID 1

What I got :

Nintendont IOS58 v25.32
Built   : Aug  7 2021 13:18:51
Version : 6.496
Game path: /games/The Legend of Zelda Collector's Edition [PZLP01]/game.iso
EXIInit Start
EXI: Trying to open /saves/PZLP.raw
EXI: Trying to open /saves/PZLP_B.raw
EXI: Slot B has been disabled.
Kernel Start
DIP:Apploader, preparing to patch
DIP:DOL Size:3147652 MinOff:0x00003200 MaxOff:0x0031BB80
DIP:DOL EntryPoint::0x80002F90, GameEntry::0x80003254
Patch:Offset:0x00003200 EOffset:0x0031BB80 Length:00318980
Patch:Game ID = 505a4c50
Patch:[SI] applied 19 times
Patch:[AI] applied 17 times
Patch:[DI] applied 41 times
Patch:[OSExceptionInit] skipped (0x0002E968)
Patch:[SetInterruptMask] applied (0x00031488)
Patch:[__OSDispatchInterrupt] applied (0x00031870)
Patch:[__OSResetSWInterruptHandler] applied (0x00032D74)
Patch:[OSGetResetButtonState A] applied (0x00032DE4)
Patch:[__DVDInterruptHandler]: 0x00035818 (0x00035818)
Patch:[PADRead A] applied (0x0003CB40)
Patch:[PADControlMotor B] applied (0x0003CEEC)
Patch:[ARStartDMA] applied (0x0003E330)
Patch:[ARInit] skipped (0x0003E488)
Patch:[__ARHandler] skipped (0x0003E554)
Patch:[__ARChecksize B] applied (0x0003E93C)
Patch:[ARQPostRequest] skipped (0x00040000)
Patch:[GXInit] stw r5,-0x7820(r13) (0x000409D6)
Patch:[PI_FIFO_WP] rlwinm r3,r0,0,3,1 (0x00041F5C)
Patch:[__GXSetVAT A] applied (0x00042C18)
Patch:[GXInitTlutObj B] applied (0x00044D28)
Patch:[GXLoadTlut] skipped (0x00044D60)
Patch:[__fwrite B] applied (0x0004F7FC)
Patch:[EXIImm A] applied (0x000565F8)
Patch:[EXIDMA A] applied (0x000568F4)
Patch:[EXIDMA] ChanLen:00000040
Patch:[EXISync B] applied (0x000569E0)
Patch:[__EXIProbe A] applied (0x00056C74)
Patch:[EXISelect A] applied (0x00056FB0)
Patch:[EXIDeselect A] applied (0x000570DC)
Patch:[EXIntrruptHandler B] applied (0x000571F0)
Patch:[TCIntrruptHandler B] applied (0x000572B8)
Patch:[EXILock A] applied (0x00057770)
Patch:[EXIUnlock A] applied (0x000578BC)
Patch:[CompleteTransfer A] applied (0x00058380)
Patch:[SIEnablePollingInterrupt A] applied (0x000589F0)
Patch:[SIEnablePollingInterrupt A] applied (0x000589F4)
Patch:[SIInit A] applied (0x00058C40)
Patch:[SIInterruptHandler] applied (0x0005864C)
Patch:[SIInterruptHandler] applied (0x00058778)
Patch:[__SITransfer A] applied (0x00058CF4)
Patch:[__SITransfer A] applied (0x00058DDC)
Patch:[SIGetType A] applied (0x000596DC)
Patch:[DSP v5] patched (0x002FBEE0)
Patch:[PADInit] applied (0x0003CB3C)
Patch:[C_MTXPerspective] not found
Patch:[C_MTXLightPerspective] not found
Patch:[__OSInitAudioSystem] not found
Patch:[__DSPHandler] not found
Patch:[PADControlAllMotors] not found
Patch:[PADIsBarrel] not found
Patch:[__PADSetSamplingRate] not found
Patch:[__CARDReadStatus] not found
Patch:[__CARDClearStatus] not found
Patch:[__CARDStat] not found
Patch:[ReadROM] not found
Patch:[__OSReadROM] not found
Patch:Using a EXI Timing of 1900
Jumping to 0x80003254
<< Dolphin SDK - EXI    release build: Apr 17 2003 12:33:17 (0x2301) >>
<< Dolphin SDK - SI release build: Apr 17 2003 12:33:19 (0x2301) >>

Dolphin OS
Kernel built : Apr 17 2003 12:33:06
Console Type : Retail 2
Memory 24 MB
Arena : 0x8032bba0 - 0x817ffce0
<< Dolphin SDK - OS release build: Apr 17 2003 12:33:06 (0x2301) >>
<< Dolphin SDK - DVD    release build: Apr 22 2003 15:49:00 (0x2301) >>
<< Dolphin SDK - AR release build: Apr 17 2003 12:33:55 (0x2301) >>
<< Dolphin SDK - ARQ    release build: Apr 17 2003 12:33:56 (0x2301) >>
<< Dolphin SDK - VI release build: Apr 17 2003 12:33:22 (0x2301) >>
<< Dolphin SDK - GX release build: Apr 21 2003 14:55:46 (0x2301) >>
<< Dolphin SDK - PAD    release build: Apr 17 2003 12:33:44 (0x2301) >>
<< Dolphin SDK - AI release build: Apr 17 2003 12:33:54 (0x2301) >>
<< Dolphin SDK - DSP    release build: Apr 17 2003 12:34:16 (0x2301) >>
Got Shutdown button call
EXI: Saving memory card(s)...Done!
XantheFIN commented 2 years ago

I just ended up in similar fault situation as didn't know better but i have one thing to comment

I accidentally wrote for "Power" button wrong value 2,01

While launching a game it registers Power button as it goes instead of game intro to back Homebrew launcher just as pressing Power button.

0F0D 00C1

Device parameters was used.

I retested and if i keep pressing the actual button while 'incorrect' Power button value, it will register it and wont "power off" and at intro once again wont register anything so it reads during launch at least controller input correctly.

endrift commented 2 years ago

The HORIPAD + Switch also has the PID 00dc. It presents itself ans an Xinput device, for some reason.

XantheFIN commented 2 years ago

Completed? is there a fix for this?

cystbear commented 2 years ago

@endrift did this issue fixed in frames of some other commit? or why closed it?

endrift commented 2 years ago

I'm not the one who closed it.

cystbear commented 2 years ago

I see, it's @carnage702

Currently my Wii with Nintendont and HIDTest 0.6 detected the controller, preparing mapping and will share it soon.

cystbear commented 2 years ago

Still Not working :(

Mac detects the gamepad as

HoriOnMac

HIDTest v 0.6 detects it but with different PID HIDtestv06

I have created two different files with names 00C1_0F0D.ini and 00DC_0F0D.ini but still not working

ini file content

[Switch Wired Game Cube]
VID=0F0D
PID=00DC or 00C1
Polltype=1
DPAD=1
DigitalLR=1
A=0,04
B=0,02
X=0,08
Y=0,01
Z=0,80
L=0,10
R=0,20
S=1,10
Left=2,06
Down=2,04
Right=2,02
Up=2,00
RightUp=2,01
DownRight=2,03
DownLeft=2,05
UpLeft=2,07
StickX=3
StickY=4
CStickX=5
CStickY=6
Power=1,20
LAnalog=1,04
RAnalog=1,08

@carnage702 @endrift could you please hint me with possible direction of fixing this issue?

FailedShack commented 2 years ago

I agree that there is some kind of issue with this controller, my understanding is that it's not purely a Switch Pro controller since it works in HID Test, so this should be reopened.

There is actually a workaround to use this controller, by using a Mayflash Magic-NS 2 adapter. I made a custom config for this controller which I posted here: https://github.com/FIX94/Nintendont/pull/851#issuecomment-1229569455

Demo: https://cdn.discordapp.com/attachments/444261718370156545/1013530777566326895/8mb.video-VSc-f6E40vQA.mp4

endrift commented 2 years ago

I'm not sure about the mode with PID 00c1, but when the mode is 00dc it acts as an XInput controller. It requires a special packet to be sent to it before it will start sending input reports: https://github.com/paroj/xpad/blob/master/xpad.c#L1397-L1401

cystbear commented 2 years ago

wow @FailedShack nice catch, what is the plugin scheme with that "Mayflash Magic-NS 2 adapter"?

on the video is this GameCube game?

FailedShack commented 2 years ago

@endrift I'm not proficient in HID devices, but perhaps it shows itself as two devices at once and that confuses Nintendont? 00DC as an XInput controller and 00C1 (presumably) as a Switch Pro controller?

@cystbear Not sure what you mean by plugin scheme and yeah it is a Gamecube game, Smash Bros Melee. Assuming you had the adapter: Extract controllers.zip in my comment to the root of the SD card. Plug the Battle Pad into the adapter and then that into the Wii. Turn on the Wii. Press and hold the button on the side of the adapter, the LED will change color, repeat until it turns blue (you only need to do this once).

cystbear commented 2 years ago

@FailedShack "plugin scheme" I mean this "Plug the Battle Pad into the adapter and then that into the Wii" thanks

FailedShack commented 2 years ago

@cystbear By plug meaning insert. Insert the end of the controller into the adapter, and the adapter into a USB port on the back of the Wii. Either should work.

cystbear commented 2 years ago

My VID_PID

photo_2022-10-20 23 08 06

cystbear commented 2 years ago

It works https://user-images.githubusercontent.com/412004/197047896-7dc18120-2a37-45ff-b05d-4c9741bfca09.MOV

cystbear commented 2 years ago

@FailedShack I have bought Mayflash Magic-NS 2

Everything works for me.

What I defined Mayflash Magic-NS 2 works without any additional .ini file and my own .ini file ignored. I think fo reason my VID_PID different than HIDTest shows, for this reason I can not override that settings.

I have set adapter to sky blue mode.

I have swapped A <=> B via The buttons AB and XY can be switched (remapped) by pressing and holding START + A/B for 3 seconds.

Only one question left: is it possible to inverse C-stick by X-axis, it's game (Zelda WindWaker) issue. But is any way to invert it back via config?

Gonefishingonewrong commented 1 year ago

@cystbear @FailedShack I'm late to this whole conversation but I just wanted to know if the light version of the MAYFLASH adapter or the first revision of the adapter works for nintendont. Along with this, does the controller work in the nintendont menu, or even the homebrew menu? Sorry for the inconvenience.

cystbear commented 1 year ago

@Gonefishingonewrong I did not experimented, I bought exactly that MYFLASH which @FailedShack mentioned, probably higher models should work as well.

No, controller works only in GC game. For navigation in nintendont you should use wiimote.

Gonefishingonewrong commented 1 year ago

Thanks for the help, I bought the adapter and it is working flawlessly.

Invictaz commented 8 months ago

Strangely enough the Cronus Zen identifies as a Horipad S in Windows (0F0D:00C1) in Nintendo Switch emulation output mode (set via Zen Studio) and it is an adapter itself. Luckily it has the option to be set to Dualshock 3 or Dualshock 4 mode as output but I was hoping it could be set to Nintendo Switch mode on Nintendont. It seems not as most of you guys use a Mayflash adapter. Using a mayflash adapter to have a Cronus adapter working is a bit weird.

YuricornC commented 6 months ago

@FailedShack Thank you very much for solving the problem. I bought this adapter, used your file and everything works great. @cystbear Thanks for the reminder about the ability to reassign buttons.