You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

559 lines
22 KiB
C

// 2003.09.10
// 2003.12.08 V1.2
// 2004.05.08 V1.3
// 2004.12.10 V1.5
//****************************************
//** Copyright (C) W.ch 1999-2004 **
//** Web: http://www.winchiphead.com **
//****************************************
//** DLL for PCI interface chip CH365 **
//** C, VC5.0 **
//****************************************
//
// PCI总线接口芯片CH365的应用层接口库 V1.5
// 南京沁恒电子有限公司 作者: W.ch 2004.12
// CH365-DLL V1.5 , Support: IO/MEM/INT
// 运行环境: Windows 98/ME, Windows 2000/XP
#ifndef _CH365_DLL_H
#define _CH365_DLL_H
#ifdef __cplusplus
extern "C" {
#endif
#define mOFFSET( s, m ) ( (ULONG) & ( ( ( s * ) 0 ) -> m ) ) // 定义获取结构成员相对偏移地址的宏
#ifndef max
#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // 较大值
#endif
#ifndef min
#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // 较小值
#endif
#ifdef ExAllocatePool
#undef ExAllocatePool // 删除带TAG的内存分配
#endif
#ifndef NTSTATUS
typedef LONG NTSTATUS; // 返回状态
#endif
typedef struct _PCI_CONFIG { // 定义PCI配置空间数据结构
USHORT mPcVendorId; // 00H 供应商标识
USHORT mPcDeviceId; // 02H 设备标识
USHORT mPcCommandReg; // 04H 命令寄存器
USHORT mPcStatusReg; // 06H 状态寄存器
UCHAR mPcRevisionId; // 08H 修改标识
UCHAR mPcProgramIf; // 09H 寄存器级编程接口
UCHAR mPcSubClass; // 0AH 子类代码
UCHAR mPcBaseClass; // 0BH 基本分类代码
UCHAR mPcCacheLine; // 0CH 缓存行长度
UCHAR mPcLatenTimer; // 0DH 延迟计数器
UCHAR mPcHeaderType; // 0EH 头标类型
UCHAR mPcBistReg; // 0FH 内含自测试寄存器
ULONG mPcBaseAddr0; // 10H 基址寄存器0
ULONG mPcBaseAddr1; // 14H 基址寄存器1
ULONG mPcBaseAddr2; // 18H 基址寄存器2
ULONG mPcBaseAddr3; // 1CH 基址寄存器3
ULONG mPcBaseAddr4; // 20H 基址寄存器4
ULONG mPcBaseAddr5; // 24H 基址寄存器5
ULONG mPcCardCis; // 28H
USHORT mPcSubSysVen; // 2CH 子系统供应商标识
USHORT mPcSubSysDev; // 2EH 子系统设备标识
ULONG mPcExpansRom; // 30H 扩展ROM基址寄存器
UCHAR mPcCapPtr; // 34H
UCHAR mPcReserved1[3]; // 35H
ULONG mPcReserved2; // 38H
UCHAR mPcInterLine; // 3CH 中断线寄存器
UCHAR mPcInterPin; // 3DH 中断引脚寄存器
UCHAR mPcMinGrant; // 3EH
UCHAR mPcMaxLatency; // 3FH
} mPCI_CONFIG, *mPPCI_CONFIG;
typedef struct _PCI_EXP_ROM { // PCI扩展ROM的数据结构
UCHAR mPerRomSig[4]; // 00H PCI扩展ROM签名字符串'PCIR'
USHORT mPerVendorId; // 04H 供应商标识
USHORT mPerDeviceId; // 06H 设备标识
USHORT mPerVpdPtr; // 08H 重要产品数据指针
USHORT mPerStrucLen; // 0AH PCI扩展ROM数据结构的长度
UCHAR mPerRevision; // 0CH PCI扩展ROM数据结构的修改版本
UCHAR mPerProgramIf; // 0DH 寄存器级编程接口
UCHAR mPerSubClass; // 0EH 子类代码
UCHAR mPerBaseClass; // 0FH 基本分类代码
USHORT mPerImageLen; // 10H 映像长度
USHORT mPerImageRev; // 12H 映像中代码/数据的修改版本
UCHAR mPerCodeType; // 14H 代码类型
UCHAR mPerIndicator; // 15H 映像指示标志
USHORT mPerReserved; // 16H
} mPCI_EXP_ROM, *mPPCI_EXP_ROM;
typedef struct _CH365_CFG_REG { // CH365芯片的配置寄存器
mPCI_CONFIG mCh365CfgPci; // 00H-3FH,共64字节为标准PCI配置空间
UCHAR mCh365CfgCtrl; // 40H 芯片控制寄存器,高5位只读
UCHAR mCh365CfgDin; // 41H 8位总线输入端口,只读
UCHAR mCh365CfgState; // 42H 芯片状态寄存器,只读
UCHAR mCh365CfgResv; // 43H
} mCH365_CFG_REG, *mPCH365_CFG_REG;
typedef struct _CH365_IO_REG { // CH365芯片的I/O空间
UCHAR mCh365IoPort[0xf0]; // 00H-EFH,共240字节为标准的I/O端口
union { // 以字或者以字节为单位进行存取
USHORT mCh365MemAddr; // F0H 存储器接口: A15-A0地址设定寄存器
struct { // 以字节为单位进行存取
UCHAR mCh365MemAddrL; // F0H 存储器接口: A7-A0地址设定寄存器
UCHAR mCh365MemAddrH; // F1H 存储器接口: A15-A8地址设定寄存器
};
};
UCHAR mCh365IoResv2; // F2H
UCHAR mCh365MemData; // F3H 存储器接口: 存储器数据存取寄存器
UCHAR mCh365I2cData; // F4H I2C串行接口: I2C数据存取寄存器
UCHAR mCh365I2cCtrl; // F5H I2C串行接口: I2C控制和状态寄存器
UCHAR mCh365I2cAddr; // F6H I2C串行接口: I2C地址设定寄存器
UCHAR mCh365I2cDev; // F7H I2C串行接口: I2C设备地址和命令寄存器
UCHAR mCh365IoCtrl; // F8H 芯片控制寄存器,高5位只读
UCHAR mCh365IoBuf; // F9H 本地数据输入缓存寄存器
UCHAR mCh365Speed; // FAH 芯片速度控制寄存器
UCHAR mCh365IoResv3; // FBH
UCHAR mCh365IoTime; // FCH 硬件循环计数寄存器
UCHAR mCh365IoResv4[3]; // FDH
} mCH365_IO_REG, *mPCH365_IO_REG;
typedef struct _CH365_MEM_REG { // CH365芯片的存储器空间
UCHAR mCh365MemPort[0x8000]; // 0000H-7FFFH,共32768字节为标准的存储器单元
} mCH365_MEM_REG, *mPCH365_MEM_REG;
typedef struct _WIN32_COMMAND { // 定义WIN32命令接口结构
union {
ULONG mFunction; // 输入时指定功能代码
NTSTATUS mStatus; // 输出时返回操作状态
};
PVOID mAddress; // 起始地址,返回地址
ULONG mLength; // 存取长度,返回后续数据的长度
UCHAR mBuffer[4]; // 数据缓冲区,长度为0至32KB
} mWIN32_COMMAND, *mPWIN32_COMMAND;
// WIN32应用层接口命令
#define IOCTL_CH365_COMMAND ( FILE_DEVICE_UNKNOWN << 16 | FILE_ANY_ACCESS << 14 | 0x0f36 << 2 | METHOD_BUFFERED ) // 专用接口
#define mWIN32_COMMAND_HEAD mOFFSET( mWIN32_COMMAND, mBuffer ) // WIN32命令接口的头长度
#define mCH365_MAX_NUMBER 16 // 最多同时连接的CH365数
#define mMAX_BUFFER_LENGTH max( sizeof( mCH365_IO_REG ), sizeof( mCH365_MEM_REG ) ) // 数据缓冲区最大长度
#define mMAX_COMMAND_LENGTH ( mWIN32_COMMAND_HEAD + mMAX_BUFFER_LENGTH ) // 最大数据长度加上命令结构头的长度
#define mCH365_MEM_BASE_AUTO ( (PVOID)0xffffffff ) // 自动设定CH365的存储器基址
#define mCH365_INT_TOOL_LINE_AUTO 0xffffffff // 自动检测CH365的中断号
// 寄存器的位定义
#define mBitAddr15Out 0x01 // 设定A15输出值,1*:high,0:low
#define mBitSysExtOut 0x02 // 设定SYS_EX输出值,1:high,0*:low
#define mBitIntAction 0x04 // 设定中断激活状态,1:action,0*:inaction
#define mBitPciIdDef 0x01 // 只读,PCI设备标识的当前选择,1*:default,0:external
#define mBitPortHit 0x04 // 只读,本地硬件定址功能的启用状态,1:启用,0*:禁用
#define mBitInterRom 0x10 // 只读,内部Mini-ROM功能的启用状态,1:启用,0*:禁用
#define mBitSysExtOe 0x40 // 只读,SYS_EX输出三态控制/输出使能,1*:启用,0:禁用
#define mBitIntEnable 0x80 // 只读,中断功能的启用状态,1:启用,0*:禁用
#define mBitI2cStatus 0x01 // I2C接口的操作控制和状态,1:开始/正在操作,0*:空闲/操作完成
#define mBitI2cSclOut 0x80 // 选择I2C接口的SCL输出,1:SYS_EX,0*:A15
#define mBitSpeedAct 0x07 // 速度控制,激活状态的脉冲宽度,实际宽度为该值乘以30nS
#define mBitSpeedInact 0x10 // 速度控制,非激活状态的空闲宽度,1:前45nS/后15nS,0:前15nS/后15nS
#define mBitSpeedPreft 0x80 // 速度控制,预取状态控制位,1:预取位有效,0:预取位无效
// 应用层接口的功能代码
#define mFuncNoOperation 0x00000000 // 无操作
#define mFuncGetVersion 0x00000001 // 获取驱动程序版本号
#define mFuncGetIoBaseAddr 0x00000004 // 读取I/O端口基址
#define mFuncSetIoBaseAddr 0x00000005 // 设置I/O端口基址
#define mFuncGetMemBaseAddr 0x00000006 // 读取存储器基址
#define mFuncSetMemBaseAddr 0x00000007 // 设置存储器基址,自动设定存储器基址
#define mFuncGetInterLine 0x00000008 // 读取中断号
#define mFuncSetInterLine 0x00000009 // 设置中断号,自动检测中断号
#define mFuncWaitInterrupt 0x0000000a // 等待中断,直到CH365产生中断
#define mFuncAbortWaitInter 0x0000000b // 放弃等待中断,终止等待
#define mFuncSetExclusive 0x0000000c // 设置独占使用
#define mFuncReadIoByte 0x00000010 // 读取输入输出端口,在同一个端口地址以字节为单位连续读取
#define mFuncReadIoWord 0x00000011 // 读取输入输出端口,在同一个端口地址以字为单位连续读取
#define mFuncReadIoDword 0x00000012 // 读取输入输出端口,在同一个端口地址以双字为单位连续读取
#define mFuncReadIoBlock 0x00000013 // 读取输入输出端口,每读取一个字节,端口地址加一
#define mFuncWriteIoByte 0x00000014 // 写入输入输出端口,在同一个端口地址以字节为单位连续写入
#define mFuncWriteIoWord 0x00000015 // 写入输入输出端口,在同一个端口地址以字为单位连续写入
#define mFuncWriteIoDword 0x00000016 // 写入输入输出端口,在同一个端口地址以双字为单位连续写入
#define mFuncWriteIoBlock 0x00000017 // 写入输入输出端口,每写入一个字节,端口地址加一
#define mFuncReadMemByte 0x00000018 // 读取存储器/寄存器
#define mFuncReadMemWord 0x00000019 // 读取存储器/寄存器
#define mFuncReadMemDword 0x0000001a // 读取存储器/寄存器
#define mFuncWriteMemByte 0x0000001c // 写入存储器/寄存器
#define mFuncWriteMemWord 0x0000001d // 写入存储器/寄存器
#define mFuncWriteMemDword 0x0000001e // 写入存储器/寄存器
#define mFuncReadConfig 0x00000020 // 读取PCI配置空间
#define mFuncWriteConfig 0x00000021 // 写入PCI配置空间
#define mFuncReadBuffer1 0x00000024 // 读取中断命令缓冲区1
#define mFuncWriteBuffer1 0x00000025 // 写入中断命令缓冲区1
#define mFuncReadBuffer2 0x00000026 // 读取中断命令缓冲区2
#define mFuncWriteBuffer2 0x00000027 // 写入中断命令缓冲区2
typedef VOID ( CALLBACK * mPCH365_INT_ROUTINE ) ( VOID ); // 中断服务程序
HANDLE WINAPI CH365OpenDevice( // 打开CH365设备,返回句柄,出错则无效
BOOL iEnableMemory, // 是否需要支持存储器
BOOL iEnableInterrupt ); // 是否需要支持中断
VOID WINAPI CH365CloseDevice( ); // 关闭CH365设备
ULONG WINAPI CH365GetVersion( ); // 获得DLL版本号,返回版本号
ULONG WINAPI CH365DriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
mPWIN32_COMMAND ioCommand ); // 命令结构的指针
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
// 命令结构在调用前,分别提供:命令功能代码,起始地址(可选),存取数据的长度(可选),
// 命令结构在调用后,分别返回:操作状态代码,返回的基址(可选),后续数据的长度(可选),
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
// 返回的基址只适用于下列命令:获取I/O基址,获取存储器基址,获取中断号,对于其它命令则保持输入时的起始地址
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
ULONG WINAPI CH365GetDrvVersion( ); // 获得驱动程序版本号,返回版本号,出错则返回0
BOOL WINAPI CH365GetIoBaseAddr( // 获取I/O端口的基址
mPCH365_IO_REG *oIoBaseAddr ); // 保存I/O端口基址的单元地址
BOOL WINAPI CH365SetIoBaseAddr( // 设定I/O端口的基址
mPCH365_IO_REG iIoBaseAddr ); // 指定I/O端口基址
BOOL WINAPI CH365GetMemBaseAddr( // 获取存储器的基址
mPCH365_MEM_REG *oMemBaseAddr ); // 保存存储器基址的单元地址
BOOL WINAPI CH365SetMemBaseAddr( // 设定存储器的基址
mPCH365_MEM_REG iMemBaseAddr ); // 指定存储器基址,为0则关闭存储器,为-1则自动设定
BOOL WINAPI CH365GetIntLine( // 获取中断号
PULONG oIntLine ); // 保存中断号的单元地址
BOOL WINAPI CH365SetIntLine( // 设定中断号
ULONG iIntLine ); // 指定中断号,为0则关闭中断,为-1则自动检测并设定
BOOL WINAPI CH365WaitInterrupt( ); // 等待中断事件
BOOL WINAPI CH365AbortWaitInt( ); // 放弃等待中断
BOOL WINAPI CH365SetIntRoutine( // 设定中断服务程序
mPCH365_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
BOOL WINAPI CH365ReadIntCommand( // 读取中断命令缓冲区
mPWIN32_COMMAND oCommand, // 指向一个足够大的缓冲区,用于保存读取的命令结构
ULONG iCmdIndex ); // 中断命令序号,为1或者2
BOOL WINAPI CH365WriteIntCommand( // 写入中断命令缓冲区
mPWIN32_COMMAND iCommand, // 指向作为中断命令的命令结构
ULONG iCmdIndex ); // 中断命令序号,为1或者2
BOOL WINAPI CH365ReadIoByte( // 从I/O端口读取一个字节
PVOID iAddr, // 指定I/O端口的地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365ReadIoWord( // 从I/O端口读取一个字
PVOID iAddr, // 指定I/O端口的地址
PUSHORT oWord ); // 指向一个字单元,用于保存读取的字数据
BOOL WINAPI CH365ReadIoDword( // 从I/O端口读取一个双字
PVOID iAddr, // 指定I/O端口的地址
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
BOOL WINAPI CH365WriteIoByte( // 向I/O端口写入一个字节
PVOID iAddr, // 指定I/O端口的地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365WriteIoWord( // 向I/O端口写入一个字
PVOID iAddr, // 指定I/O端口的地址
USHORT iWord ); // 待写入的字数据
BOOL WINAPI CH365WriteIoDword( // 向I/O端口写入一个双字
PVOID iAddr, // 指定I/O端口的地址
ULONG iDword ); // 待写入的双字数据
BOOL WINAPI CH365ReadMemByte( // 从存储器读取一个字节
PVOID iAddr, // 指定存储器的地址,虚拟地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365ReadMemDword( // 从存储器读取一个双字
PVOID iAddr, // 指定存储器的地址,虚拟地址
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
BOOL WINAPI CH365WriteMemByte( // 向存储器写入一个字节
PVOID iAddr, // 指定存储器的地址,虚拟地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365WriteMemDword( // 向存储器写入一个双字
PVOID iAddr, // 指定存储器的地址,虚拟地址
ULONG iDword ); // 待写入的双字数据
BOOL WINAPI CH365ReadConfig( // 从配置空间读取一个字节数据
PVOID iOffset, // 指定偏移地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365WriteConfig( // 向配置空间写入一个字节数据
PVOID iOffset, // 指定偏移地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365SetA15_A8( // 设置高地址,即设置A15-A8的输出
UCHAR iA15_A8 ); // 位7-位0对应A15-A8的输出,1为高电平,0为低电平
BOOL WINAPI CH365ReadI2C( // 从I2C接口读取一个字节数据
UCHAR iDevice, // 低7位指定I2C设备地址
UCHAR iAddr, // 指定数据单元的地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365WriteI2C( // 向I2C接口写入一个字节数据
UCHAR iDevice, // 低7位指定I2C设备地址
UCHAR iAddr, // 指定数据单元的地址
UCHAR iByte ); // 待写入的字节数据
HANDLE WINAPI CH365mOpenDevice( // 打开CH365设备,返回句柄,出错则无效
ULONG iIndex, // 指定CH365设备序号,0对应第一个设备
BOOL iEnableMemory, // 是否需要支持存储器
BOOL iEnableInterrupt ); // 是否需要支持中断
VOID WINAPI CH365mCloseDevice( // 关闭CH365设备
ULONG iIndex ); // 指定CH365设备序号
ULONG WINAPI CH365mDriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
ULONG iIndex, // 指定CH365设备序号
mPWIN32_COMMAND ioCommand ); // 命令结构的指针
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
// 命令结构在调用前,分别提供:命令功能代码,起始地址(可选),存取数据的长度(可选),
// 命令结构在调用后,分别返回:操作状态代码,返回的基址(可选),后续数据的长度(可选),
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
// 返回的基址只适用于下列命令:获取I/O基址,获取存储器基址,获取中断号,对于其它命令则保持输入时的起始地址
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
BOOL WINAPI CH365mGetIoBaseAddr( // 获取I/O端口的基址
ULONG iIndex, // 指定CH365设备序号
mPCH365_IO_REG *oIoBaseAddr ); // 保存I/O端口基址的单元地址
BOOL WINAPI CH365mSetIoBaseAddr( // 设定I/O端口的基址
ULONG iIndex, // 指定CH365设备序号
mPCH365_IO_REG iIoBaseAddr ); // 指定I/O端口基址
BOOL WINAPI CH365mGetMemBaseAddr( // 获取存储器的基址
ULONG iIndex, // 指定CH365设备序号
mPCH365_MEM_REG *oMemBaseAddr ); // 保存存储器基址的单元地址
BOOL WINAPI CH365mSetMemBaseAddr( // 设定存储器的基址
ULONG iIndex, // 指定CH365设备序号
mPCH365_MEM_REG iMemBaseAddr ); // 指定存储器基址,为0则关闭存储器,为-1则自动设定
BOOL WINAPI CH365mGetIntLine( // 获取中断号
ULONG iIndex, // 指定CH365设备序号
PULONG oIntLine ); // 保存中断号的单元地址
BOOL WINAPI CH365mSetIntLine( // 设定中断号
ULONG iIndex, // 指定CH365设备序号
ULONG iIntLine ); // 指定中断号,为0则关闭中断,为-1则自动检测并设定
BOOL WINAPI CH365mWaitInterrupt( // 等待中断事件
ULONG iIndex ); // 指定CH365设备序号
BOOL WINAPI CH365mAbortWaitInt( // 放弃等待中断
ULONG iIndex ); // 指定CH365设备序号
BOOL WINAPI CH365mSetIntRoutine( // 设定中断服务程序
ULONG iIndex, // 指定CH365设备序号
mPCH365_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
BOOL WINAPI CH365mReadIntCommand( // 读取中断命令缓冲区
ULONG iIndex, // 指定CH365设备序号
mPWIN32_COMMAND oCommand, // 指向一个足够大的缓冲区,用于保存读取的命令结构
ULONG iCmdIndex ); // 中断命令序号,为1或者2
BOOL WINAPI CH365mWriteIntCommand( // 写入中断命令缓冲区
ULONG iIndex, // 指定CH365设备序号
mPWIN32_COMMAND iCommand, // 指向作为中断命令的命令结构
ULONG iCmdIndex ); // 中断命令序号,为1或者2
BOOL WINAPI CH365mReadIoByte( // 从I/O端口读取一个字节
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365mReadIoWord( // 从I/O端口读取一个字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
PUSHORT oWord ); // 指向一个字单元,用于保存读取的字数据
BOOL WINAPI CH365mReadIoDword( // 从I/O端口读取一个双字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
BOOL WINAPI CH365mWriteIoByte( // 向I/O端口写入一个字节
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365mWriteIoWord( // 向I/O端口写入一个字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
USHORT iWord ); // 待写入的字数据
BOOL WINAPI CH365mWriteIoDword( // 向I/O端口写入一个双字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定I/O端口的地址
ULONG iDword ); // 待写入的双字数据
BOOL WINAPI CH365mReadMemByte( // 从存储器读取一个字节
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定存储器的地址,虚拟地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365mReadMemDword( // 从存储器读取一个双字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定存储器的地址,虚拟地址
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
BOOL WINAPI CH365mWriteMemByte( // 向存储器写入一个字节
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定存储器的地址,虚拟地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365mWriteMemDword( // 向存储器写入一个双字
ULONG iIndex, // 指定CH365设备序号
PVOID iAddr, // 指定存储器的地址,虚拟地址
ULONG iDword ); // 待写入的双字数据
BOOL WINAPI CH365mReadConfig( // 从配置空间读取一个字节数据
ULONG iIndex, // 指定CH365设备序号
PVOID iOffset, // 指定偏移地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365mWriteConfig( // 向配置空间写入一个字节数据
ULONG iIndex, // 指定CH365设备序号
PVOID iOffset, // 指定偏移地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365mSetA15_A8( // 设置高地址,即设置A15-A8的输出
ULONG iIndex, // 指定CH365设备序号
UCHAR iA15_A8 ); // 位7-位0对应A15-A8的输出,1为高电平,0为低电平
BOOL WINAPI CH365mReadI2C( // 从I2C接口读取一个字节数据
ULONG iIndex, // 指定CH365设备序号
UCHAR iDevice, // 低7位指定I2C设备地址
UCHAR iAddr, // 指定数据单元的地址
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
BOOL WINAPI CH365mWriteI2C( // 向I2C接口写入一个字节数据
ULONG iIndex, // 指定CH365设备序号
UCHAR iDevice, // 低7位指定I2C设备地址
UCHAR iAddr, // 指定数据单元的地址
UCHAR iByte ); // 待写入的字节数据
BOOL WINAPI CH365DelayUS( // 延时指定微秒
ULONG iDelay ); // 指定要延时的微秒数,如果延时小于10则误差较大
BOOL WINAPI CH365mAccessBlock( // 读取或者写入数据块
ULONG iIndex, // 指定CH365设备序号
ULONG iAccessMode, // 参考下面的说明
PVOID iAddr, // 指定I/O端口或者存储器的地址
PVOID ioBuffer, // 指向输入或者输出的缓冲区
ULONG iLength ); // 数据块长度,也就是读取或者写入的字节数,长度不超过32KB
// iAccessMode 定义如下
// #define mFuncReadIoByte 0x00000010 // 读取输入输出端口,在同一个端口地址以字节为单位连续读取,最大长度32KB
// #define mFuncReadIoWord 0x00000011 // 读取输入输出端口,在同一个端口地址以字为单位连续读取,最大长度32KB
// #define mFuncReadIoDword 0x00000012 // 读取输入输出端口,在同一个端口地址以双字为单位连续读取,最大长度32KB
// #define mFuncReadIoBlock 0x00000013 // 读取输入输出端口,每读取一个字节,端口地址加一,最大长度240B(从偏移地址00H读到EFH)
// #define mFuncWriteIoByte 0x00000014 // 写入输入输出端口,在同一个端口地址以字节为单位连续写入,最大长度32KB
// #define mFuncWriteIoWord 0x00000015 // 写入输入输出端口,在同一个端口地址以字为单位连续写入,最大长度32KB
// #define mFuncWriteIoDword 0x00000016 // 写入输入输出端口,在同一个端口地址以双字为单位连续写入,最大长度32KB
// #define mFuncWriteIoBlock 0x00000017 // 写入输入输出端口,每写入一个字节,端口地址加一,最大长度240B(从偏移地址00H写到EFH)
// #define mFuncReadMemByte 0x00000018 // 读取存储器/寄存器,以字节为单位连续读,每读取一个字节,地址加一,最大长度32KB(从偏移地址0000H读到7FFFH)
// #define mFuncReadMemWord 0x00000019 // 读取存储器/寄存器,以字为单位连续读,每读取一个字,地址加二,最大长度32KB(从偏移地址0000H读到7FFFH)
// #define mFuncReadMemDword 0x0000001a // 读取存储器/寄存器,以双字为单位连续读,每读取一个字节,地址加四,最大长度32KB(从偏移地址0000H读到7FFFH)
// #define mFuncWriteMemByte 0x0000001c // 写入存储器/寄存器,以字节为单位连续写,每读取一个字节,地址加一,最大长度32KB(从偏移地址0000H写到7FFFH)
// #define mFuncWriteMemWord 0x0000001d // 写入存储器/寄存器,以字为单位连续写,每读取一个字,地址加二,最大长度32KB(从偏移地址0000H写到7FFFH)
// #define mFuncWriteMemDword 0x0000001e // 写入存储器/寄存器,以双字为单位连续写,每读取一个双字,地址加四,最大长度32KB(从偏移地址0000H写到7FFFH)
// 其它方式不支持,上述定义在文件CH365DLL.H中
BOOL WINAPI CH365mSetExclusive( // 设置独占使用当前CH365设备
ULONG iIndex, // 指定CH365设备序号
ULONG iExclusive ); // 为0则设备可以共享使用,非0则独占使用
#ifdef __cplusplus
}
#endif
#endif // _CH365_DLL_H