//////////////////////////////////////////////////////////////////////
// File - SCREEN_LIB.H
//
// Library for accessing the SCREEN card,
// Code was generated by DriverWizard.
// It accesses the hardware via WinDriver functions.
// 
//////////////////////////////////////////////////////////////////////

#ifndef _SCREEN_LIB_H_
#define _SCREEN_LIB_H_

#include "windrvr.h"
#include "pci_regs.h"
#include "bits.h"
#include "cpia.h"

#ifdef __cplusplus
extern "C" {
#endif

// In order to run the application correctly, remark the 
// unnecessary lines nd leave the VENDOR_ID and DEVICE_ID
// according the screen that you are using.

//enum { SCREEN_DEFAULT_VENDOR_ID = 0x1013 }; // Cirrus
//enum { SCREEN_DEFAULT_VENDOR_ID = 0x1023 }; // Trident
//enum { SCREEN_DEFAULT_VENDOR_ID = 0x102C }; // Chips And Technologies
enum { SCREEN_DEFAULT_VENDOR_ID = 0x1002 }; // ATI

enum { SCREEN_DEFAULT_DEVICE_ID = 0x0 };

// This line should be change according to the screen on which
// the application is running. 1024 means that the screen has 
// 1024 pixels per line.
enum { STRID = 1024 };

typedef enum
{
    SCREEN_MODE_BYTE   = 0,
    SCREEN_MODE_WORD   = 1,
    SCREEN_MODE_DWORD  = 2
} SCREEN_MODE;

typedef enum
{
    SCREEN_AD_BAR0 = AD_PCI_BAR0,
    SCREEN_AD_BAR1 = AD_PCI_BAR1,
    SCREEN_AD_BAR2 = AD_PCI_BAR2,
    SCREEN_AD_BAR3 = AD_PCI_BAR3,
    SCREEN_AD_BAR4 = AD_PCI_BAR4,
    SCREEN_AD_BAR5 = AD_PCI_BAR5,
    SCREEN_AD_EPROM = AD_PCI_BAR_EPROM,
} SCREEN_ADDR;

// Number of IO and memory ranges
enum { SCREEN_ITEMS = AD_PCI_BARS };

typedef struct SCREEN_STRUCT *SCREEN_HANDLE;

// Options for SCREEN_Open
enum { SCREEN_OPEN_USE_INT =   0x1 };

SCREEN_HANDLE SCREEN_LocateAndOpenBoard (DWORD dwVendorID, DWORD dwDeviceID, BOOL fUseInt, PVOID *pScreen);
BOOL SCREEN_Open (SCREEN_HANDLE *phSCREEN, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions);
void SCREEN_Close(SCREEN_HANDLE hSCREEN);
DWORD SCREEN_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
BOOL SCREEN_IsAddrSpaceActive(SCREEN_HANDLE hSCREEN, SCREEN_ADDR addrSpace);

void SCREEN_GetPciSlot(SCREEN_HANDLE hSCREEN, WD_PCI_SLOT *pPciSlot);

// General read/write function
void SCREEN_ReadWriteBlock(SCREEN_HANDLE hSCREEN, SCREEN_ADDR addrSpace, DWORD dwOffset, BOOL fRead, PVOID buf, DWORD dwBytes, SCREEN_MODE mode);
void SCREEN_WriteDword(SCREEN_HANDLE hSCREEN, SCREEN_ADDR addrSpace, DWORD dwOffset, DWORD data);
DWORD SCREEN_ReadPCIReg(SCREEN_HANDLE hSCREEN, DWORD dwReg);

// This string is set to an error message, if one occurs
extern CHAR SCREEN_ErrorString[];

BOOL DrawPicture(PVOID pBuffer, FRAME_INFO frameInfo, BOOL first_time, BOOL last_time);

#ifdef __cplusplus
}
#endif

#endif