Fix some fail logic and a lil prob with UI when changing source and clicking "Refresh".

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5826 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Jordan Woyak 2010-07-03 11:20:38 +00:00
parent dc8778e2d9
commit a054cc71b6
3 changed files with 19 additions and 19 deletions

View File

@ -135,6 +135,7 @@ void InitPlugin( void* const hwnd )
(*i)->UpdateReferences( g_plugin.controller_interface ); (*i)->UpdateReferences( g_plugin.controller_interface );
// real wiimotes // real wiimotes
WiimoteReal::LoadSettings();
WiimoteReal::Initialize(); WiimoteReal::Initialize();
} }
} }
@ -248,7 +249,7 @@ unsigned int Wiimote_GetAttachedControllers()
{ {
unsigned int attached = 0; unsigned int attached = 0;
for (unsigned int i=0; i<4; ++i) for (unsigned int i=0; i<4; ++i)
if (g_plugin.controllers[i]->default_device.ToString().length()) if (g_wiimote_sources[i])
attached |= (1 << i); attached |= (1 << i);
return attached; return attached;
} }

View File

@ -163,14 +163,14 @@ void Wiimote::Read()
// a data report, save it // a data report, save it
if (m_wiimote->event_buf[1] >= 0x30) if (m_wiimote->event_buf[1] >= 0x30)
{ {
memcpy(m_last_data_report, m_wiimote->event_buf, MAX_PAYLOAD - 1); memcpy(m_last_data_report, m_wiimote->event_buf, MAX_PAYLOAD);
m_last_data_report_valid = true; m_last_data_report_valid = true;
} }
else else
{ {
// some other report, add it to queue // some other report, add it to queue
u8* const rpt = new u8[MAX_PAYLOAD - 1]; u8* const rpt = new u8[MAX_PAYLOAD];
memcpy(rpt, m_wiimote->event_buf, MAX_PAYLOAD - 1); memcpy(rpt, m_wiimote->event_buf, MAX_PAYLOAD);
m_reports.push(rpt); m_reports.push(rpt);
} }
} }
@ -183,13 +183,13 @@ void Wiimote::Update()
{ {
u8* const rpt = m_reports.front(); u8* const rpt = m_reports.front();
m_reports.pop(); m_reports.pop();
g_WiimoteInitialize.pWiimoteInterruptChannel(m_index, m_channel, rpt, MAX_PAYLOAD - 1); g_WiimoteInitialize.pWiimoteInterruptChannel(m_index, m_channel, rpt, MAX_PAYLOAD);
delete[] rpt; delete[] rpt;
} }
else if (m_last_data_report_valid) else if (m_last_data_report_valid)
{ {
// otherwise send the last data report, if there is one // otherwise send the last data report, if there is one
g_WiimoteInitialize.pWiimoteInterruptChannel(m_index, m_channel, m_last_data_report, MAX_PAYLOAD - 1); g_WiimoteInitialize.pWiimoteInterruptChannel(m_index, m_channel, m_last_data_report, MAX_PAYLOAD);
} }
} }
@ -212,15 +212,8 @@ void Wiimote::Disconnect()
Wiimote* g_wiimotes[4]; Wiimote* g_wiimotes[4];
unsigned int Initialize() void LoadSettings()
{ {
// return if already initialized
if (g_real_wiimotes_initialized)
return g_wiimotes_found;
// load realwiimote settings from inifile
{
std::string ini_filename = (std::string(File::GetUserPath(D_CONFIG_IDX)) + g_plugin.ini_name + ".ini" ); std::string ini_filename = (std::string(File::GetUserPath(D_CONFIG_IDX)) + g_plugin.ini_name + ".ini" );
IniFile inifile; IniFile inifile;
@ -234,8 +227,13 @@ unsigned int Initialize()
sec.Get("Source", &g_wiimote_sources[i], WIIMOTE_SRC_EMU); sec.Get("Source", &g_wiimote_sources[i], WIIMOTE_SRC_EMU);
} }
} }
// end load settings
unsigned int Initialize()
{
// return if already initialized
if (g_real_wiimotes_initialized)
return g_wiimotes_found;
memset(g_wiimotes, 0, sizeof(g_wiimotes)); memset(g_wiimotes, 0, sizeof(g_wiimotes));
@ -269,14 +267,14 @@ unsigned int Initialize()
g_wiimote_critsec.Enter(); // enter g_wiimote_critsec.Enter(); // enter
// create real wiimote class instances, assign wiimotes // create real wiimote class instances, assign wiimotes
unsigned int index = 0;
for (unsigned int i = 0; i < g_wiimotes_found; ++i) for (unsigned int i = 0, w = 0; i<MAX_WIIMOTES && w<g_wiimotes_found; ++i)
{ {
if (WIIMOTE_SRC_REAL != g_wiimote_sources[i]) if (WIIMOTE_SRC_REAL != g_wiimote_sources[i])
continue; continue;
// create/assign wiimote // create/assign wiimote
g_wiimotes[i] = new Wiimote(g_wiimotes_from_wiiuse[index++], i); g_wiimotes[i] = new Wiimote(g_wiimotes_from_wiiuse[w++], i);
} }
g_wiimote_critsec.Leave(); // leave g_wiimote_critsec.Leave(); // leave

View File

@ -43,6 +43,7 @@ namespace WiimoteReal
unsigned int Initialize(); unsigned int Initialize();
void Shutdown(); void Shutdown();
void Refresh(); void Refresh();
void LoadSettings();
void InterruptChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32 _Size); void InterruptChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32 _Size);
void ControlChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32 _Size); void ControlChannel(int _WiimoteNumber, u16 _channelID, const void* _pData, u32 _Size);