| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2010 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "InputCommon/ControllerInterface/DInput/DInput.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-12 17:08:04 +02:00
										 |  |  | #include "Common/StringUtil.h"
 | 
					
						
							|  |  |  | #include "InputCommon/ControllerInterface/ControllerInterface.h"
 | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "InputCommon/ControllerInterface/DInput/DInputJoystick.h"
 | 
					
						
							|  |  |  | #include "InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h"
 | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | #pragma comment(lib, "Dinput8.lib")
 | 
					
						
							|  |  |  | #pragma comment(lib, "dxguid.lib")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace ciface | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-07-03 08:04:10 +00:00
										 |  |  | namespace DInput | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | BOOL CALLBACK DIEnumDeviceObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   ((std::list<DIDEVICEOBJECTINSTANCE>*)pvRef)->push_back(*lpddoi); | 
					
						
							|  |  |  |   return DIENUM_CONTINUE; | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   ((std::list<DIDEVICEINSTANCE>*)pvRef)->push_back(*lpddi); | 
					
						
							|  |  |  |   return DIENUM_CONTINUE; | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::string GetDeviceName(const LPDIRECTINPUTDEVICE8 device) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   DIPROPSTRING str = {}; | 
					
						
							|  |  |  |   str.diph.dwSize = sizeof(str); | 
					
						
							|  |  |  |   str.diph.dwHeaderSize = sizeof(str.diph); | 
					
						
							|  |  |  |   str.diph.dwHow = DIPH_DEVICE; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   std::string result; | 
					
						
							|  |  |  |   if (SUCCEEDED(device->GetProperty(DIPROP_PRODUCTNAME, &str.diph))) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     result = StripSpaces(UTF16ToUTF8(str.wsz)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							| 
									
										
										
										
											2010-06-21 03:12:16 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 13:39:05 -07:00
										 |  |  | void PopulateDevices(HWND hwnd) | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   IDirectInput8* idi8; | 
					
						
							|  |  |  |   if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, | 
					
						
							|  |  |  |                                 (LPVOID*)&idi8, nullptr))) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 17:08:04 +02:00
										 |  |  |   InitKeyboardMouse(idi8, hwnd); | 
					
						
							|  |  |  |   InitJoystick(idi8, hwnd); | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   idi8->Release(); | 
					
						
							| 
									
										
										
										
											2010-04-02 02:48:24 +00:00
										 |  |  | } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | } |