2024年4月24日发(作者:)

typedef VOID ( CALLBACK *

mPCH341_INT_ROUTINE ) ( // 中断服务程序

ULONG iStatus ); // 中断状态数据,参考

下面的位说明

// 位7-位0对应CH341的D7-D0引脚

// 位8对应CH341的ERR#引脚, 位9对应CH341的

PEMP引脚, 位10对应CH341的INT#引脚, 位11对应

CH341的SLCT引脚

HANDLE WINAPI CH341OpenDevice( // 打开

CH341设备,返回句柄,出错则无效

ULONG iIndex ); // 指定CH341设备序

号,0对应第一个设备

VOID WINAPI CH341CloseDevice( // 关闭CH341设

ULONG iIndex ); // 指定CH341设备序号

ULONG WINAPI CH341GetVersion( ); // 获得DLL版

本号,返回版本号

ULONG WINAPI CH341DriverCommand( // 直接传递

命令给驱动程序,出错则返回0,否则返回数据长度

ULONG iIndex, // 指定CH341设备序

号,V1.6以上DLL也可以是设备打开后的句柄

mPWIN32_COMMAND ioCommand ); // 命令

结构的指针

// 该程序在调用后返回数据长度,并且仍然返回命令结构,

如果是读操作,则数据返回在命令结构中,

// 返回的数据长度在操作失败时为0,操作成功时为整个

命令结构的长度,例如读一个字节,则返回

mWIN32_COMMAND_HEAD+1,

// 命令结构在调用前,分别提供:管道号或者命令功能代码,

存取数据的长度(可选),数据(可选)

// 命令结构在调用后,分别返回:操作状态代码,后续数据

的长度(可选),

// 操作状态代码是由WINDOWS定义的代码,可以参考

NTSTATUS.H,

// 后续数据的长度是指读操作返回的数据长度,数据存

放在随后的缓冲区中,对于写操作一般为0

ULONG WINAPI CH341GetDrvVersion( ); // 获得驱动

程序版本号,返回版本号,出错则返回0

BOOL WINAPI CH341ResetDevice( // 复位USB设备

ULONG iIndex ); // 指定CH341设备序号

BOOL WINAPI CH341GetDeviceDescr( // 读取设备

描述符

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存描述符

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341GetConfigDescr( // 读取配置

描述符

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存描述符

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341SetIntRoutine( // 设定中断服

务程序

ULONG iIndex, // 指定CH341设备序号

mPCH341_INT_ROUTINE iIntRoutine ); // 指定中

断服务程序,为NULL则取消中断服务,否则在中断时调用

该程序

BOOL WINAPI CH341ReadInter( // 读取中断数据

ULONG iIndex, // 指定CH341设备序号

PULONG iStatus ); // 指向一个双字单

元,用于保存读取的中断状态数据,见下行

// 位7-位0对应CH341的D7-D0引脚

// 位8对应CH341的ERR#引脚, 位9对应CH341的

PEMP引脚, 位10对应CH341的INT#引脚, 位11对应

CH341的SLCT引脚

BOOL WINAPI CH341AbortInter( // 放弃中断数据读

操作

ULONG iIndex ); // 指定CH341设备序号

BOOL WINAPI CH341SetParaMode( // 设置并口模

ULONG iIndex, // 指定CH341设备序号

ULONG iMode ); // 指定并口模式: 0为

EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM

模式

BOOL WINAPI CH341InitParallel( // 复位并初始化

并口,RST#输出低电平脉冲

ULONG iIndex, // 指定CH341设备序号

ULONG iMode ); // 指定并口模式: 0为

EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM

模式, >= 0x00000100 保持当前模式

BOOL WINAPI CH341ReadData0( // 从0#端口读取

数据块

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存读取的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341ReadData1( // 从1#端口读取

数据块

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存读取的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341AbortRead( // 放弃数据块读

操作

ULONG iIndex ); // 指定CH341设备序号

BOOL WINAPI CH341WriteData0( // 向0#端口写出

数据块

ULONG iIndex, // 指定CH341设备序号

PVOID iBuffer, // 指向一个缓冲区,放置

准备写出的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备写出的长度,返回后为实际写出的长度

BOOL WINAPI CH341WriteData1( // 向1#端口写出

数据块

ULONG iIndex, // 指定CH341设备序号

PVOID iBuffer, // 指向一个缓冲区,放置

准备写出的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备写出的长度,返回后为实际写出的长度

BOOL WINAPI CH341AbortWrite( // 放弃数据块写

操作

ULONG iIndex ); // 指定CH341设备序号

BOOL WINAPI CH341GetStatus( // 通过CH341直接

输入数据和状态

ULONG iIndex, // 指定CH341设备序号

PULONG iStatus ); // 指向一个双字单

元,用于保存状态数据,参考下面的位说明

// 位7-位0对应CH341的D7-D0引脚

// 位8对应CH341的ERR#引脚, 位9对应CH341的

PEMP引脚, 位10对应CH341的INT#引脚, 位11对应

CH341的SLCT引脚, 位23对应CH341的SDA引脚

// 位13对应CH341的BUSY/WAIT#引脚, 位14对应

CH341的AUTOFD#/DATAS#引脚,位15对应CH341的

SLCTIN#/ADDRS#引脚

BOOL WINAPI CH341ReadI2C( // 从I2C接口读取一

个字节数据

ULONG iIndex, // 指定CH341设备序号

UCHAR iDevice, // 低7位指定I2C设备

地址

UCHAR iAddr, // 指定数据单元的地址

PUCHAR oByte ); // 指向一个字节单

元,用于保存读取的字节数据

BOOL WINAPI CH341WriteI2C( // 向I2C接口写入

一个字节数据

ULONG iIndex, // 指定CH341设备序号

UCHAR iDevice, // 低7位指定I2C设备

地址

UCHAR iAddr, // 指定数据单元的地址

UCHAR iByte ); // 待写入的字节数据

BOOL WINAPI CH341EppReadData( // EPP方式读数

据: WR#=1, DS#=0, AS#=1, D0-D7=input

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存读取的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341EppReadAddr( // EPP方式读地

址: WR#=1, DS#=1, AS#=0, D0-D7=input

ULONG iIndex, // 指定CH341设备序号

PVOID oBuffer, // 指向一个足够大的缓

冲区,用于保存读取的地址数据

PULONG ioLength ); // 指向长度单元,

输入时为准备读取的长度,返回后为实际读取的长度

BOOL WINAPI CH341EppWriteData( // EPP方式写数

据: WR#=0, DS#=0, AS#=1, D0-D7=output

ULONG iIndex, // 指定CH341设备序号

PVOID iBuffer, // 指向一个缓冲区,放置

准备写出的数据

PULONG ioLength ); // 指向长度单元,

输入时为准备写出的长度,返回后为实际写出的长度

BOOL WINAPI CH341EppWriteAddr( // EPP方式写

地址: WR#=0, DS#=1, AS#=0, D0-D7=output

ULONG iIndex, // 指定CH341设备序号

PVOID iBuffer, // 指向一个缓冲区,放置

准备写出的地址数据

PULONG ioLength ); // 指向长度单元,

输入时为准备写出的长度,返回后为实际写出的长度