//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       dinputdeviceobj.h
//
//--------------------------------------------------------------------------

	// ddPaletteObj.h : Declaration of the C_dxj_DirectDrawColorControlObject
#include "direct.h"

#include "resource.h"       // main symbols

#define typedef__dxj_DirectInputDevice LPDIRECTINPUTDEVICE2

/////////////////////////////////////////////////////////////////////////////
// Direct


class C_dxj_DirectInputDeviceObject : 
	public I_dxj_DirectInputDevice,	
	public CComObjectRoot
{
public:
	C_dxj_DirectInputDeviceObject() ;
	virtual ~C_dxj_DirectInputDeviceObject();

BEGIN_COM_MAP(C_dxj_DirectInputDeviceObject)
	COM_INTERFACE_ENTRY(I_dxj_DirectInputDevice)
END_COM_MAP()

DECLARE_AGGREGATABLE(C_dxj_DirectInputDeviceObject)


public:
		 /* [hidden] */ HRESULT STDMETHODCALLTYPE InternalSetObject( 
            /* [in] */ IUnknown __RPC_FAR *lpdd);
        
         /* [hidden] */ HRESULT STDMETHODCALLTYPE InternalGetObject( 
            /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *lpdd);
        
         HRESULT STDMETHODCALLTYPE acquire( void);
        
         HRESULT STDMETHODCALLTYPE getDeviceObjectsEnum( 
            /* [in] */ long flags,
            /* [retval][out] */ I_dxj_DIEnumDeviceObjects __RPC_FAR *__RPC_FAR *ppret);
        
         HRESULT STDMETHODCALLTYPE getCapabilities( 
            /* [out][in] */ DIDevCaps __RPC_FAR *caps);
        
         HRESULT STDMETHODCALLTYPE getDeviceData( 
            /* [out][in] */ SAFEARRAY __RPC_FAR * __RPC_FAR *deviceObjectDataArray,
            /* [in] */ long flags,
            /* [retval][out] */ long __RPC_FAR *c);
        
         HRESULT STDMETHODCALLTYPE getDeviceInfo( 
            /* [retval][out] */ I_dxj_DirectInputDeviceInstance __RPC_FAR *__RPC_FAR *deviceInstance);
        
         HRESULT STDMETHODCALLTYPE getDeviceStateKeyboard( 
            /* [out][in] */ DIKeyboardState __RPC_FAR *state);
        
         HRESULT STDMETHODCALLTYPE getDeviceStateMouse( 
            /* [out][in] */ DIMouseState __RPC_FAR *state);
        
         HRESULT STDMETHODCALLTYPE getDeviceStateJoystick( 
            /* [out][in] */ DIJoyState __RPC_FAR *state);
        
         HRESULT STDMETHODCALLTYPE getDeviceStateJoystick2( 
            /* [out][in] */ DIJoyState2 __RPC_FAR *state);
        
         HRESULT STDMETHODCALLTYPE getDeviceState( 
            /* [in] */ long cb,
            /* [in] */ void __RPC_FAR *state);
        
         HRESULT STDMETHODCALLTYPE getObjectInfo( 
            /* [in] */ long obj,
            /* [in] */ long how,
            /* [retval][out] */ I_dxj_DirectInputDeviceObjectInstance __RPC_FAR *__RPC_FAR *ret);
        
         HRESULT STDMETHODCALLTYPE getProperty( 
            /* [in] */ BSTR guid,
            /* [out] */ void __RPC_FAR *propertyInfo);
        
         HRESULT STDMETHODCALLTYPE runControlPanel( 
            /* [in] */ long hwnd);
        
         HRESULT STDMETHODCALLTYPE setCooperativeLevel( 
            /* [in] */ long hwnd,
            /* [in] */ long flags);
        
         HRESULT STDMETHODCALLTYPE setCommonDataFormat( 
            /* [in] */ long format);
        
         HRESULT STDMETHODCALLTYPE setDataFormat( 
            /* [in] */ DIDataFormat __RPC_FAR *format,
            SAFEARRAY __RPC_FAR * __RPC_FAR *formatArray);
        
         HRESULT STDMETHODCALLTYPE setEventNotification( 
            /* [in] */ long hEvent);
        
         HRESULT STDMETHODCALLTYPE setProperty( 
            /* [in] */ BSTR guid,
            /* [in] */ void __RPC_FAR *propertyInfo);
        
         HRESULT STDMETHODCALLTYPE unacquire( void);
        
         HRESULT STDMETHODCALLTYPE poll( void);
        
         HRESULT STDMETHODCALLTYPE createEffect( 
            /* [in] */ BSTR effectGuid,
            /* [in] */ DIEffect __RPC_FAR *effectinfo,
            /* [retval][out] */ I_dxj_DirectInputEffect __RPC_FAR *__RPC_FAR *ret);
        
         HRESULT STDMETHODCALLTYPE createCustomEffect( 
            /* [in] */ DIEffect __RPC_FAR *effectinfo,
            /* [in] */ long channels,
            /* [in] */ long samplePeriod,
            /* [in] */ long nSamples,
            /* [in] */ SAFEARRAY __RPC_FAR * __RPC_FAR *sampledata,
            /* [retval][out] */ I_dxj_DirectInputEffect __RPC_FAR *__RPC_FAR *ret);
        
         HRESULT STDMETHODCALLTYPE sendDeviceData( 
            /* [in] */ long count,
            /* [in] */ SAFEARRAY __RPC_FAR * __RPC_FAR *data,
            /* [in] */ long flags,
            /* [retval][out] */ long __RPC_FAR *retcount);
        
         HRESULT STDMETHODCALLTYPE sendForceFeedbackCommand( 
            /* [in] */ long flags);
        
         HRESULT STDMETHODCALLTYPE getForceFeedbackState( 
            /* [retval][out] */ long __RPC_FAR *state);
                
			
		HRESULT STDMETHODCALLTYPE getEffectsEnum( long flag,
            /* [retval][out] */ I_dxj_DirectInputEnumEffects __RPC_FAR *__RPC_FAR *ret) ;
        
private:
    DECL_VARIABLE(_dxj_DirectInputDevice);
	IDirectInputDevice2 *m__dxj_DirectInputDevice2;	
	HRESULT cleanup();
	HRESULT init();
public:
	DX3J_GLOBAL_LINKS(_dxj_DirectInput)
	DWORD	nFormat;
};