//**************************************************************************
//
//		SWFORCE.H -- Xena Gaming Project
//
//		Version 3.XX
//
//		Copyright (c) 1998 Microsoft Corporation. All rights reserved.
//
//		@doc
//		@header	SWFORCE.H | Global includes and definitions for force feedback driver interface
//**************************************************************************

#ifndef	__SWFORCE_H__
#define	__SWFORCE_H__

#ifdef	SAITEK
#define	SWFORCE_NAME				"SAIFORCE"
#else
#define	SWFORCE_NAME				"SWFORCE"
#endif

//---------------------------------------------------------------------------
//			Types
//---------------------------------------------------------------------------

typedef	struct
{
#pragma pack(1)
	ULONG	cBytes;
	LONG	dwXVel;
	LONG	dwYVel;
	LONG	dwXAccel;
	LONG	dwYAccel;
	ULONG	dwEffect;
	ULONG	dwDeviceStatus;
#pragma pack()
}	JOYCHANNELSTATUS,	*PJOYCHANNELSTATUS;

typedef struct
{
#pragma pack(1)
	ULONG	cBytes;	
	ULONG	dwProductID;
	ULONG	dwFWVersion;
#pragma pack()
} PRODUCT_ID, *PPRODUCT_ID;

//---------------------------------------------------------------------------
//			IOCTLs
//---------------------------------------------------------------------------

#define IOCTL_GET_VERSION	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_GET_VERSION
// lpvInBuffer			= NULL
// cbInBuffer			= 0
// lpvOutBuffer		= PULONG (HIWORD = Ver. high, LoWord - Ver. Low)
// cbOutBuffer			= sizeof(ULONG)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_GETSTATUS	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_GETSTATUS
// lpvInBuffer			= PJOYCHANNELSTATUS
// cbInBuffer			= sizeof(JOYCHANNELSTATUS)
// lpvOutBuffer		= PJOYCHANNELSTATUS
// cbOutBuffer			= sizeof(JOYCHANNELSTATUS)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_GETID	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_GETID
// lpvInBuffer			= PPRODUCT_ID
// cbInBuffer			= sizeof(PRODUCT_ID)
// lpvOutBuffer		= PPRODUCT_ID
// cbOutBuffer			= sizeof(PRODUCT_ID)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_GETACKNACK	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_GETACKNAK
// lpvInBuffer			= PULONG
// cbInBuffer			= sizeof(ULONG)
// lpvOutBuffer		= PULONG
// cbOutBuffer			= sizeof(ULONG)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_GETSYNC	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_GETSYNC
// lpvInBuffer			= PULONG
// cbInBuffer			= sizeof(ULONG)
// lpvOutBuffer		= PULONG
// cbOutBuffer			= sizeof(ULONG)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_GETNACKACK	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x806, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_GETNACKACK
// lpvInBuffer			= PULONG
// cbInBuffer			= sizeof(ULONG)
// lpvOutBuffer		= PULONG
// cbOutBuffer			= sizeof(ULONG)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_SETPORT		CTL_CODE(FILE_DEVICE_UNKNOWN, 0x807, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_SETPORT
// lpvInBuffer			= PULONG
// cbInBuffer			= sizeof(ULONG)
// lpvOutBuffer		= PULONG
// cbOutBuffer			= sizeof(ULONG)
// lpcbBytesReturned	= Bytes returned based on result

#define IOCTL_SWFORCE_SENDDATA	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_SENDDATA
// lpvInBuffer			= PUCHAR
// cbInBuffer			= Bytes to send
// lpvOutBuffer		= PUCHAR
// cbOutBuffer			= Bytes to send
// lpcbBytesReturned	= Bytes sent

#define IOCTL_SWFORCE_RESET	CTL_CODE(FILE_DEVICE_UNKNOWN, 0x809, METHOD_BUFFERED, FILE_ANY_ACCESS)

// dwIoControlCode	= IOCTL_SWFORCE_RESET
// lpvInBuffer			= NULL
// cbInBuffer			= 0
// lpvOutBuffer		= LPDWORD
// cbOutBuffer			= sizeof(DWORD)
// lpcbBytesReturned	= Bytes returned based on result

#endif	//__SWFORCE_H__