Fixed channel loading from the System Menu. Also gave the menu a speed up by increasing the IPC_HLE_PERIOD.

After launching a channel, the wiimote has to be disconnected and reconnected for it to work.  The same also has to be done when returning back to the menu.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6202 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
skidau 2010-09-14 12:32:02 +00:00
parent 5c4c8ec07a
commit 4ec8f97154
4 changed files with 18 additions and 30 deletions

View File

@ -173,9 +173,11 @@ void AudioDMACallback(u64 userdata, int cyclesLate)
void IPC_HLE_UpdateCallback(u64 userdata, int cyclesLate)
{
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii)
{
WII_IPC_HLE_Interface::Update();
CoreTiming::ScheduleEvent(IPC_HLE_PERIOD - cyclesLate, et_IPC_HLE);
}
}
void VICallback(u64 userdata, int cyclesLate)
{
@ -255,12 +257,12 @@ void Init()
DSP_PERIOD = (int)(GetTicksPerSecond() * 0.003f);
// AyuanX: TO BE TWEAKED
// Now the 15000 is a pure assumption
// Now the 1500 is a pure assumption
// We need to figure out the real frequency though
// PS: When this period is tweaked, the FreqDividerMote
// in WII_IPC_HLE_Device_usb.cpp should also be tweaked accordingly
// to guarantee WiiMote updates at a fixed 100Hz
IPC_HLE_PERIOD = GetTicksPerSecond() / 15000;
IPC_HLE_PERIOD = GetTicksPerSecond() / 1500;
}
else
{

View File

@ -137,6 +137,7 @@ void SetDefaultContentFile(const std::string& _rFilename)
if (pDevice)
pDevice->LoadWAD(_rFilename);
}
void ES_DIVerify(u8 *_pTMD, u32 _sz)
{
CWII_IPC_HLE_Device_es* pDevice = (CWII_IPC_HLE_Device_es*)AccessDeviceByID(GetDeviceIDByName(std::string("/dev/es")));
@ -448,14 +449,6 @@ void Update()
UpdateDevices();
if (reply_queue.size())
{
WII_IPCInterface::GenerateReply(reply_queue.front());
INFO_LOG(WII_IPC_HLE, "<<-- Reply to IPC Request @ 0x%08x", reply_queue.front());
reply_queue.pop();
return;
}
if (request_queue.size())
{
WII_IPCInterface::GenerateAck(request_queue.front());
@ -468,6 +461,13 @@ void Update()
Dolphin_Debugger::PrintCallstack(LogTypes::WII_IPC_HLE, LogTypes::LDEBUG);
#endif
}
if (reply_queue.size())
{
WII_IPCInterface::GenerateReply(reply_queue.front());
INFO_LOG(WII_IPC_HLE, "<<-- Reply to IPC Request @ 0x%08x", reply_queue.front());
reply_queue.pop();
}
}
void UpdateDevices()

View File

@ -437,13 +437,6 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
_dbg_assert_msg_(WII_IPC_ES, Buffer.NumberPayloadBuffer == 1, "IOCTL_ES_GETVIEWCNT no out buffer");
u64 TitleID = Memory::Read_U64(Buffer.InBuffer[0].m_Address);
if (TitleID != TITLEID_SYSMENU && (u32)(TitleID >> 32) == 0x00000001 && m_TitleID == TITLEID_SYSMENU)
{
// TODO: Check if any titles other than 1-2 call this for a ios tik
ERROR_LOG(WII_IPC_ES, "IOCTL_ES_GETVIEWCNT tik for IOS %x requested, returning System Menu tik", TitleID & 0xFFFFFFFF);
TitleID = TITLEID_SYSMENU;
}
std::string TicketFilename = Common::CreateTicketFileName(TitleID);
u32 ViewCount = 0;
@ -482,13 +475,6 @@ bool CWII_IPC_HLE_Device_es::IOCtlV(u32 _CommandAddress)
u64 TitleID = Memory::Read_U64(Buffer.InBuffer[0].m_Address);
u32 maxViews = Memory::Read_U32(Buffer.InBuffer[1].m_Address);
if (TitleID != TITLEID_SYSMENU && (u32)(TitleID >> 32) == 0x00000001 && m_TitleID == TITLEID_SYSMENU)
{
// TODO: Check if any titles other than 1-2 call this for a ios tik
ERROR_LOG(WII_IPC_ES, "IOCTL_ES_GETVIEWS tik for IOS %x requested, returning System Menu tik", TitleID & 0xFFFFFFFF);
TitleID = TITLEID_SYSMENU;
}
std::string TicketFilename = Common::CreateTicketFileName(TitleID);
if (File::Exists(TicketFilename.c_str()))
{

View File

@ -427,14 +427,14 @@ u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update()
// The Real Wiimote sends report at a fixed frequency of 100Hz
// So let's make it also 100Hz here
// Calculation: 15000Hz (IPC_HLE) / 100Hz (WiiMote) = 150
// Calculation: 1500Hz (IPC_HLE) / 100Hz (WiiMote) = 15
if (m_ACLEndpoint.IsValid())
{
if (++m_WiimoteUpdate_Freq > 150)
if (++m_WiimoteUpdate_Freq > 15)
m_WiimoteUpdate_Freq = 0;
for (unsigned int i = 0; i < m_WiiMotes.size(); i++)
{
if (m_WiiMotes[i].IsConnected() && m_WiimoteUpdate_Freq == 150 / (i + 1))
if (m_WiiMotes[i].IsConnected() && m_WiimoteUpdate_Freq == 15 / (i + 1))
{
#if defined(HAVE_WX) && HAVE_WX
NetPlay_WiimoteUpdate(i);