📄 ch341dll.pas
字号:
Function CH341DriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
iIndex:cardinal; // 指定CH341设备序号,V1.6以上DLL也可以是设备打开后的句柄
ioCommand:mPWIN32_COMMAND):cardinal;Stdcall; external 'CH341DLL.DLL'; // 命令结构的指针
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
// 命令结构在调用前,分别提供:管道号或者命令功能代码,存取数据的长度(可选),数据(可选)
// 命令结构在调用后,分别返回:操作状态代码,后续数据的长度(可选),
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
Function CH341GetDrvVersion( ):cardinal;Stdcall; external 'CH341DLL.DLL'; // 获得驱动程序版本号,返回版本号,出错则返回0
Function CH341ResetDevice( // 复位USB设备
iIndex:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定CH341设备序号
Function CH341GetDeviceDescr( // 读取设备描述符
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存描述符
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341GetConfigDescr( // 读取配置描述符
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存描述符
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341SetIntRoutine( // 设定中断服务程序
iIndex:cardinal; // 指定CH341设备序号
iIntRoutine:mPCH341_INT_ROUTINE ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
Function CH341ReadInter( // 读取中断数据
iIndex:cardinal; // 指定CH341设备序号
iStatus:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向一个双字单元,用于保存读取的中断状态数据,见下行
// 位7-位0对应CH341的D7-D0引脚
// 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚
Function CH341AbortInter( // 放弃中断数据读操作
iIndex:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定CH341设备序号
Function CH341SetParaMode( // 设置并口模式
iIndex:cardinal; // 指定CH341设备序号
iMode:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定并口模式: 0为EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM模式
Function CH341InitParallel( // 复位并初始化并口,RST#输出低电平脉冲
iIndex:cardinal; // 指定CH341设备序号
iMode:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定并口模式: 0为EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM模式, >= 0x00000100 保持当前模式
Function CH341ReadData0( // 从0#端口读取数据块
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341ReadData1( // 从1#端口读取数据块
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341AbortRead( // 放弃数据块读操作
iIndex:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定CH341设备序号
Function CH341WriteData0( // 向0#端口写出数据块
iIndex:cardinal; // 指定CH341设备序号
iBuffer:PVOID; // 指向一个缓冲区,放置准备写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341WriteData1( // 向1#端口写出数据块
iIndex:cardinal; // 指定CH341设备序号
iBuffer:PVOID; // 指向一个缓冲区,放置准备写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341AbortWrite( // 放弃数据块写操作
iIndex:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定CH341设备序号
Function CH341GetStatus( // 通过CH341直接输入数据和状态
iIndex:cardinal; // 指定CH341设备序号
iStatus:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向一个双字单元,用于保存状态数据,参考下面的位说明
// 位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#引脚
Function CH341ReadI2C( // 从I2C接口读取一个字节数据
iIndex:cardinal; // 指定CH341设备序号
iDevice:byte; // 低7位指定I2C设备地址
iAddr:byte; // 指定数据单元的地址
oByte:Pbytearray ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向一个字节单元,用于保存读取的字节数据
Function CH341WriteI2C( // 向I2C接口写入一个字节数据
iIndex:cardinal; // 指定CH341设备序号
iDevice:byte; // 低7位指定I2C设备地址
iAddr:byte; // 指定数据单元的地址
iByte:byte ):boolean;Stdcall; external 'CH341DLL.DLL'; // 待写入的字节数据
Function CH341EppReadData( // EPP方式读数据: WR#=1, DS#=0, AS#=1, D0-D7=input
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341EppReadAddr( // EPP方式读地址: WR#=1, DS#=1, AS#=0, D0-D7=input
iIndex:cardinal; // 指定CH341设备序号
oBuffer:pvoid; // 指向一个足够大的缓冲区,用于保存读取的地址数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341EppWriteData( // EPP方式写数据: WR#=0, DS#=0, AS#=1, D0-D7=output
iIndex:cardinal; // 指定CH341设备序号
iBuffer:pvoid; // 指向一个缓冲区,放置准备写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341EppWriteAddr( // EPP方式写地址: WR#=0, DS#=1, AS#=0, D0-D7=output
iIndex:cardinal; // 指定CH341设备序号
iBuffer:PVOID; // 指向一个缓冲区,放置准备写出的地址数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341EppSetAddr( // EPP方式设置地址: WR#=0, DS#=1, AS#=0, D0-D7=output
iIndex:cardinal; // 指定CH341设备序号
iAddr:byte ):boolean;Stdcall; external 'CH341DLL.DLL'; // 指定EPP地址
Function CH341MemReadAddr0( // MEM方式读地址0: WR#=1, DS#/RD#=0, AS#/ADDR=0, D0-D7=input
iIndex:cardinal; // 指定CH341设备序号
oBuffer:pvoid; // 指向一个足够大的缓冲区,用于保存从地址0读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341MemReadAddr1( // MEM方式读地址1: WR#=1, DS#/RD#=0, AS#/ADDR=1, D0-D7=input
iIndex:cardinal; // 指定CH341设备序号
oBuffer:pvoid; // 指向一个足够大的缓冲区,用于保存从地址1读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
function CH341MemWriteAddr0( // MEM方式写地址0: WR#=0, DS#/RD#=1, AS#/ADDR=0, D0-D7=output
iIndex:cardinal; // 指定CH341设备序号
iBuffer:pvoid; // 指向一个缓冲区,放置准备向地址0写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341MemWriteAddr1( // MEM方式写地址1: WR#=0, DS#/RD#=1, AS#/ADDR=1, D0-D7=output
iIndex:cardinal; // 指定CH341设备序号
iBuffer:pvoid; // 指向一个缓冲区,放置准备向地址1写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341SetExclusive( // 设置独占使用当前CH341设备
iIndex:cardinal; // 指定CH341设备序号
iExclusive:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 为0则设备可以共享使用,非0则独占使用
Function CH341SetTimeout( // 设置USB数据读写的超时
iIndex:cardinal; // 指定CH341设备序号
iWriteTimeout:cardinal; // 指定USB写出数据块的超时时间,以毫秒mS为单位,0xFFFFFFFF指定不超时(默认值)
iReadTimeout:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指定USB读取数据块的超时时间,以毫秒mS为单位,0xFFFFFFFF指定不超时(默认值)
Function CH341ReadData( // 读取数据块
iIndex:cardinal; // 指定CH341设备序号
oBuffer:PVOID; // 指向一个足够大的缓冲区,用于保存读取的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
Function CH341WriteData( // 写出数据块
iIndex:cardinal;// 指定CH341设备序号
iBuffer:PVOID; // 指向一个缓冲区,放置准备写出的数据
ioLength:PULONG ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
Function CH341GetDeviceName( // 返回指向CH341设备名称的缓冲区,出错则返回NULL
iIndex:cardinal ):PVOID;Stdcall; external 'CH341DLL.DLL' ; // 指定CH341设备序号,0对应第一个设备
Function CH341GetVerIC( // 获取CH341芯片的版本,返回:0=设备无效,0x10=CH341,0x20=CH341A
iIndex:cardinal ):cardinal;Stdcall; external 'CH341DLL.DLL' ; // 指定CH341设备序号
Function CH341FlushBuffer( // 清空CH341的缓冲区
iIndex:cardinal ):boolean;Stdcall; external 'CH341DLL.DLL' ; // 指定CH341设备序号
Function CH341WriteRead( // 执行数据流命令,先输出再输入
iIndex:cardinal; // 指定CH341设备序号
iWriteLength:cardinal; // 写长度,准备写出的长度
iWriteBuffer:PVOID; // 指向一个缓冲区,放置准备写出的数据
iReadStep:cardinal; // 准备读取的单个块的长度, 准备读取的总长度为(iReadStep*iReadTimes)
iReadTimes:cardinal; // 准备读取的次数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -