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.

95 lines
6.4 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace USB2XXX
{
class USB2IIC
{
//定义函数返回错误代码
public const Int32 IIC_SUCCESS = (0); //函数执行成功
public const Int32 IIC_ERR_NOT_SUPPORT = (-1); //适配器不支持该函数
public const Int32 IIC_ERR_USB_WRITE_FAIL = (-2); //USB写数据失败
public const Int32 IIC_ERR_USB_READ_FAIL = (-3); //USB读数据失败
public const Int32 IIC_ERR_CMD_FAIL = (-4); //命令执行失败
public const Int32 IIC_ERR_PARA_ERROR = (-5); //参数传入错误
//定义IIC函数返回错误代码
public const Int32 IIC_ERROR_SUCCESS = 0; //操作成功
public const Int32 IIC_ERROR_CHANNEL = 1; //该通道不支持该函数
public const Int32 IIC_ERROR_BUSY = 2; //总线忙
public const Int32 IIC_ERROR_START_FAILD = 3; //启动总线失败
public const Int32 IIC_ERROR_TIMEOUT = 4; //超时
public const Int32 IIC_ERROR_NACK = 5; //从机无应答
//定义初始化IIC的数据类型
public struct IIC_CONFIG
{
public UInt32 ClockSpeedHz; //IIC时钟频率:单位为Hz
public UInt16 OwnAddr; //USB2XXX为从机时自己的地址
public Byte Master; //主从选择控制:0-从机1-主机
public Byte AddrBits; //从机地址模式7-7bit模式10-10bit模式
public Byte EnablePu; //使能引脚芯片内部上拉电阻若不使能则I2C总线上必须接上拉电阻
}
//USB2IIC基础函数
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_Init(Int32 DevHandle,Int32 IICIndex, ref IIC_CONFIG pConfig);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_GetSlaveAddr(Int32 DevHandle,Int32 IICIndex,Int16[] pSlaveAddr);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_WriteBytes(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pWriteData,Int32 WriteLen,Int32 TimeOutMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_ReadBytes(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pReadData,Int32 ReadLen,Int32 TimeOutMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_WriteReadBytes(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pWriteData,Int32 WriteLen,Byte[] pReadData,Int32 ReadLen,Int32 TimeOutMs);
//块读写函数
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_BlockWriteBytes(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pWriteData,Int32 BlockSize,Int32 BlockNum,Int32 IntervalTimeUs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_BlockReadBytes(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pReadData,Int32 BlockSize,Int32 BlockNum,Int32 IntervalTimeUs);
//从机操作相关函数
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_SlaveWriteBytes(Int32 DevHandle,Int32 IICIndex,Byte[] pWriteData,Int32 WriteLen,Int32 TimeOutMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_SlaveReadBytes(Int32 DevHandle,Int32 IICIndex,Byte[] pReadData,Int32 TimeOutMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_SlaveWriteRemain(Int32 DevHandle,Int32 IICIndex);
//事件操作相关函数
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_WriteBytesOfEvent(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pWriteData,Int32 WriteLen,Int32 EventPin,Byte EventType,Int32 TimeOutOfEventMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_ReadBytesOfEvent(Int32 DevHandle,Int32 IICIndex,Int16 SlaveAddr,Byte[] pReadData,Int32 ReadLen,Int32 EventPin,Byte EventType,Int32 TimeOutOfEventMs);
[DllImport("USB2XXX.dll")]
public static extern Int32 IIC_WriteReadBytesOfEvent(Int32 DevHandle, Int32 IICIndex, Int16 SlaveAddr, Byte[] pWriteData, Int32 WriteLen, Byte[] pReadData, Int32 ReadLen, Int32 EventPin, Byte EventType, Int32 TimeOutOfEventMs);
//SMBus相关函数定义
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_Init(Int32 DevHandle,Int32 IICIndex,Int32 ClockSpeedHz,Byte EnablePu);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_QuickCommand(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte WriteReadFlag);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_WriteByte(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte Data,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_ReadByte(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte[] pData,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_WriteByteProtocol(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, Byte Data,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_WriteWordProtocol(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, UInt16 Data,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_ReadByteProtocol(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, Byte[] pData,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_ReadWordProtocol(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, UInt16[] pData,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_ProcessCall(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, UInt16 WriteData, UInt16[] pReadData,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_BlockWrite(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, Byte[] pWriteData,Int32 WriteCount,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_BlockRead(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, Byte[] pReadData,Int32[] pReadCount,Byte WithPEC);
[DllImport("USB2XXX.dll")]
public static extern Int32 SMBUS_BlockProcessCall(Int32 DevHandle,Int32 IICIndex,UInt16 SlaveAddr,Byte CommandCode, Byte[] pWriteData,Int32 WriteCount, Byte[] pReadData,Int32[] pReadCount,Byte WithPEC);
}
}