//#region USB to I2C Bridge public static int Open() // Open USB to I2C bridge { int rtval; byte powerbyte = 0; uint currentbyte = 0; byte[] FPins = new byte[4]; byte[] DPins = new byte[4]; byte[] VPins = new byte[4]; rtval = OpenbyIndex(); if (rtval == MCP2221.M_E_NO_ERR) { // Check is self power and wake on int is enabled rtval = MCP2221.M_Mcp2221_GetUsbPowerAttributes(mHandle, ref powerbyte, ref currentbyte); if ((powerbyte & (MCP2221.M_MCP2221_USB_SELF | MCP2221.M_MCP2221_USB_REMOTE)) != POWERCFG) { // Set self power and wake on int rtval = rtval | MCP2221.M_Mcp2221_SetUsbPowerAttributes(mHandle, POWERCFG, currentbyte); MCP2221.M_Mcp2221_Close(mHandle); if (OpenbyIndex() != MCP2221.M_E_NO_ERR) { DeviceOpen = false; MCP2221.M_Mcp2221_Reset(mHandle); MCP2221.M_Mcp2221_CloseAll(); return(I2C_NO_BRIDGE); } } //int test = MCP2221.M_Mcp2221_SetAdvancedCommParams(mHandle, 3, 10); rtval = rtval | MCP2221.M_Mcp2221_GetGpioSettings(mHandle, SRAM, FPins, DPins, VPins); bool isFPins = FPins.SequenceEqual(GPIOFNC); bool isDpins = DPins.SequenceEqual(GPIODIR); if ((isFPins == false) || (isDpins == false)) { rtval = rtval | MCP2221.M_Mcp2221_SetGpioSettings(mHandle, FLASH, GPIOFNC, GPIODIR, GPIOVAL); rtval = rtval | MCP2221.M_Mcp2221_SetGpioSettings(mHandle, SRAM, GPIOFNC, GPIODIR, GPIOVAL); } else { rtval = rtval | MCP2221.M_Mcp2221_SetGpioValues(mHandle, GPIOVAL); } rtval = rtval | MCP2221.M_Mcp2221_ClearInterruptPinFlag(mHandle); if (rtval != MCP2221.M_E_NO_ERR) { MCP2221.M_Mcp2221_Reset(mHandle); return(I2C_CFGERR); } DeviceOpen = true; } else { DeviceOpen = false; return(I2C_NO_BRIDGE); } return(I2C_NO_ERROR); }
public static void Close() { if (DeviceOpen) { int rtval = MCP2221.M_Mcp2221_CloseAll(); if (rtval == I2C_NO_ERROR) { DeviceOpen = false; } } }
public static byte[] I2CRead(byte i2caddr, uint length) { lock (locker) { int rtval; byte[] dbuffer = new byte[length]; rtval = MCP2221.M_Mcp2221_I2cRead(mHandle, length, i2caddr, SEVENBITADDR, dbuffer); if (rtval != I2C_NO_ERROR) { MCP2221.M_Mcp2221_I2cCancelCurrentTransfer(mHandle); } return(dbuffer); } }
public static int I2CWriteAddr(byte i2caddr, byte regaddr) { lock (locker) { int rtval; byte[] dbuffer = new byte[1]; dbuffer[0] = regaddr; rtval = MCP2221.M_Mcp2221_I2cWrite(mHandle, (uint)dbuffer.Length, i2caddr, SEVENBITADDR, dbuffer); if (rtval != I2C_NO_ERROR) { MCP2221.M_Mcp2221_I2cCancelCurrentTransfer(mHandle); } return(rtval); } }
public static int I2CSpeed(uint value) { lock (locker) { if ((value <= MAXI2CSPEED) && (value >= MINI2CSPEED) && DeviceOpen) { int rtval = MCP2221.M_Mcp2221_SetSpeed(mHandle, value); if (rtval != MCP2221.M_E_NO_ERR) { return(I2C_BAD_SETSPEED); } } return(I2C_NO_ERROR); } }
private static int OpenbyIndex() { int rtval; uint nDev = 0; DeviceInfo.LibraryVersion = MCP2221.M_Mcp2221_GetLibraryVersion(); rtval = MCP2221.M_Mcp2221_GetConnectedDevices(vid, pid, ref nDev); if (rtval == MCP2221.M_E_NO_ERR) { mHandle = MCP2221.M_Mcp2221_OpenByIndex(vid, pid, nDev - 1); rtval = MCP2221.M_Mcp2221_GetLastError(); if (rtval == MCP2221.M_E_NO_ERR) { DeviceInfo.Manufacture = MCP2221.M_Mcp2221_GetManufacturerDescriptor(mHandle); DeviceInfo.Product = MCP2221.M_Mcp2221_GetProductDescriptor(mHandle); DeviceInfo.Serial = MCP2221.M_Mcp2221_GetSerialNumberDescriptor(mHandle); DeviceInfo.FactorySN = MCP2221.M_Mcp2221_GetFactorySerialNumber(mHandle); DeviceInfo.HardwareVer = MCP2221.M_Mcp2221_GetHardwareRevision(mHandle); DeviceInfo.FirmwareRev = MCP2221.M_Mcp2221_GetFirmwareRevision(mHandle); rtval = MCP2221.M_Mcp2221_GetLastError(); if (rtval == MCP2221.M_E_NO_ERR) { int rval = MCP2221.M_Mcp2221_SetSpeed(mHandle, i2cspeed); int loop = 100; while (rval != MCP2221.M_E_NO_ERR) { MCP2221.M_Mcp2221_I2cCancelCurrentTransfer(mHandle); MCP2221.M_Mcp2221_Reset(mHandle); MCP2221.M_Mcp2221_GetConnectedDevices(vid, pid, ref nDev); mHandle = MCP2221.M_Mcp2221_OpenByIndex(vid, pid, nDev - 1); rval = MCP2221.M_Mcp2221_SetSpeed(mHandle, i2cspeed); loop--; if (loop == 0) { break; } } } } } return(rtval); }