📄 usbiox.h
字号:
#define mmUSBIO_PACKET_LENGTHA_GET_VER 0x5F // 获取芯片版本
#define mmUSBIO_PACKET_LENGTH_EPP_IO_MAX ( mUSBIO_PACKET_LENGTH - 1 ) // mUSBIO_PACKET_LENGTH在EPP/MEM方式下单次读写数据块的最大长度
#define mmUSBIO_PACKET_LENGTHA_EPP_IO_MAX 0xFF // mUSBIO_PACKET_LENGTHA在EPP/MEM方式下单次读写数据块的最大长度
#define mmUSBIO_PACKET_LENGTHA_CMD_IO_ADDR_W 0x00 // MEM带地址读写/输入输出的命令流:写数据,位6-位0为地址,下一个字节为待写数据
#define mmUSBIO_PACKET_LENGTHA_CMD_IO_ADDR_R 0x80 // MEM带地址读写/输入输出的命令流:读数据,位6-位0为地址,读出数据一起返回
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_STA 0x74 // I2C接口的命令流:产生起始位
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_STO 0x75 // I2C接口的命令流:产生停止位
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_OUT 0x80 // I2C接口的命令流:输出数据,位5-位0为长度,后续字节为数据,0长度则只发送一个字节并返回应答
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_IN 0xC0 // I2C接口的命令流:输入数据,位5-位0为长度,0长度则只接收一个字节并发送无应答
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_MAX ( min( 0x3F, mUSBIO_PACKET_LENGTH ) ) // I2C接口的命令流单个命令输入输出数据的最大长度
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_SET 0x60 // I2C接口的命令流:设置参数,位2=SPI的I/O数(0=单入单出,1=双入双出),位1位0=I2C速度(00=低速,01=标准,10=快速,11=高速)
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_US 0x40 // I2C接口的命令流:以微秒为单位延时,位3-位0为延时值
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_MS 0x50 // I2C接口的命令流:以亳秒为单位延时,位3-位0为延时值
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_DLY 0x0F // I2C接口的命令流单个命令延时的最大值
#define mmUSBIO_PACKET_LENGTHA_CMD_I2C_STM_END 0x00 // I2C接口的命令流:命令包提前结束
#define mmUSBIO_PACKET_LENGTHA_CMD_UIO_STM_IN 0x00 // UIO接口的命令流:输入数据D7-D0
#define mmUSBIO_PACKET_LENGTHA_CMD_UIO_STM_DIR 0x40 // UIO接口的命令流:设定I/O方向D5-D0,位5-位0为方向数据
#define mmUSBIO_PACKET_LENGTHA_CMD_UIO_STM_OUT 0x80 // UIO接口的命令流:输出数据D5-D0,位5-位0为数据
#define mmUSBIO_PACKET_LENGTHA_CMD_UIO_STM_US 0xC0 // UIO接口的命令流:以微秒为单位延时,位5-位0为延时值
#define mmUSBIO_PACKET_LENGTHA_CMD_UIO_STM_END 0x20 // UIO接口的命令流:命令包提前结束
// mUSBIO_PACKET_LENGTH并口工作模式
#define mmUSBIO_PACKET_LENGTH_PARA_MODE_EPP 0x00 // mUSBIO_PACKET_LENGTH并口工作模式为EPP方式
#define mmUSBIO_PACKET_LENGTH_PARA_MODE_EPP17 0x00 // mUSBIO_PACKET_LENGTHA并口工作模式为EPP方式V1.7
#define mmUSBIO_PACKET_LENGTH_PARA_MODE_EPP19 0x01 // mUSBIO_PACKET_LENGTHA并口工作模式为EPP方式V1.9
#define mmUSBIO_PACKET_LENGTH_PARA_MODE_MEM 0x02 // mUSBIO_PACKET_LENGTH并口工作模式为MEM方式
// I/O方向设置位定义,直接输入的状态信号的位定义,直接输出的位数据定义
#define mStateBitERR 0x00000100 // 只读可写,ERR#引脚输入状态,1:高电平,0:低电平
#define mStateBitPEMP 0x00000200 // 只读可写,PEMP引脚输入状态,1:高电平,0:低电平
#define mStateBitINT 0x00000400 // 只读可写,INT#引脚输入状态,1:高电平,0:低电平
#define mStateBitSLCT 0x00000800 // 只读可写,SLCT引脚输入状态,1:高电平,0:低电平
#define mStateBitWAIT 0x00002000 // 只读可写,WAIT#引脚输入状态,1:高电平,0:低电平
#define mStateBitDATAS 0x00004000 // 只写可读,DATAS#/READ#引脚输入状态,1:高电平,0:低电平
#define mStateBitADDRS 0x00008000 // 只写可读,ADDRS#/ADDR/ALE引脚输入状态,1:高电平,0:低电平
#define mStateBitRESET 0x00010000 // 只写,RESET#引脚输入状态,1:高电平,0:低电平
#define mStateBitWRITE 0x00020000 // 只写,WRITE#引脚输入状态,1:高电平,0:低电平
#define mStateBitSDA 0x00800000 // 只读,SDA引脚输入状态,1:高电平,0:低电平
#define MAX_DEVICE_PATH_SIZE 128 // 设备名称的最大字符数
#define MAX_DEVICE_ID_SIZE 64 // 设备ID的最大字符数
typedef VOID ( CALLBACK * mPmUSBIO_PACKET_LENGTH_INT_ROUTINE ) ( // 中断服务程序
ULONG iStatus ); // 中断状态数据,参考下面的位说明
// 位7-位0对应mUSBIO_PACKET_LENGTH的D7-D0引脚
// 位8对应mUSBIO_PACKET_LENGTH的ERR#引脚, 位9对应mUSBIO_PACKET_LENGTH的PEMP引脚, 位10对应mUSBIO_PACKET_LENGTH的INT#引脚, 位11对应mUSBIO_PACKET_LENGTH的SLCT引脚
HANDLE WINAPI USBIO_OpenDevice( // 打开mUSBIO_PACKET_LENGTH设备,返回句柄,出错则无效
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号,0对应第一个设备
VOID WINAPI USBIO_CloseDevice( // 关闭mUSBIO_PACKET_LENGTH设备
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号
ULONG WINAPI USBIO_GetVersion( ); // 获得DLL版本号,返回版本号
ULONG WINAPI USBIO_DriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号,V1.6以上DLL也可以是设备打开后的句柄
mPWIN32_COMMAND ioCommand ); // 命令结构的指针
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
// 命令结构在调用前,分别提供:管道号或者命令功能代码,存取数据的长度(可选),数据(可选)
// 命令结构在调用后,分别返回:操作状态代码,后续数据的长度(可选),
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
ULONG WINAPI USBIO_GetDrvVersion( ); // 获得驱动程序版本号,返回版本号,出错则返回0
BOOL WINAPI USBIO_ResetDevice( // 复位USB设备
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号
BOOL WINAPI USBIO_GetDeviceDescr( // 读取设备描述符
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存描述符
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
BOOL WINAPI USBIO_GetConfigDescr( // 读取配置描述符
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存描述符
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
BOOL WINAPI USBIO_SetIntRoutine( // 设定中断服务程序
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
mPmUSBIO_PACKET_LENGTH_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
BOOL WINAPI USBIO_ReadInter( // 读取中断数据
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PULONG iStatus ); // 指向一个双字单元,用于保存读取的中断状态数据,见下行
// 位7-位0对应mUSBIO_PACKET_LENGTH的D7-D0引脚
// 位8对应mUSBIO_PACKET_LENGTH的ERR#引脚, 位9对应mUSBIO_PACKET_LENGTH的PEMP引脚, 位10对应mUSBIO_PACKET_LENGTH的INT#引脚, 位11对应mUSBIO_PACKET_LENGTH的SLCT引脚
BOOL WINAPI USBIO_AbortInter( // 放弃中断数据读操作
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号
BOOL WINAPI USBIO_SetParaMode( // 设置并口模式
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
ULONG iMode ); // 指定并口模式: 0为EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM模式
BOOL WINAPI USBIO_InitParallel( // 复位并初始化并口,RST#输出低电平脉冲
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
ULONG iMode ); // 指定并口模式: 0为EPP模式/EPP模式V1.7, 1为EPP模式V1.9, 2为MEM模式, >= 0x00000100 保持当前模式
BOOL WINAPI USBIO_ReadData0( // 从0#端口读取数据块
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
BOOL WINAPI USBIO_ReadData1( // 从1#端口读取数据块
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
BOOL WINAPI USBIO_AbortRead( // 放弃数据块读操作
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号
BOOL WINAPI USBIO_WriteData0( // 向0#端口写出数据块
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
BOOL WINAPI USBIO_WriteData1( // 向1#端口写出数据块
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID iBuffer, // 指向一个缓冲区,放置准备写出的数据
PULONG ioLength ); // 指向长度单元,输入时为准备写出的长度,返回后为实际写出的长度
BOOL WINAPI USBIO_AbortWrite( // 放弃数据块写操作
ULONG iIndex ); // 指定mUSBIO_PACKET_LENGTH设备序号
BOOL WINAPI USBIO_GetStatus( // 通过mUSBIO_PACKET_LENGTH直接输入数据和状态
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PULONG iStatus ); // 指向一个双字单元,用于保存状态数据,参考下面的位说明
// 位7-位0对应mUSBIO_PACKET_LENGTH的D7-D0引脚
// 位8对应mUSBIO_PACKET_LENGTH的ERR#引脚, 位9对应mUSBIO_PACKET_LENGTH的PEMP引脚, 位10对应mUSBIO_PACKET_LENGTH的INT#引脚, 位11对应mUSBIO_PACKET_LENGTH的SLCT引脚, 位23对应mUSBIO_PACKET_LENGTH的SDA引脚
// 位13对应mUSBIO_PACKET_LENGTH的BUSY/WAIT#引脚, 位14对应mUSBIO_PACKET_LENGTH的AUTOFD#/DATAS#引脚,位15对应mUSBIO_PACKET_LENGTH的SLCTIN#/ADDRS#引脚
BOOL WINAPI USBIO_SetExclusive( // 设置独占使用当前mUSBIO_PACKET_LENGTH设备
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
ULONG iExclusive ); // 为0则设备可以共享使用,非0则独占使用
BOOL WINAPI USBIO_SetTimeout( // 设置USB数据读写的超时
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
ULONG iWriteTimeout, // 指定USB写出数据块的超时时间,以毫秒mS为单位,0xFFFFFFFF指定不超时(默认值)
ULONG iReadTimeout ); // 指定USB读取数据块的超时时间,以毫秒mS为单位,0xFFFFFFFF指定不超时(默认值)
BOOL WINAPI USBIO_ReadData( // 读取数据块
ULONG iIndex, // 指定mUSBIO_PACKET_LENGTH设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存读取的数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -