summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2010-07-03 08:04:10 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2010-07-03 08:04:10 +0000
commit0bf3dfda036f1da0cb26e1f266ea500fbe74f872 (patch)
tree309db5ac993b660eac11dfcc7332a08d47003474 /Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp
parent0dc8833396ab26377b4cd1ba952371e74b94e739 (diff)
New Wiimote Plugin: Added real wiimote support.(only tested on Windows, still a few probs: after refresh alt+F{5..8} x2 is needed) New Wiimote/GCPad: Re-merged Keyboard+Mouse for easier kb+mouse configuration, like before.(DirectInput doesn't support individual kb/mice anymore like I thought it did) Fixed some bugs and maybe leaks in GUI.(got rid of evil dynamic_cast) Renamed stuff from DirectInput to DInput, cause it's shorter and rhymes with XInput, I guess. (I remembered eol-style native, shuffle lost his job :P)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5822 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp')
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp
new file mode 100644
index 0000000000..a9098d6288
--- /dev/null
+++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInput.cpp
@@ -0,0 +1,84 @@
+#include "../ControllerInterface.h"
+
+#ifdef CIFACE_USE_DINPUT
+
+#include "DInput.h"
+
+#include <StringUtil.h>
+
+#ifdef CIFACE_USE_DINPUT_JOYSTICK
+ #include "DInputJoystick.h"
+#endif
+#ifdef CIFACE_USE_DINPUT_KBM
+ #include "DInputKeyboardMouse.h"
+#endif
+
+#pragma comment(lib, "Dinput8.lib")
+#pragma comment(lib, "dxguid.lib")
+
+namespace ciface
+{
+namespace DInput
+{
+
+//BOOL CALLBACK DIEnumEffectsCallback(LPCDIEFFECTINFO pdei, LPVOID pvRef)
+//{
+// ((std::list<DIEFFECTINFO>*)pvRef)->push_back(*pdei);
+// return DIENUM_CONTINUE;
+//}
+
+BOOL CALLBACK DIEnumDeviceObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef)
+{
+ ((std::list<DIDEVICEOBJECTINSTANCE>*)pvRef)->push_back(*lpddoi);
+ return DIENUM_CONTINUE;
+}
+
+BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
+{
+ ((std::list<DIDEVICEINSTANCE>*)pvRef)->push_back(*lpddi);
+ return DIENUM_CONTINUE;
+}
+
+std::string GetDeviceName(const LPDIRECTINPUTDEVICE8 device)
+{
+ std::string out;
+
+ DIPROPSTRING str;
+ ZeroMemory(&str, sizeof(str));
+ str.diph.dwSize = sizeof(str);
+ str.diph.dwHeaderSize = sizeof(str.diph);
+ str.diph.dwHow = DIPH_DEVICE;
+
+ if (SUCCEEDED(device->GetProperty(DIPROP_PRODUCTNAME, &str.diph)))
+ {
+ const int size = WideCharToMultiByte(CP_ACP, 0, str.wsz, -1, NULL, 0, NULL, NULL);
+ char* const data = new char[size];
+ if (size == WideCharToMultiByte(CP_ACP, 0, str.wsz, -1, data, size, NULL, NULL))
+ out.assign(data);
+ delete[] data;
+ }
+
+ return StripSpaces(out);
+}
+
+void Init( std::vector<ControllerInterface::Device*>& devices/*, HWND hwnd*/ )
+{
+ IDirectInput8* idi8;
+ if (FAILED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&idi8, NULL)))
+ return;
+
+#ifdef CIFACE_USE_DINPUT_KBM
+ InitKeyboardMouse(idi8, devices);
+#endif
+#ifdef CIFACE_USE_DINPUT_JOYSTICK
+ InitJoystick(idi8, devices/*, hwnd*/);
+#endif
+
+ idi8->Release();
+
+}
+
+}
+}
+
+#endif