/////////////////////////////////////////////////////////////////////////////
//
// This header file defines functions exported by MonitoringHostSample.exe 
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _MONITORINGHOSTSAMPLE_EXPORTS_INCLUDED_
#define _MONITORINGHOSTSAMPLE_EXPORTS_INCLUDED_

#ifdef MONITORINGHOSTSAMPLE_EXPORTS
#define MONITORINGHOSTSAMPLE_API extern "C" __declspec(dllexport)
#else
#define MONITORINGHOSTSAMPLE_API extern "C" __declspec(dllimport)
#endif

/////////////////////////////////////////////////////////////////////////////
//
// exported function names
//
/////////////////////////////////////////////////////////////////////////////

//R/O access to host application ID/version

typedef DWORD (*GET_HOST_APP_ID_PROC		)();
	//DWORD GetHostAppID()
typedef DWORD (*GET_HOST_APP_VERSION_PROC	)();
	//DWORD GetHostAppVersion()

//R/O access to current display device identification

typedef LPCSTR	(*GET_DEVICE_NAME_PROC	)();
	//LPCSTR GetDeviceName()
typedef LPCSTR	(*GET_DEVICE_ID_PROC	)();
	//LPCSTR GetDeviceID()

//R/W access to IO ports

typedef int				(*INP_PROC	)(unsigned short);
	//int inp(unsigned short port)
typedef unsigned short	(*INPW_PROC	)(unsigned short);
	//unsigned short inpw(unsigned short port)
typedef unsigned long	(*INPD_PROC	)(unsigned short);
	//unsigned long inpd(unsigned short port)

typedef int				(*OUTP_PROC	)(unsigned short, int			);
	//int outp(unsigned short port, int data)
typedef unsigned short	(*OUTPW_PROC)(unsigned short, unsigned short);
	//unsigned short outpw(unsigned short port, unsigned short data)
typedef unsigned long	(*OUTPD_PROC)(unsigned short, unsigned long	);
	//unsigned long outpd(unsigned short port, unsigned long data)

//R/W access to PCI bus configuration registers

typedef DWORD	(*READ_BUS_DATA_ULONG_PROC	)(DWORD, DWORD, DWORD);
	//DWORD ReadBusDataUlong(DWORD bus, DWORD devfn, DWORD offset)
typedef WORD	(*READ_BUS_DATA_USHORT_PROC	)(DWORD, DWORD, DWORD);
	//WORD ReadBusDataUshort(DWORD bus, DWORD devfn, DWORD offset)
typedef BYTE	(*READ_BUS_DATA_UCHAR_PROC	)(DWORD, DWORD, DWORD);
	//BYTE ReadBusDataUchar(DWORD bus, DWORD devfn, DWORD offset)

typedef void (*WRITE_BUS_DATA_ULONG_PROC	)(DWORD, DWORD, DWORD, DWORD);
	//void WriteBusDataUlong(DWORD bus, DWORD devfn, DWORD offset, DWORD data)
typedef void (*WRITE_BUS_DATA_USHORT_PROC	)(DWORD, DWORD, DWORD, WORD	);
	//void WriteBusDataUshort(DWORD bus, DWORD devfn, DWORD offset, WORD data)
typedef void (*WRITE_BUS_DATA_UCHAR_PROC	)(DWORD, DWORD, DWORD, BYTE	);
	//void WriteBusDataUchar(DWORD bus, DWORD devfn, DWORD offset, BYTE data)

//R/W access to current display device GPU registers 

typedef DWORD	(*READ_REGISTER_ULONG_PROC	)(DWORD);
	//DWORD ReadRegisterUlong(DWORD address)
typedef WORD	(*READ_REGISTER_USHORT_PROC	)(DWORD);
	//WORD ReadRegisterUshort(DWORD address)
typedef BYTE	(*READ_REGISTER_UCHAR_PROC	)(DWORD);
	//BYTE ReadRegisterUchar(DWORD address)

typedef void	(*WRITE_REGISTER_ULONG_PROC	)(DWORD, DWORD	);
	//void WriteRegisterUlong(DWORD address, DWORD data)
typedef void	(*WRITE_REGISTER_USHORT_PROC)(DWORD, WORD	);
	//void WriteRegisterUshort(DWORD address, WORD data)
typedef void	(*WRITE_REGISTER_UCHAR_PROC	)(DWORD, BYTE	);
	//void WriteRegisterUchar(DWORD address, BYTE data)

//R/W access to current display device I2C buses

typedef BYTE	(*GET_I2C_BUS_NUM_PROC	)();
	//BYTE GetI2CBusNum()
typedef BOOL	(*READ_I2C_PROC			)(BYTE,BYTE,BYTE,LPBYTE);
	//BOOL ReadI2C(BYTE bus, BYTE dev, BYTE off, LPBYTE lpData)
typedef BOOL	(*WRITE_I2C_PROC		)(BYTE,BYTE,BYTE,LPBYTE);
	//BOOL WriteI2C(BYTE bus, BYTE dev, BYTE off, LPBYTE lpData)

#endif

