Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

152 lines
4.6 KiB

//@doc
/******************************************************
**
** @module DPACK.H | Definition file for DataPackager and DataPacket
**
** Description:
** The Data Packager allows virtualization of the
** commands into the different firmware versions packet format
** DataPackager - Base class that defines the functionality of all DataPackagers
** DataPackager100 - DataPackager for Firmware 1.**
** DataPackager200 - DataPackager for Firmware 2.**
**
** Classes:
** DataPackager
** DataPackager100 - DataPackager for Firmware 1.**
** DataPackager200 - DataPackager for Firmware 2.**
** DataPacket - Array of bytes for download. If there are 32 or less items
** it is fixed on the stack if more are requested it is heap based.
** (most things use less than 32)
**
** History:
** Created 1/05/98 Matthew L. Coill (mlc)
**
** (c) 1986-1998 Microsoft Corporation. All Rights Reserved.
******************************************************/
#ifndef __DPACK_H__
#define __DPACK_H__
#include "DX_Map.hpp"
#ifndef override
#define override
#endif
#define MODIFY_CMD_200 0xF1
#define EFFECT_CMD_200 0xF2
class InternalEffect;
//
// @class DataPacket class
//
class DataPacket
{
//@access Constructor
public:
//@cmember constructor
DataPacket();
~DataPacket();
BOOL AllocateBytes(DWORD numBytes);
BYTE* m_pData;
BYTE m_pFixedData[32];
DWORD m_BytesOfData;
UINT m_AckNackMethod;
DWORD m_AckNackDelay;
DWORD m_AckNackTimeout;
DWORD m_NumberOfRetries;
};
typedef DataPacket* DataPacketPtr;
//
// @class DataPackager class
//
class DataPackager
{
//@access Constructor
public:
//@cmember constructor
DataPackager();
virtual ~DataPackager();
void SetDirectInputVersion(DWORD diVersion) { m_DirectInputVersion = diVersion; }
// Commands to be packaged
virtual HRESULT Escape(DWORD effectID, LPDIEFFESCAPE pEscape);
virtual HRESULT SetGain(DWORD gain);
virtual HRESULT SendForceFeedbackCommand(DWORD state);
virtual HRESULT GetForceFeedbackState(DIDEVICESTATE* pDeviceState);
virtual HRESULT CreateEffect(const InternalEffect& effect, DWORD diFlags);
virtual HRESULT ModifyEffect(InternalEffect& currentEffect, InternalEffect& newEffect, DWORD modFlags);
virtual HRESULT DestroyEffect(DWORD downloadID);
virtual HRESULT StartEffect(DWORD downloadID, DWORD mode, DWORD count);
virtual HRESULT StopEffect(DWORD downloadID);
virtual HRESULT GetEffectStatus(DWORD downloadID);
virtual HRESULT SetMidiChannel(BYTE channel);
virtual HRESULT ForceOut(LONG lForceData, ULONG ulAxisMask);
// Access to packages
USHORT GetNumDataPackets() const { return m_NumDataPackets; }
DataPacket* GetPacket(USHORT packet) const;
void ClearPackets();
BOOL AllocateDataPackets(USHORT numPackets);
private:
DataPacket* m_pDataPackets;
DataPacket m_pStaticPackets[3];
USHORT m_NumDataPackets;
DWORD m_DirectInputVersion;
};
//
// @class DataPackager class
//
class DataPackager100 : public DataPackager
{
//@access Constructor
public:
//@cmember constructor
DataPackager100() : DataPackager() {};
// Commands to be packaged
override HRESULT SetGain(DWORD gain);
override HRESULT SendForceFeedbackCommand(DWORD state);
override HRESULT GetForceFeedbackState(DIDEVICESTATE* pDeviceState);
override HRESULT DestroyEffect(DWORD downloadID);
override HRESULT StartEffect(DWORD downloadID, DWORD mode, DWORD count);
override HRESULT StopEffect(DWORD downloadID);
override HRESULT GetEffectStatus(DWORD downloadID);
override HRESULT SetMidiChannel(BYTE channel);
override HRESULT ForceOut(LONG lForceData, ULONG ulAxisMask);
};
//
// @class DataPackager class
//
class DataPackager200 : public DataPackager
{
//@access Constructor
public:
//@cmember constructor
DataPackager200() : DataPackager() {};
// Commands to be packaged
override HRESULT SetGain(DWORD gain);
override HRESULT SendForceFeedbackCommand(DWORD state);
override HRESULT GetForceFeedbackState(DIDEVICESTATE* pDeviceState);
override HRESULT CreateEffect(const InternalEffect& effect, DWORD diFlags);
override HRESULT DestroyEffect(DWORD downloadID);
override HRESULT StartEffect(DWORD downloadID, DWORD mode, DWORD count);
override HRESULT StopEffect(DWORD downloadID);
override HRESULT GetEffectStatus(DWORD downloadID);
override HRESULT ForceOut(LONG forceData, ULONG axisMask);
private:
BYTE EffectCommandParity(const DataPacket& packet) const;
BYTE DeviceCommandParity(const DataPacket& packet) const;
};
extern DataPackager* g_pDataPackager;
#endif __DPACK_H__