#ifndef _PCI2312_DEVICE_ #define _PCI2312_DEVICE_ //######################## 常量定义 ################################# // CreateFileObject所用的文件操作方式控制字(可通过或指令实现多种方式并操作) #define PCI2312_modeRead 0x0000 // 只读文件方式 #define PCI2312_modeWrite 0x0001 // 只写文件方式 #define PCI2312_modeReadWrite 0x0002 // 既读又写文件方式 #define PCI2312_modeCreate 0x1000 // 如果文件不存可以创建该文件,如果存在,则重建此文件,并清0 #define PCI2312_typeText 0x4000 // 以文本方式操作文件 //*********************************************************** //*********************************************************** // 用户函数接口 #ifndef _PCI2312_DRIVER_ #define DEVAPI __declspec(dllimport) #else #define DEVAPI __declspec(dllexport) #endif #ifdef __cplusplus extern "C" { #endif //######################## 常规通用函数 ################################# // 适用于本设备的最基本操作 HANDLE DEVAPI FAR PASCAL PCI2312_CreateDevice(int DeviceID = 0); // 创建设备对象 int DEVAPI FAR PASCAL PCI2312_GetDeviceCount(HANDLE hDevice); // 取得设备总台数 int DEVAPI FAR PASCAL PCI2312_GetDeviceCurrentID(HANDLE hDevice); BOOL DEVAPI FAR PASCAL PCI2312_ListDeviceDlg(HANDLE hDevice); // 列表系统当中的所有的该PCI设备 BOOL DEVAPI FAR PASCAL PCI2312_ReleaseDevice(HANDLE hDevice); // 关闭设备,禁止传输,且释放资源 //####################### 数字I/O输入输出函数 ################################# // 用户可以使用WriteRegisterULong和ReadRegisterULong等函数直接控制寄存器进行I/O // 输入输出,但使用下面两个函数更省事,它不需要您关心寄存器分配和位操作等,而只 // 需象VB等语言的属性操作那么简单地实现各开关量通道的控制。 BOOL DEVAPI FAR PASCAL PCI2312_SetDeviceDO( // 设置数字量输出状态 HANDLE hDevice, // 设备句柄 BYTE bDOSts[16]); // 开关状态 BOOL DEVAPI FAR PASCAL PCI2312_GetDeviceDI( // 取得数字量输入状态 HANDLE hDevice, // 设备句柄 BYTE bDISts[16]); // 开关状态 //####################### 中断函数 ################################# // 它由硬件信号的状态变化引起CPU产生中断事件hEventInt。 BOOL DEVAPI FAR PASCAL PCI2312_InitDeviceInt( // 初始化中断 HANDLE hDevice, // 设备句柄 HANDLE hEventInt); // 中断事件句柄,它由CreateSystemEvent创建 LONG DEVAPI FAR PASCAL PCI2312_GetDeviceIntCount(HANDLE hDevice); // 在中断初始化后,用它取得中断服务程序产生的次数 BOOL DEVAPI FAR PASCAL PCI2312_ReleaseDeviceInt(HANDLE hDevice); // 释放中断资源 //################# 内存映射寄存器直接操作及读写函数 ######################## // 适用于用户对本设备更直接、更特殊、更低层、更复杂的控制。比如根据特殊的 // 控制对象需要特殊的控制流程和控制效率时,则用户可以使用这些接口予以实现。 BOOL DEVAPI FAR PASCAL PCI2312_GetDeviceBar( // 取得指定的指定设备寄存器组BAR地址 HANDLE hDevice, // 设备对象句柄,它由CreateDevice函数创建 __int64 pbPCIBar[6]); // 返回PCI BAR所有地址,具体PCI BAR中有多少可用地址请看硬件说明书 BOOL DEVAPI FAR PASCAL PCI2312_WritePortByte(HANDLE hDevice, __int64 pbPort, BYTE Value); BOOL DEVAPI FAR PASCAL PCI2312_WritePortWord(HANDLE hDevice, __int64 pbPort, WORD Value); BOOL DEVAPI FAR PASCAL PCI2312_WritePortULong(HANDLE hDevice, __int64 pbPort, ULONG Value); BYTE DEVAPI FAR PASCAL PCI2312_ReadPortByte(HANDLE hDevice, __int64 pbPort); WORD DEVAPI FAR PASCAL PCI2312_ReadPortWord(HANDLE hDevice, __int64 pbPort); ULONG DEVAPI FAR PASCAL PCI2312_ReadPortULong(HANDLE hDevice, __int64 pbPort); //########################### 线程操作函数 ###################################### HANDLE DEVAPI FAR PASCAL PCI2312_CreateSystemEvent(void); // 创建内核事件对象,供InitDeviceInt和VB子线程等函数使用 BOOL DEVAPI FAR PASCAL PCI2312_ReleaseSystemEvent(HANDLE hEvent); // 释放内核事件对象 #ifdef __cplusplus } #endif // 自动包含驱动函数导入库 #ifndef _PCI2312_DRIVER_ #ifndef _WIN64 #pragma comment(lib, "PCI2312_32.lib") #pragma message("======== Welcome to use our art company's products!") #pragma message("======== Automatically linking with PCI2312_32.dll...") #pragma message("======== Successfully linked with PCI2312_32.dll") #else #pragma comment(lib, "PCI2312_64.lib") #pragma message("======== Welcome to use our art company's products!") #pragma message("======== Automatically linking with PCI2312_64.dll...") #pragma message("======== Successfully linked with PCI2312_64.dll") #endif #endif #endif // _PCI2312_DEVICE_