public static MCP23017GpioController CreateDevice(string i2cBus, int address = HARDWARE_BASE_ADDRESS, I2cBusSpeed busSpeed = I2cBusSpeed.StandardMode, I2cSharingMode sharingMode = I2cSharingMode.Exclusive, IGpioPin interruptPin = null) { // Create the I2c connection settings instance. I2cConnectionSettings settings = new I2cConnectionSettings(address) { BusSpeed = busSpeed, SharingMode = sharingMode }; // Create the I2c device instance var i2cDevice = I2cDevice.FromId(i2cBus, settings); if (i2cDevice == null) { // No device was created throw new Exception("Unable to create I2c instance."); } try { var instance = new MCP23017GpioController(i2cDevice, interruptPin); // Set the defaults for our device. These are power on defaults instance.WriteRegister(MCP23017_IODIRA, 0xFF); instance.WriteRegister(MCP23017_IPOLA, 0x00); instance.WriteRegister(MCP23017_GPINTENA, 0x00); instance.WriteRegister(MCP23017_DEFVALA, 0x00); instance.WriteRegister(MCP23017_INTCONA, 0x00); instance.WriteRegister(MCP23017_IOCONA, 0x00); instance.WriteRegister(MCP23017_GPPUA, 0x00); instance.WriteRegister(MCP23017_GPIOA, 0x00); instance.WriteRegister(MCP23017_OLATA, 0x00); instance.WriteRegister(MCP23017_IODIRB, 0xFF); instance.WriteRegister(MCP23017_IPOLB, 0x00); instance.WriteRegister(MCP23017_GPINTENB, 0x00); instance.WriteRegister(MCP23017_DEFVALB, 0x00); instance.WriteRegister(MCP23017_INTCONB, 0x00); instance.WriteRegister(MCP23017_IOCONB, 0x00); instance.WriteRegister(MCP23017_GPPUB, 0x00); instance.WriteRegister(MCP23017_GPIOB, 0x00); instance.WriteRegister(MCP23017_OLATB, 0x00); return(instance); } catch (Exception) { i2cDevice?.Dispose(); throw; } }
internal MCP23017GpioPin(MCP23017GpioController gpioController, int pinNumber, GpioSharingMode sharingMode) { _gpioController = gpioController; PinNumber = pinNumber; SharingMode = sharingMode; }