From 1413a409444882d3ebe598064f83cb4717079063 Mon Sep 17 00:00:00 2001 From: nakeee Date: Fri, 26 Dec 2008 09:36:35 +0000 Subject: [PATCH] second try git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1675 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_PadSimpleEvnt.vcproj | 832 ++++++++++++++++++ .../Src/DirectInputBase.cpp | 189 ++++ .../Src/DirectInputBase.h | 44 + .../Plugin_PadSimpleEvnt/Src/PadSimple.cpp | 13 +- .../Plugin_PadSimpleEvnt/Src/SConscript | 13 +- .../Plugin_PadSimpleEvnt/Src/XInputBase.cpp | 128 +++ .../Plugin_PadSimpleEvnt/Src/XInputBase.h | 12 + .../Plugin_PadSimpleEvnt/Src/stdafx.cpp | 18 + .../Plugins/Plugin_PadSimpleEvnt/Src/stdafx.h | 34 + 9 files changed, 1273 insertions(+), 10 deletions(-) create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.cpp create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.h create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.cpp create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.h create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.cpp create mode 100644 Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.h diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj b/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj new file mode 100644 index 0000000000..74a27405ba --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj @@ -0,0 +1,832 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.cpp new file mode 100644 index 0000000000..7bb77f02be --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.cpp @@ -0,0 +1,189 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "stdafx.h" +#include "DirectInputBase.h" + +DInput::DInput() + : g_pDI(NULL), + g_pKeyboard(NULL) +{} + + +DInput::~DInput() +{ + Free(); +} + +void DInput::DIKToString(unsigned int keycode, char *keyStr) +{ + switch(keycode) { + case DIK_RETURN: + sprintf(keyStr, "Enter"); + break; + case DIK_UP: + sprintf(keyStr, "Up"); + break; + case DIK_DOWN: + sprintf(keyStr, "Down"); + break; + case DIK_LEFT: + sprintf(keyStr, "Left"); + break; + case DIK_RIGHT: + sprintf(keyStr, "Right"); + break; + case DIK_HOME: + strcpy(keyStr, "Home"); + break; + case DIK_END: + strcpy(keyStr, "End"); + break; + case DIK_INSERT: + strcpy(keyStr, "Ins"); + break; + case DIK_DELETE: + strcpy(keyStr, "Del"); + break; + case DIK_PGUP: + strcpy(keyStr, "PgUp"); + break; + case DIK_PGDN: + strcpy(keyStr, "PgDn"); + break; + case DIK_NUMPAD0: + strcpy(keyStr, "Num 0"); + break; + case DIK_NUMPAD1: + strcpy(keyStr, "Num 1"); + break; + case DIK_NUMPAD2: + strcpy(keyStr, "Num 2"); + break; + case DIK_NUMPAD3: + strcpy(keyStr, "Num 3"); + break; + case DIK_NUMPAD4: + strcpy(keyStr, "Num 4"); + break; + case DIK_NUMPAD5: + strcpy(keyStr, "Num 5"); + break; + case DIK_NUMPAD6: + strcpy(keyStr, "Num 6"); + break; + case DIK_NUMPAD7: + strcpy(keyStr, "Num 7"); + break; + case DIK_NUMPAD8: + strcpy(keyStr, "Num 8"); + break; + case DIK_NUMPAD9: + strcpy(keyStr, "Num 9"); + break; + case DIK_NUMPADSLASH: + strcpy(keyStr, "Num /"); + break; + default: + GetKeyNameText(keycode << 16, keyStr, 64); + break; + } +} + +HRESULT DInput::Init(HWND hWnd) +{ + HRESULT hr; + DWORD dwCoopFlags; + dwCoopFlags = DISCL_FOREGROUND | DISCL_NOWINKEY; + + // Create a DInput object + if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, + IID_IDirectInput8, (VOID* *)&g_pDI, NULL))) + { + MessageBox(0, "Direct Input Create Failed", 0, MB_ICONERROR); + return(hr); + } + + if (FAILED(hr = g_pDI->CreateDevice(GUID_SysKeyboard, &g_pKeyboard, NULL))) + { + MessageBox(0, "Couldn't access keyboard", 0, MB_ICONERROR); + Free(); + return(hr); + } + + g_pKeyboard->SetDataFormat(&c_dfDIKeyboard); + g_pKeyboard->SetCooperativeLevel(hWnd, dwCoopFlags); + g_pKeyboard->Acquire(); + + return(S_OK); +} + +void DInput::Free() +{ + if (g_pKeyboard) + { + g_pKeyboard->Unacquire(); + g_pKeyboard->Release(); + g_pKeyboard = 0; + } + + if (g_pDI) + { + g_pDI->Release(); + g_pDI = 0; + } +} + +// Desc: Read the input device's state when in immediate mode and display it. +HRESULT DInput::Read() +{ + HRESULT hr; + + if (NULL == g_pKeyboard) + { + return(S_OK); + } + + // Get the input's device state, and put the state in dims + ZeroMemory(diks, sizeof(diks)); + hr = g_pKeyboard->GetDeviceState(sizeof(diks), diks); + + //for (int i=0; i<256; i++) + // if (diks[i])MessageBox(0,"DSFJDKSF|",0,0); + if (FAILED(hr)) + { + // DirectInput may be telling us that the input stream has been + // interrupted. We aren't tracking any state between polls, so + // we don't have any special reset that needs to be done. + // We just re-acquire and try again. + + // If input is lost then acquire and keep trying + hr = g_pKeyboard->Acquire(); + + while (hr == DIERR_INPUTLOST) + { + hr = g_pKeyboard->Acquire(); + } + + // hr may be DIERR_OTHERAPPHASPRIO or other errors. This + // may occur when the app is minimized or in the process of + // switching, so just try again later + return(S_OK); + } + + return(S_OK); +} diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.h b/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.h new file mode 100644 index 0000000000..2845599c36 --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/DirectInputBase.h @@ -0,0 +1,44 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#ifndef _DIRECTINPUTBASE_H +#define _DIRECTINPUTBASE_H + +class DInput +{ + public: + + DInput(); + ~DInput(); + + static void DInput::DIKToString(unsigned int keycode, char *keyStr); + + HRESULT Init(HWND hWnd); + void Free(); + HRESULT Read(); + + + BYTE diks[256]; // DirectInput keyboard state buffer + + private: + + LPDIRECTINPUT8 g_pDI; // The DirectInput object + LPDIRECTINPUTDEVICE8 g_pKeyboard; // The keyboard device +}; + +#endif + diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp index 14feeac09d..6aab0c92e9 100644 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp @@ -23,8 +23,6 @@ #include "PadSimple.h" #include "IniFile.h" -// FIXME -#undef HAVE_WX #if defined(HAVE_WX) && HAVE_WX #include "GUI/ConfigDlg.h" #endif @@ -150,12 +148,15 @@ void GetDllInfo(PLUGIN_INFO* _PluginInfo) _PluginInfo->Type = PLUGIN_TYPE_PAD; #ifdef DEBUGFAST - sprintf(_PluginInfo->Name, "Dolphin Pad Event (DebugFast)"); -#elif defined _DEBUG - sprintf(_PluginInfo->Name, "Dolphin Pad Event"); + sprintf(_PluginInfo->Name, "Dolphin KB/X360pad (DebugFast)"); #else - sprintf(_PluginInfo->Name, "Dolphin Pad Event (Debug)"); +#ifndef _DEBUG + sprintf(_PluginInfo->Name, "Dolphin KB/X360pad"); +#else + sprintf(_PluginInfo->Name, "Dolphin KB/X360pad (Debug)"); #endif +#endif + } void DllConfig(HWND _hParent) diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript b/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript index ddb1ec2d6c..7d43cf153f 100644 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript @@ -3,10 +3,14 @@ Import('env') import sys -name = "Plugin_PadSimpleEvnt" +name = "Plugin_PadSimple" -if not env['GLTEST']: - print name + " Doesn't work without testgl" +if not env['HAVE_X11']: + print name + " must have X11 to be build" + Return() + +if env['GLTEST']: + print name + " Doesn't work with testgl" Return() files = [ @@ -16,7 +20,8 @@ padenv = env.Clone() if padenv['HAVE_WX']: files += [ -# "GUI/ConfigDlg.cpp", + "GUI/ConfigDlg.cpp", + "XInputBase.cpp", ] padenv.Append(LIBS = [ 'common' ]) diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.cpp new file mode 100644 index 0000000000..3f89067194 --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.cpp @@ -0,0 +1,128 @@ +#include "XInputBase.h" + +// Taken from wxw source code +KeySym wxCharCodeWXToX(int id) +{ + KeySym keySym; + + switch (id) + { + case WXK_CANCEL: keySym = XK_Cancel; break; + case WXK_BACK: keySym = XK_BackSpace; break; + case WXK_TAB: keySym = XK_Tab; break; + case WXK_CLEAR: keySym = XK_Clear; break; + case WXK_RETURN: keySym = XK_Return; break; + case WXK_SHIFT: keySym = XK_Shift_L; break; + case WXK_CONTROL: keySym = XK_Control_L; break; + case WXK_ALT: keySym = XK_Meta_L; break; + case WXK_CAPITAL: keySym = XK_Caps_Lock; break; + case WXK_MENU : keySym = XK_Menu; break; + case WXK_PAUSE: keySym = XK_Pause; break; + case WXK_ESCAPE: keySym = XK_Escape; break; + case WXK_SPACE: keySym = ' '; break; + case WXK_PAGEUP: keySym = XK_Prior; break; + case WXK_PAGEDOWN: keySym = XK_Next; break; + case WXK_END: keySym = XK_End; break; + case WXK_HOME : keySym = XK_Home; break; + case WXK_LEFT : keySym = XK_Left; break; + case WXK_UP: keySym = XK_Up; break; + case WXK_RIGHT: keySym = XK_Right; break; + case WXK_DOWN : keySym = XK_Down; break; + case WXK_SELECT: keySym = XK_Select; break; + case WXK_PRINT: keySym = XK_Print; break; + case WXK_EXECUTE: keySym = XK_Execute; break; + case WXK_INSERT: keySym = XK_Insert; break; + case WXK_DELETE: keySym = XK_Delete; break; + case WXK_HELP : keySym = XK_Help; break; + case WXK_NUMPAD0: keySym = XK_KP_0; break; case WXK_NUMPAD_INSERT: keySym = XK_KP_Insert; break; + case WXK_NUMPAD1: keySym = XK_KP_1; break; case WXK_NUMPAD_END: keySym = XK_KP_End; break; + case WXK_NUMPAD2: keySym = XK_KP_2; break; case WXK_NUMPAD_DOWN: keySym = XK_KP_Down; break; + case WXK_NUMPAD3: keySym = XK_KP_3; break; case WXK_NUMPAD_PAGEDOWN: keySym = XK_KP_Page_Down; break; + case WXK_NUMPAD4: keySym = XK_KP_4; break; case WXK_NUMPAD_LEFT: keySym = XK_KP_Left; break; + case WXK_NUMPAD5: keySym = XK_KP_5; break; + case WXK_NUMPAD6: keySym = XK_KP_6; break; case WXK_NUMPAD_RIGHT: keySym = XK_KP_Right; break; + case WXK_NUMPAD7: keySym = XK_KP_7; break; case WXK_NUMPAD_HOME: keySym = XK_KP_Home; break; + case WXK_NUMPAD8: keySym = XK_KP_8; break; case WXK_NUMPAD_UP: keySym = XK_KP_Up; break; + case WXK_NUMPAD9: keySym = XK_KP_9; break; case WXK_NUMPAD_PAGEUP: keySym = XK_KP_Page_Up; break; + case WXK_NUMPAD_DECIMAL: keySym = XK_KP_Decimal; break; case WXK_NUMPAD_DELETE: keySym = XK_KP_Delete; break; + case WXK_NUMPAD_MULTIPLY: keySym = XK_KP_Multiply; break; + case WXK_NUMPAD_ADD: keySym = XK_KP_Add; break; + case WXK_NUMPAD_SUBTRACT: keySym = XK_KP_Subtract; break; + case WXK_NUMPAD_DIVIDE: keySym = XK_KP_Divide; break; + case WXK_NUMPAD_ENTER: keySym = XK_KP_Enter; break; + case WXK_NUMPAD_SEPARATOR: keySym = XK_KP_Separator; break; + case WXK_F1: keySym = XK_F1; break; + case WXK_F2: keySym = XK_F2; break; + case WXK_F3: keySym = XK_F3; break; + case WXK_F4: keySym = XK_F4; break; + case WXK_F5: keySym = XK_F5; break; + case WXK_F6: keySym = XK_F6; break; + case WXK_F7: keySym = XK_F7; break; + case WXK_F8: keySym = XK_F8; break; + case WXK_F9: keySym = XK_F9; break; + case WXK_F10: keySym = XK_F10; break; + case WXK_F11: keySym = XK_F11; break; + case WXK_F12: keySym = XK_F12; break; + case WXK_F13: keySym = XK_F13; break; + case WXK_F14: keySym = XK_F14; break; + case WXK_F15: keySym = XK_F15; break; + case WXK_F16: keySym = XK_F16; break; + case WXK_F17: keySym = XK_F17; break; + case WXK_F18: keySym = XK_F18; break; + case WXK_F19: keySym = XK_F19; break; + case WXK_F20: keySym = XK_F20; break; + case WXK_F21: keySym = XK_F21; break; + case WXK_F22: keySym = XK_F22; break; + case WXK_F23: keySym = XK_F23; break; + case WXK_F24: keySym = XK_F24; break; + case WXK_NUMLOCK: keySym = XK_Num_Lock; break; + case WXK_SCROLL: keySym = XK_Scroll_Lock; break; + default: keySym = id <= 255 ? (KeySym)id : 0; + } + + return keySym; +} + +void XKeyToString(unsigned int keycode, char *keyStr) { + switch (keycode) { + + case XK_Left: + sprintf(keyStr, "LEFT"); + break; + case XK_Up: + sprintf(keyStr, "UP"); + break; + case XK_Right: + sprintf(keyStr, "RIGHT"); + break; + case XK_Down: + sprintf(keyStr, "DOWN"); + break; + case XK_Return: + sprintf(keyStr, "RETURN"); + break; + case XK_KP_Enter: + sprintf(keyStr, "KP ENTER"); + break; + case XK_KP_Left: + sprintf(keyStr, "KP LEFT"); + break; + case XK_KP_Up: + sprintf(keyStr, "KP UP"); + break; + case XK_KP_Right: + sprintf(keyStr, "KP RIGHT"); + break; + case XK_KP_Down: + sprintf(keyStr, "KP DOWN"); + break; + case XK_Shift_L: + sprintf(keyStr, "LShift"); + break; + case XK_Control_L: + sprintf(keyStr, "LControl"); + break; + default: + sprintf(keyStr, "%c", toupper(keycode)); + } +} diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.h b/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.h new file mode 100644 index 0000000000..4c3a1c5afa --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/XInputBase.h @@ -0,0 +1,12 @@ + +#ifndef XINPUTBASE_H +#define XINPUTBASE_H + +#include +#include +#include + +KeySym wxCharCodeWXToX(int id); +void XKeyToString(unsigned int keycode, char *keyStr); + +#endif diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.cpp new file mode 100644 index 0000000000..1dc71df3a9 --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.cpp @@ -0,0 +1,18 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "stdafx.h" diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.h b/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.h new file mode 100644 index 0000000000..3556b66a4f --- /dev/null +++ b/Source/Plugins/Plugin_PadSimpleEvnt/Src/stdafx.h @@ -0,0 +1,34 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#pragma once + +// Insert your headers here +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define _CRT_SECURE_NO_DEPRECATE 1 + +#include +#include +#include +#include +#include + +// DInput +#define DIRECTINPUT_VERSION 0x0800 +#include + +