private static void TestI2C() { NativeMethods.Init_libMPSSE(); FTDI.FT_STATUS status; uint channelCount = 0; status = I2C.NativeMethods_I2C.I2C_GetNumChannels(out channelCount); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to find number of I2C channels. (Status: " + status + ")"); } var infoNode = new NativeMethods.FT_DEVICE_LIST_INFO_NODE(); status = I2C.NativeMethods_I2C.I2C_GetChannelInfo(0, infoNode); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")"); } IntPtr i2cHandle; status = I2C.NativeMethods_I2C.I2C_OpenChannel(0, out i2cHandle); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")"); } var config = new I2C.NativeMethods_I2C.ChannelConfig(I2C.NativeMethods_I2C.ClockRate.Standard, 1, I2C.NativeMethods_I2C.ConfigOptions.None); status = I2C.NativeMethods_I2C.I2C_InitChannel(i2cHandle, config); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to initialize I2C channel. (Status: " + status + ")"); } byte gpioState; status = NativeMethods.FT_ReadGPIO(i2cHandle, out gpioState); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to open I2C channel. (Status: " + status + ")"); } status = I2C.NativeMethods_I2C.I2C_CloseChannel(i2cHandle); i2cHandle = IntPtr.Zero; if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to close I2C channel. (Status: " + status + ")"); } NativeMethods.Cleanup_libMPSSE(); return; }
private static void TestSPI() { NativeMethods.Init_libMPSSE(); FTDI.FT_STATUS status; uint channelCount = 0; status = SPI.NativeMethods_SPI.SPI_GetNumChannels(out channelCount); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to find number of SPI channels. (Status: " + status + ")"); } var infoNode = new NativeMethods.FT_DEVICE_LIST_INFO_NODE(); status = SPI.NativeMethods_SPI.SPI_GetChannelInfo(0, infoNode); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")"); } IntPtr spiHandle; status = SPI.NativeMethods_SPI.SPI_OpenChannel(0, out spiHandle); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")"); } var configOptions = SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_MODE3 | SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_CS_DBUS3 | SPI.NativeMethods_SPI.ConfigOptions.SPI_CONFIG_OPTION_CS_ACTIVELOW; var config = new SPI.NativeMethods_SPI.ChannelConfig(100000, 1, configOptions, 0); status = SPI.NativeMethods_SPI.SPI_InitChannel(spiHandle, config); if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to initialize SPI channel. (Status: " + status + ")"); } var transferOptions = SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_SIZE_IN_BYTES | SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_CHIPSELECT_ENABLE | SPI.NativeMethods_SPI.TransferOptions.SPI_TRANSFER_OPTIONS_CHIPSELECT_DISABLE; var buffer = new byte[] { 0xFF }; uint bytesTransferred = 0; status = SPI.NativeMethods_SPI.SPI_Write(spiHandle, buffer, 1, out bytesTransferred, transferOptions); Thread.Sleep(1); //byte gpioState; //status = NativeMethods.FT_ReadGPIO(spiHandle, out gpioState); //if (status != FTDI.FT_STATUS.FT_OK) //{ // throw new InvalidOperationException("Unable to open SPI channel. (Status: " + status + ")"); //} status = SPI.NativeMethods_SPI.SPI_CloseChannel(spiHandle); spiHandle = IntPtr.Zero; if (status != FTDI.FT_STATUS.FT_OK) { throw new InvalidOperationException("Unable to close SPI channel. (Status: " + status + ")"); } NativeMethods.Cleanup_libMPSSE(); return; }