/***********设备操作函数;以下函数中的USB2IO_hdl是指USB2IO_Open返回的句柄*******/
//打开端口获取句柄; //Nbr是端口号,从1开始,依次为2/3/4...,最大126
HANDLE WINAPI USB2IO_Open(int Nbr);
//关闭端口;在程序退出前再关闭端口; 返回 0: 成功;!0: 失败
int WINAPI USB2IO_Close(HANDLE USB2IO_hdl);
//获取设备序列号
// 参数:
// dwp_LenResponse: 设备序列号的长度,取值范围0~256。(单位: 字节)
// ucp_Response: 设备序列号buf(buf由调用该API的应用程序分配)
// 返回 0: 成功;!0: 失败
int WINAPI USB2IO_GetDevSn(HANDLE USB2IO_hdl, DWORD *dwp_LenResponse, unsigned char *ucp_Response);
/***********IO操作函数;以下函数中的USB2IO_hdl是指USB2IO_Open返回的句柄*******/
/** 以下所有接口函数 **/
/** IoNbr: IO口(1~10) **/
/** 返回值 0: 成功;!0: 失败 **/
//设置IO输出方式:IoCfg:0=输入; IoCfg:2=OD+上拉, 3=PushPull推挽输出;
int WINAPI USB2IO_SetIoCfg(HANDLE USB2IO_hdl, int IoNbr, int IoCfg);
//设置IO输出值: IoOut:1=输出高, 0=输出低
int WINAPI USB2IO_SetIoOut(HANDLE USB2IO_hdl, int IoNbr, int IoOut);
//读取IO输出配置, 读取值存放在IoCfg中
int WINAPI USB2IO_RdIoCfg(HANDLE USB2IO_hdl, int IoNbr, int *IoCfg);
//读取IO输出值(这里读取到的是上位机用USB2IO_SetIoOut的设置值), 读取值存放在IoOut中
int WINAPI USB2IO_RdIoOut(HANDLE USB2IO_hdl, int IoNbr, int *IoOut);
//读取IO引脚值(这里读取到的是实际引脚的电平值), 读取值存放在PinValue中
//注意:IO输出值是设置IO输出寄存器;IO引脚值是芯片引脚上的实际电平值。
// 两者一般情况下是相等的,但如果该IO受到外围MCU或其他外设影响,两者有可能不相等,此时需要仔细查看外围电路是否有问题
int WINAPI USB2IO_RdPin(HANDLE USB2IO_hdl, int IoNbr, int *PinValue);
//读取ClkOut输出: ClkOutCfg: 1=输出Clk, 0=关闭Clk
int WINAPI USB2IO_SetClkOut(HANDLE USB2IO_hdl, int ClkOutCfg);
//读取ClkOut的输出配置, 读取值存放在ClkOutCfg中
int WINAPI USB2IO_RdClkOutCfg(HANDLE USB2IO_hdl, int *ClkOutCfg);
/***********SPI操作函数;以下函数中的USB2IO_hdl是指USB2IO_Open返回的句柄******/
/** 以下所有接口函数 **/
/** 返回值 0: 成功;!0: 失败 **/
/*********标准的SPI MODE 定义如下********************************************/
/** MODE0 CPOL=0 CPHA=0 SPI_CLK空闲时是低电平; 上升沿采样 **/
/** MODE1 CPOL=0 CPHA=1 SPI_CLK空闲时是低电平; 下降沿采样 **/
/** MODE2 CPOL=1 CPHA=0 SPI_CLK空闲时是高电平; 下降沿采样 **/
/** MODE3 CPOL=1 CPHA=1 SPI_CLK空闲时是高电平; 上升沿采样 **/
/****************************************************************************/
//使能SPI接口,SPI接口的相关IO配置将自动改变
int WINAPI USB2IO_EnableSpi(HANDLE USB2IO_hdl);
//SPI写: DataLength:数据长度(1~136); DataBuf:数据buf
int WINAPI USB2IO_SpiWrite(HANDLE USB2IO_hdl, int DataLength, char *DataBuf);
//SPI读: DataLength:期望读的数据长度(1~136); ; DataBuf:数据buf
int WINAPI USB2IO_SpiRead(HANDLE USB2IO_hdl, int DataLength, char *DataBuf);
//设置SPI MODE: Mode0~3
int WINAPI USB2IO_SetSpiMode(HANDLE USB2IO_hdl, int SpiMode);
//读取SPI MODE: Mode0~3
int WINAPI USB2IO_GetSpiMode(HANDLE USB2IO_hdl, int *SpiMode);
/***********I2C操作函数;以下函数中的USB2IO_hdl是指USB2IO_Open返回的句柄******/
/** 以下所有接口函数 **/
/** 返回值 0: 成功;!0: 失败 **/
//使能I2C接口,I2C接口的相关IO配置将自动改变
int WINAPI USB2IO_EnableI2c(HANDLE USB2IO_hdl);
//I2C写:
//I2cAddr:I2C设备地址;
//CmdRegAddr: 命令或寄存器地址, 只有当CmdRegAddrExistFlag!=0时有效;
//CmdRegAddrByteCnt: CmdRegAddr的长度(0~4)(单位:字节) 0: 不存在CmdRegAddr
//DataLength:数据长度(1~136);
//DataBuf:数据buf
int WINAPI USB2IO_I2cWrite(HANDLE USB2IO_hdl, int I2cAddr, int CmdRegAddr, int CmdRegAddrByteCnt, int DataLength, char *DataBuf);
//I2C读:
//I2cAddr:I2C设备地址;
//CmdRegAddr: 命令或寄存器地址, 只有当CmdRegAddrExistFlag!=0时有效;
//CmdRegAddrByteCnt: CmdRegAddr的长度(0~4)(单位:字节) 0: 不存在CmdRegAddr
//DataLength:期望读的数据长度(1~136);
//DataBuf:返回数据的数据buf
int WINAPI USB2IO_I2cRead(HANDLE USB2IO_hdl, int I2cAddr, int CmdRegAddr, int CmdRegAddrByteCnt, int DataLength, char *DataBuf);
//设置I2C速度: 0:80k 1:160k
int WINAPI USB2IO_SetI2cSpeed(HANDLE USB2IO_hdl, int I2cSpeed);
//读取I2C速度: 0:80k 1:160k
int WINAPI USB2IO_GetI2cSpeed(HANDLE USB2IO_hdl, int *I2cSpeed);