/// <summary> /// Writes bytes to I2C device from provided buffer /// </summary> /// <param name="deviceAddress">7-bit address of the I2C device</param> /// <param name="flag">FT260_I2C_FLAG</param> /// <param name="buffer">byte array to write from</param> /// <param name="bytesToWrite">number of bytes to write from the buffer</param> /// <returns>StatusResults(FT260_STATUS, FT260_CONTROLLER_STATUS)</returns> public StatusResults Write(byte deviceAddress, FT260_I2C_FLAG flag, byte[] buffer, uint bytesToWrite) { var ftStatus = FT260_STATUS.FT260_OTHER_ERROR; uint bytesWritten = 0; var status = FT260_CONTROLLER_STATUS.idle; var size = (int)(Marshal.SizeOf(buffer[0]) * bytesToWrite); var pntr = Marshal.AllocHGlobal(size); try { Marshal.Copy(buffer, 0, pntr, (int)bytesToWrite); } finally { //Marshal.FreeHGlobal(pntr); } if ( (ftStatus = FT260_I2CMaster_Write(ft260Handle, deviceAddress, flag, pntr, bytesToWrite, out bytesWritten)) == FT260_STATUS.FT260_OK) { if (bytesWritten != bytesToWrite) { ftStatus = FT260_STATUS.FT260_OTHER_ERROR; } } byte controllerStatus = 0; if (FT260_I2CMaster_GetStatus(ft260Handle, out controllerStatus) == FT260_STATUS.FT260_OK) { status = (FT260_CONTROLLER_STATUS)controllerStatus; } Marshal.FreeHGlobal(pntr); return(new StatusResults(ftStatus, status)); }
public static extern FT260_STATUS FT260_I2CMaster_Write(IntPtr ft260Handle, byte deviceAddress, FT260_I2C_FLAG flag, IntPtr lpBuffer, uint dwBytesToWrite, out uint lpdwBytesWritten);
public static extern FT260_STATUS FTFT260_I2CMaster_Read(IntPtr ft260Handle, byte deviceAddress, FT260_I2C_FLAG flag, IntPtr lpBuffer, uint dwBytesToRead, out uint lpdwBytesReturned);