⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tvichw32.h

📁 《Delphi5企业级解决方案及应用剖析》参考程序 DELPHI 资料集
💻 H
字号:
/* ========================================================================
   =================    TVicHW32  DLL interface        =====================
   ==========            Shareware Version 3.0                  ===========
   ==========     Copyright (c) 1997 Victor I.Ishikeev          ===========
   ========================================================================
   ==========         mail to "victor@ivi.ugatu.ac.ru"          ===========
   ======================================================================== */


#if defined(WIN32)

#define VICFN  __stdcall
#else
#define VICFN  __pascal far
#endif // defined(WIN32)

#ifndef bool
    #define bool unsigned char
#endif
#ifdef __cplusplus
    extern "C" {
#endif

#define MaxMappedAreas             16
#define MaxPins                    17
#define MAX_RING_BUFFER            511 

typedef HANDLE (__stdcall* TOpenVxDHandle)(HANDLE); 

typedef void (__stdcall *TOnHWInterrupt)(long  HWCounter,
						                 short LPT_DataReg,
							             short LPT_StatusReg,
							             short Keyb_ScanCode);

typedef struct _LockedMemory {
	DWORD   Drv_IRQ_Counter;
	WORD    ScanCode;
	WORD    MAX_BUF_LPT;
	WORD    LPT_BASE_PORT;
	WORD    L_BUF_LPT;
	WORD    N_ADD_LPT;
	WORD    N_SEL_LPT;
    WORD    BUF_LPT[1];
} TLockedBuffer, *PLockedBuffer;

typedef struct {

    HANDLE    hDrv;
	HMODULE   hDll;

	BOOL      fRegistry;
	BOOL      fStarted;

    SC_HANDLE schSCManager;

    BOOL	  fTerminated;

    ULONG	  fInterface;     // Isa, Eisa, etc....
    ULONG	  fBus;			// Bus number
    ULONG	  fPhysLoPart;    // Bus-relative address
    ULONG     fPhysHiPart;    // Zero
    ULONG	  fTypeMem;       // 0 is memory, 1 is I/O
    ULONG	  fMemorySize;    // Length of section to map

    PVOID	  fMappedPointers[MaxMappedAreas];
    ULONG     fMappedSizes[MaxMappedAreas];
	ULONG     fMappedAddresses[MaxMappedAreas];
	short     fMappedAreas;

    PVOID     fpLockedMemory;
	PVOID     fMdl;

    HANDLE	  fLocEvent;

	long      fDebugCode;
    	
    BOOL	  fHardAccess;
   
    BOOL      fOpenDrive;

    TOnHWInterrupt	OnHWInterrupt;

    short	  fIRQNumber;
	BOOL      fIsIRQSet;
    BOOL      fMasked;
    HANDLE	  fThreadId;
    HANDLE	  fThreadHandle;
    
    WORD     *fLPTAddresses;
	WORD      fLPTBasePort;
	BYTE      fDataPorts[3];
	BYTE      fLPTNumber;
	BYTE      fLPTs;

} TVicHW32Descriptor, *PVicHW32Descriptor;


PVicHW32Descriptor  VICFN CloseTVicHW32(PVicHW32Descriptor HW32);
PVicHW32Descriptor  VICFN OpenTVicHW32(PVicHW32Descriptor HW32); 
BOOL                VICFN GetActiveHW(PVicHW32Descriptor HW32); 
		
BOOL  VICFN GetHardAccess(PVicHW32Descriptor);
void  VICFN SetHardAccess(PVicHW32Descriptor HW32, BOOL bNewValue);

short VICFN GetPortByte(PVicHW32Descriptor HW32,short PortAddr); 
void  VICFN SetPortByte(PVicHW32Descriptor HW32,short PortAddr, short nNewValue);
short VICFN GetPortWord(PVicHW32Descriptor HW32,short PortAddr);
void  VICFN SetPortWord(PVicHW32Descriptor HW32,short PortAddr, short nNewValue);
long  VICFN GetPortLong(PVicHW32Descriptor HW32,short PortAddr);
void  VICFN SetPortLong(PVicHW32Descriptor HW32,short PortAddr, long nNewValue);

long  VICFN MapPhysToLinear(PVicHW32Descriptor HW32,long PhAddr, long PhSize); 
void  VICFN UnmapMemory(PVicHW32Descriptor HW32,long PhAddr, long PhSize);

short VICFN GetMem(PVicHW32Descriptor HW32, long MappedAddr, long Offset);
void  VICFN SetMem(PVicHW32Descriptor HW32, long MappedAddr, long Offset, short nNewValue);
short VICFN GetMemW(PVicHW32Descriptor HW32,long MappedAddr, long Offset);
void  VICFN SetMemW(PVicHW32Descriptor HW32,long MappedAddr, long Offset, short nNewValue);
long  VICFN GetMemL(PVicHW32Descriptor HW32,long MappedAddr, long Offset);
void  VICFN SetMemL(PVicHW32Descriptor HW32,long MappedAddr, long Offset, long nNewValue);

BOOL  VICFN IsIRQMasked(PVicHW32Descriptor HW32); 
void  VICFN UnmaskIRQ(PVicHW32Descriptor HW32); 
void  VICFN MaskIRQ(PVicHW32Descriptor HW32); 
short VICFN GetIRQNumber(PVicHW32Descriptor HW32);
void  VICFN SetIRQ(PVicHW32Descriptor HW32,
				   short              IRQNumber,
				   TOnHWInterrupt     HWHandler);

short VICFN GetLPTNumber(PVicHW32Descriptor HW32);
void  VICFN SetLPTNumber(PVicHW32Descriptor HW32,short nNewValue);
short VICFN GetLPTNumPorts(PVicHW32Descriptor HW32);
short VICFN GetLPTBasePort(PVicHW32Descriptor HW32);

BOOL  VICFN GetPin(PVicHW32Descriptor HW32,short nPin);
void  VICFN SetPin(PVicHW32Descriptor HW32,short nPin, BOOL bNewValue);

BOOL  VICFN GetLPTAckwl(PVicHW32Descriptor HW32);
BOOL  VICFN GetLPTBusy(PVicHW32Descriptor HW32);
BOOL  VICFN GetLPTPaperEnd(PVicHW32Descriptor HW32);
BOOL  VICFN GetLPTSlct(PVicHW32Descriptor HW32);
BOOL  VICFN GetLPTError(PVicHW32Descriptor HW32); 

void  VICFN LPTInit(PVicHW32Descriptor HW32);
void  VICFN LPTSlctIn(PVicHW32Descriptor HW32);
void  VICFN LPTStrobe(PVicHW32Descriptor HW32);
void  VICFN LPTAutofd(PVicHW32Descriptor HW32,BOOL Flag);

BOOL  VICFN LPTPrintChar(PVicHW32Descriptor HW32,short ch);

long  VICFN DebugCode(PVicHW32Descriptor HW32);

#ifdef __cplusplus
	}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -