2015-05-24 06:32:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// Copyright 2010 Dolphin Emulator Project
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Licensed under GPLv2+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Refer to the license.txt file included.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-19 02:27:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// XInput suffers a similar issue as XAudio2. Since Win8, it is part of the OS.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// However, unlike XAudio2 they have not made the API incompatible - so we just
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// compile against the latest version and fall back to dynamically loading the
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// old DLL.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-02-10 13:54:46 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# pragma once 
  
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <windows.h> 
  
						 
					
						
							
								
									
										
										
										
											2017-01-22 23:08:45 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <XInput.h> 
  
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-12 17:08:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "InputCommon/ControllerInterface/ControllerInterface.h" 
  
						 
					
						
							
								
									
										
										
										
											2014-02-19 02:17:31 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-19 02:27:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifndef XINPUT_DEVSUBTYPE_FLIGHT_STICK 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# error You are building this module against the wrong version of DirectX. You probably need to remove DXSDK_DIR from your include path and / or _WIN32_WINNT is wrong. 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								namespace  ciface  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  XInput  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2016-06-12 17:08:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  Init ( ) ;  
						 
					
						
							
								
									
										
										
										
											2016-10-16 13:39:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  PopulateDevices ( ) ;  
						 
					
						
							
								
									
										
										
										
											2013-10-19 02:27:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  DeInit ( ) ;  
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-16 20:07:10 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  Device  :  public  Core : : Device  
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2011-03-14 01:20:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								private :  
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  class  Button  :  public  Core : : Device : : Input 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Button ( u8  index ,  const  WORD &  buttons )  :  m_buttons ( buttons ) ,  m_index ( index )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : string  GetName ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ControlState  GetState ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  WORD &  m_buttons ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    u8  m_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  Axis  :  public  Core : : Device : : Input 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Axis ( u8  index ,  const  SHORT &  axis ,  SHORT  range )  :  m_axis ( axis ) ,  m_range ( range ) ,  m_index ( index )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : string  GetName ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ControlState  GetState ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  SHORT &  m_axis ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  SHORT  m_range ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  u8  m_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  Trigger  :  public  Core : : Device : : Input 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Trigger ( u8  index ,  const  BYTE &  trigger ,  BYTE  range ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        :  m_trigger ( trigger ) ,  m_range ( range ) ,  m_index ( index ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : string  GetName ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ControlState  GetState ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  BYTE &  m_trigger ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  BYTE  m_range ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  u8  m_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  Motor  :  public  Core : : Device : : Output 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  public : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Motor ( u8  index ,  Device *  parent ,  WORD &  motor ,  WORD  range ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        :  m_motor ( motor ) ,  m_range ( range ) ,  m_index ( index ) ,  m_parent ( parent ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    std : : string  GetName ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    void  SetState ( ControlState  state )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  private : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    WORD &  m_motor ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  WORD  m_range ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  u8  m_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Device *  m_parent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-14 01:20:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  UpdateInput ( )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Device ( const  XINPUT_CAPABILITIES &  capabilities ,  u8  index ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  std : : string  GetName ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : string  GetSource ( )  const  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  UpdateMotors ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-13 01:10:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								private :  
						 
					
						
							
								
									
										
										
										
											2016-06-24 10:43:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  XINPUT_STATE  m_state_in ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  XINPUT_VIBRATION  m_state_out { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  XINPUT_VIBRATION  m_current_state_out { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  BYTE  m_subtype ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  u8  m_index ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-02 02:48:24 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}