Emulator Issues #4731
closedWiimote disconnects in Donkey Kong Country Returns
Added by edolambe over 13 years ago.
0%
Description
What's the problem?
i got the wiimote disconnected just as i start the game donkey kong country returns. if i press alt+f5 to reconnect the controller, it disconnets again in just a few seconds.
Dolphin version with the problem (as it appears in the title bar, Ex.: "R
4779" or "R 6403M"):
R7683
Operating system and version:
32-bit or 64-bit:
Windows 7 x64
Updated by William79371 over 13 years ago
Right-click on the game and press properties and Disable Wiimote speaker.
Updated by AnnonceCroissant over 13 years ago
I disabled wiimote speaker in the game properties.
I also get the same problem : disconnection of the real wiimote right after choosing a new game. Windows 7 x64 ms bluetooth stack, official dolphin 3.0
Updated by AnnonceCroissant over 13 years ago
Update previous comment : I've got an official/not fake "Wiimote plus" (wiimote with integrated motion plus), speaker disabled.
I can press A+B to start the game, choose the new game box between the 3 available, and right after I get "Wiimote disconnected" message
Updated by pyapur over 13 years ago
I had the same problem, It seems to get solved by selectin LLE sound, the game then don´t run smoothly because of this aproach, but the wiimote stops disconecting every minute or stage/screen change. Try with that and report back.
I think it is directly related to the wiimote speaker having problems when connected on HLE, because even disabling the speaker there is sound coming out of it.
Updated by AnnonceCroissant over 13 years ago
Ok, LLE solved the disconnection problem.
But there are still the same sounds (short occasional crackling sounds) coming out from the wiimote even when disabling the speaker.
I'm starting to wonder if disabling the speaker has something to do with disconnection... next test : LLE with speaker enabled.
Updated by pyapur over 13 years ago
Thats something for developers to shed some light into the status of this option. It seems to me the disable wiimote speaker option it´s not working, It has something to do in the internals of the emulator, the wiimote speaker seems to be integrated into the core now and is necesary for a correct emulation. But then again, a developer knows better.
For now, lot of games need LLE for preventing wiimote disconnects, and this options is a lot heavier than HLE. So It seems important for the usability of the emulator to improve HLE stability or LLE speed (improving low level emulation speed would be not the easy option ;-D).
Dolphin 3.0 has this problem too, it all goes back to when wiimote speaker started to be supported.
Maybe developers can find a bug on the HLE routines not present on the LLE ones, or a missing requeriment.
Developers are doing a great job with this emulator and is incredible to see it improving every day, is amazing to see how they commit to the proyect and the results. So this little regresions are natural and makes us remember and take concious the hard work they are doing.
Keep up the good job.
Updated by AnnonceCroissant over 13 years ago
Well, I thought I couldn't figure anything from looking at the code... in fact I could : "Disabling Wiimote speakers" is coded as "changing a wiimote "interval" so that speaker works" - it's in no way turning off anything.
I did a find in files looking to where was used the boolean linked to the "disable speaker checkbox".
Except for declaration, the boolean bDisableWiimoteSpeaker is used ONLY in 2 places in the code - and ONLY to change some kind of "interval" :
I copy paste the 2 spots :
// 1st place : Source\Core\Core\Src\HW\SystemTimers.cpp
// in void Init()
CPU_CORE_CLOCK = 729000000u;
if (!DSP::GetDSPEmulator()->IsLLE())
DSP_PERIOD = (int)(GetTicksPerSecond() * 0.003f);
// AyuanX: TO BE TWEAKED
// Now the 1500 is a pure assumption
// We need to figure out the real frequency though
// FIXME: does Wiimote Speaker support really require a different interval? (issue 4608)
const int interval = SConfig::GetInstance().m_LocalCoreStartupParameter.
bDisableWiimoteSpeaker ? 1250 : 1500;
const int fields = SConfig::GetInstance().m_LocalCoreStartupParameter.
bVBeam ? 2 : 1;
IPC_HLE_PERIOD = GetTicksPerSecond() / (interval * fields);
//2nd place : Source\Core\Core\Src\IPC_HLE\WII_IPC_HLE_Device_usb.cpp
// in u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update()
// line below starts the comment I found and the bit of code :
// The Real Wiimote sends report every ~6.66ms (150 Hz).
// However, we don't actually reach here at dependable intervals, so we
// instead just timeslice in such a way that makes the stack think we have
// perfect "radio quality" (WPADGetRadioSensitivity) and yet still have some
// idle time.
// Somehow, Dolphin's Wiimote Speaker support requires using an update interval
// of 5ms (200 Hz) for its output to work. This increased frequency tends to
// fill the ACL queue (even) quicker than it can be processed by Dolphin,
// especially during simultaneous requests involving many (emulated) Wiimotes...
// Thus, we only use that interval when the option is enabled. See issue 4608.
const u64 interval = SystemTimers::GetTicksPerSecond() / (SConfig::GetInstance().
m_LocalCoreStartupParameter.bDisableWiimoteSpeaker ? 150 : 200);
const u64 each_wiimote_interval = interval / m_WiiMotes.size();
const u64 now = CoreTiming::GetTicks();
if (now - m_last_ticks > each_wiimote_interval)
{
static int wiimote_to_update = 0;
if (m_WiiMotes[wiimote_to_update].IsConnected())
{
NetPlay_WiimoteUpdate(wiimote_to_update);
Wiimote::Update(wiimote_to_update);
}
wiimote_to_update = (wiimote_to_update + 1) % m_WiiMotes.size();
m_last_ticks = now;
}
SendEventNumberOfCompletedPackets();
return packet_transferred;
Updated by pyapur over 13 years ago
For the comments it looks like they are trying to make it work without without ofcial documentation ( like many other achived solutions), but the diferences between these codes may have something to do with the wii mote disconnecting. Lets wait for a developer to take a look at it.
Updated by AnnonceCroissant over 13 years ago
So the only thing the checkbox is changing is :
1st) the IPC_HLE_PERIOD = GetTicksPerSecond() / (interval * fields);
That can be understood as IPC_HLE_PERIOD = "Speed of wii" / "interval*vbeam"
where interval = 1250 when "disable speaker" is checked
and where interval = 1500 when "disable speaker" is unchecked
2nd) the "each_wiimote_interval" is equal to = ("Speed of wii" / "interval")/"number of wiimotes"
where interval = 150 when "disable speaker" is checked
and where interval = 200 when "disable speaker" is unchecked
"each wiimote interval" is then used to "update" the wiimotes. But the code doesn't seem clear to me. (looking quite buggy or illogic).
Updated by pyapur over 13 years ago
Neither is clear to me, but aparently the problem is they cant get the timing acurrately because of all the emulation involved, maybe it has something to do or derived in the option "LLE on thread", not only to unload from the main emulation, but for more accurately timing the intervals, dont know, I can only speculate.
If the first code is used by HLE and the second one is used by LLE (HW as in hardware), then maybe puting the values of LLE on the HLE code could be an interesting experiment, or at last trying with these timers.But then again, probably it has nothing to do with this and we are way of the solution.
Updated by pyapur over 13 years ago
Im going to check this new version, many changes in the config dialogs, and developer NeoBrainX overlooks disable wiimote option in ini files as working, Also states that disabling it globaly could be posible. So the code shuld be right.
Updated by paavolah over 13 years ago
Looks like wiimote speaker causes problems when using HLE.
Hopefully we would be given a chance to disable the wiimote speaker globally.
Updated by skidau about 13 years ago
- Status changed from New to Work started
Please test out the builds in this branch and post your results:
http://code.google.com/p/dolphin-emu/source/detail?r=ae9d8dc30a66525ce2ef5a93ca01732d19bcad51
Updated by skidau about 13 years ago
- Status changed from Work started to Fixed
Fixed by r0ceb3cba36a9
Updated by zeiramsquare almost 13 years ago
This very issue is still taking place for me on 3.0-223-dirty
Only with DSP HLE emulation.
Updated by anttihaapalainen1 almost 13 years ago
Wiimote (a copy one) still disconnects when HLE audio is used. I've seen it in
-Donkey Kong Country Returns
-Zumba Fitness 2
New Super Mario Bros works nicely, no disconnection problems. So I think the controller is ok. Problem can be avoided with using LLE, but there is not enough horsepower in my system for LLE to sound good...
Ubuntu 11.10 64bit - Dolphin 3.0-421
Updated by anewpage.media almost 13 years ago
If "switch to LLE" is the solution, then that isn't a solution. LLE will create frame drops for anyone.
Updated by danialhorton almost 13 years ago
nah, not if you buy decent computer hardware and know how to overclock :D
the real problem is dolphin lacks a HLE genius to turn what the team have learned about the DSP into high level emulation.
Updated by Lazypeanutx3 almost 12 years ago
change to emulated wiiremote instead of real
Updated by wespipes69 almost 12 years ago
Do not post in dead, closed threads, especially with the wrong solution.
Updated by eats777 almost 12 years ago
I am still having a problem on 3.5, as well as 3.0. I have a real wiimote, it connects fine until i load up skyward sword it disconnects about 10 seconds in when it calibrates the wiimote. i have tried LLE, disable speaker, everything. I still can't get it to work.