Commit lpfaint99\'s Emulated Wiimote Fix for Linux. Works, haven't tested any extension emulation, but should work
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3927 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
df5451c7db
commit
8fd481fdfa
|
@ -66,7 +66,7 @@ KeyboardWiimote g_Wiimote_kbd;
|
||||||
KeyboardNunchuck g_NunchuckExt;
|
KeyboardNunchuck g_NunchuckExt;
|
||||||
KeyboardClassicController g_ClassicContExt;
|
KeyboardClassicController g_ClassicContExt;
|
||||||
KeyboardGH3GLP g_GH3Ext;
|
KeyboardGH3GLP g_GH3Ext;
|
||||||
|
bool KeyStatus[64];
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
#endif //_EMU_DECLARATIONS_
|
#endif //_EMU_DECLARATIONS_
|
||||||
|
|
|
@ -219,7 +219,7 @@ struct KeyboardWiimote
|
||||||
// Raw X and Y coordinate and processed X and Y coordinates
|
// Raw X and Y coordinate and processed X and Y coordinates
|
||||||
SIR IR;
|
SIR IR;
|
||||||
};
|
};
|
||||||
extern KeyboardWiimote g_Wiimote_kbd;
|
extern KeyboardWiimote g_Wiimote_kbd;
|
||||||
struct KeyboardNunchuck
|
struct KeyboardNunchuck
|
||||||
{
|
{
|
||||||
enum EKeyboardNunchuck
|
enum EKeyboardNunchuck
|
||||||
|
@ -274,11 +274,13 @@ struct KeyboardGH3GLP
|
||||||
Whammy,
|
Whammy,
|
||||||
Al, Ar, Au, Ad,
|
Al, Ar, Au, Ad,
|
||||||
StrumUp, StrumDown,
|
StrumUp, StrumDown,
|
||||||
SHAKE
|
SHAKE,
|
||||||
|
LAST_CONSTANT
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
extern KeyboardGH3GLP g_GH3Ext;
|
extern KeyboardGH3GLP g_GH3Ext;
|
||||||
|
|
||||||
|
extern bool KeyStatus[64];
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
#endif //_EMU_DEFINITIONS_
|
#endif //_EMU_DEFINITIONS_
|
||||||
|
|
|
@ -37,7 +37,6 @@ extern SWiimoteInitialize g_WiimoteInitialize;
|
||||||
|
|
||||||
namespace WiiMoteEmu
|
namespace WiiMoteEmu
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Bit shift conversions */
|
/* Bit shift conversions */
|
||||||
u32 convert24bit(const u8* src) {
|
u32 convert24bit(const u8* src) {
|
||||||
return (src[0] << 16) | (src[1] << 8) | src[2];
|
return (src[0] << 16) | (src[1] << 8) | src[2];
|
||||||
|
@ -698,6 +697,7 @@ void ControlChannel(u16 _channelID, const void* _pData, u32 _Size)
|
||||||
of times per second. */
|
of times per second. */
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
|
readKeyboard();
|
||||||
//LOG(WII_IPC_WIIMOTE, "Wiimote_Update");
|
//LOG(WII_IPC_WIIMOTE, "Wiimote_Update");
|
||||||
//INFO_LOG(WII_IPC_WIIMOTE, "Emu Update: %i\n", g_ReportingMode);
|
//INFO_LOG(WII_IPC_WIIMOTE, "Emu Update: %i\n", g_ReportingMode);
|
||||||
|
|
||||||
|
@ -727,5 +727,115 @@ void Update()
|
||||||
CheckAckDelay();
|
CheckAckDelay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void readKeyboard()
|
||||||
|
{
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
XEvent E;
|
||||||
|
KeySym key;
|
||||||
|
|
||||||
} // end of namespace
|
// keyboard input
|
||||||
|
int num_events;
|
||||||
|
for (num_events = XPending(WMdisplay); num_events > 0; num_events--)
|
||||||
|
{
|
||||||
|
XNextEvent(WMdisplay, &E);
|
||||||
|
switch (E.type)
|
||||||
|
{
|
||||||
|
case KeyPress:
|
||||||
|
{
|
||||||
|
key = XLookupKeysym((XKeyEvent*)&E, 0);
|
||||||
|
|
||||||
|
if((key >= XK_F1 && key <= XK_F9) ||
|
||||||
|
key == XK_Shift_L || key == XK_Shift_R ||
|
||||||
|
key == XK_Control_L || key == XK_Control_R) {
|
||||||
|
XPutBackEvent(WMdisplay, &E);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = g_Wiimote_kbd.A; i < g_Wiimote_kbd.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Wm.keyForControls[i - g_Wiimote_kbd.A])
|
||||||
|
KeyStatus[i] = true;
|
||||||
|
}
|
||||||
|
switch (g_Config.iExtensionConnected)
|
||||||
|
{
|
||||||
|
case EXT_NUNCHUCK:
|
||||||
|
for (i = g_NunchuckExt.Z; i < g_NunchuckExt.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Nc.keyForControls[i - g_NunchuckExt.Z])
|
||||||
|
KeyStatus[i] = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EXT_CLASSIC_CONTROLLER:
|
||||||
|
for (i = g_ClassicContExt.A; i < g_ClassicContExt.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Cc.keyForControls[i - g_ClassicContExt.A])
|
||||||
|
KeyStatus[i] = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EXT_GUITARHERO3_CONTROLLER:
|
||||||
|
for (i = g_GH3Ext.Green; i < g_GH3Ext.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].GH3c.keyForControls[i - g_GH3Ext.Green])
|
||||||
|
KeyStatus[i] = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case KeyRelease:
|
||||||
|
{
|
||||||
|
key = XLookupKeysym((XKeyEvent*)&E, 0);
|
||||||
|
|
||||||
|
if((key >= XK_F1 && key <= XK_F9) ||
|
||||||
|
key == XK_Shift_L || key == XK_Shift_R ||
|
||||||
|
key == XK_Control_L || key == XK_Control_R) {
|
||||||
|
XPutBackEvent(WMdisplay, &E);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = g_Wiimote_kbd.A; i < g_Wiimote_kbd.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Wm.keyForControls[i - g_Wiimote_kbd.A])
|
||||||
|
KeyStatus[i] = false;
|
||||||
|
}
|
||||||
|
switch (g_Config.iExtensionConnected)
|
||||||
|
{
|
||||||
|
case EXT_NUNCHUCK:
|
||||||
|
for (i = g_NunchuckExt.Z; i < g_NunchuckExt.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Nc.keyForControls[i - g_NunchuckExt.Z])
|
||||||
|
KeyStatus[i] = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EXT_CLASSIC_CONTROLLER:
|
||||||
|
for (i = g_ClassicContExt.A; i < g_ClassicContExt.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].Cc.keyForControls[i - g_ClassicContExt.A])
|
||||||
|
KeyStatus[i] = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EXT_GUITARHERO3_CONTROLLER:
|
||||||
|
for (i = g_GH3Ext.Green; i < g_GH3Ext.LAST_CONSTANT; i++)
|
||||||
|
{
|
||||||
|
if (key == PadMapping[0].GH3c.keyForControls[i - g_GH3Ext.Green])
|
||||||
|
KeyStatus[i] = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end of namespace
|
||||||
|
|
|
@ -41,6 +41,7 @@ void Shutdown(void);
|
||||||
void InterruptChannel(u16 _channelID, const void* _pData, u32 _Size);
|
void InterruptChannel(u16 _channelID, const void* _pData, u32 _Size);
|
||||||
void ControlChannel(u16 _channelID, const void* _pData, u32 _Size) ;
|
void ControlChannel(u16 _channelID, const void* _pData, u32 _Size) ;
|
||||||
void Update();
|
void Update();
|
||||||
|
void readKeyboard();
|
||||||
|
|
||||||
// Recordings
|
// Recordings
|
||||||
void LoadRecordedMovements();
|
void LoadRecordedMovements();
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace WiiMoteEmu
|
||||||
// Fill joyinfo with the current connected devices
|
// Fill joyinfo with the current connected devices
|
||||||
bool Search_Devices(std::vector<InputCommon::CONTROLLER_INFO> &_joyinfo, int &_NumPads, int &_NumGoodPads)
|
bool Search_Devices(std::vector<InputCommon::CONTROLLER_INFO> &_joyinfo, int &_NumPads, int &_NumGoodPads)
|
||||||
{
|
{
|
||||||
bool Success = InputCommon::SearchDevices(_joyinfo, _NumPads, _NumGoodPads);
|
bool WasGotten = InputCommon::SearchDevices(_joyinfo, _NumPads, _NumGoodPads);
|
||||||
|
|
||||||
// Warn the user if no gamepads are detected
|
// Warn the user if no gamepads are detected
|
||||||
if (_NumGoodPads == 0 && g_EmulatorRunning)
|
if (_NumGoodPads == 0 && g_EmulatorRunning)
|
||||||
|
|
|
@ -334,7 +334,7 @@ int IsKey(int Key)
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
return false;
|
return KeyStatus[Key];
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,9 @@ and Wiimote functions worked.
|
||||||
#include "wiimote_real.h"
|
#include "wiimote_real.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
Display* WMdisplay;
|
||||||
|
#endif
|
||||||
SWiimoteInitialize g_WiimoteInitialize;
|
SWiimoteInitialize g_WiimoteInitialize;
|
||||||
PLUGIN_GLOBALS* globals = NULL;
|
PLUGIN_GLOBALS* globals = NULL;
|
||||||
|
|
||||||
|
@ -220,6 +223,9 @@ void Initialize(void *init)
|
||||||
if(m_BasicConfigFrame) m_BasicConfigFrame->UpdateGUI();
|
if(m_BasicConfigFrame) m_BasicConfigFrame->UpdateGUI();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
WMdisplay = (Display*)_WiimoteInitialize.hWnd;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Save the ISO Id, again if we had a window open
|
// Save the ISO Id, again if we had a window open
|
||||||
g_ISOId = g_WiimoteInitialize.ISOId;
|
g_ISOId = g_WiimoteInitialize.ISOId;
|
||||||
|
@ -1045,4 +1051,4 @@ void DoInitialize()
|
||||||
#if HAVE_WIIUSE
|
#if HAVE_WIIUSE
|
||||||
if (g_Config.bConnectRealWiimote) WiiMoteReal::Initialize();
|
if (g_Config.bConnectRealWiimote) WiiMoteReal::Initialize();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,13 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "CommonTypes.h"
|
#include "CommonTypes.h"
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include <X11/XKBlib.h>
|
||||||
|
extern Display* WMdisplay;
|
||||||
|
#endif
|
||||||
// Definitions and declarations
|
// Definitions and declarations
|
||||||
void DoInitialize();
|
void DoInitialize();
|
||||||
double GetDoubleTime();
|
double GetDoubleTime();
|
||||||
|
|
Loading…
Reference in New Issue