/// <summary> /// Creates a new instance of the PiFaceDigital class, used to communicate with a PiFaceDigital or PiFaceDigital2 extension board. /// </summary> /// <param name="spiDeviceInformation">The SPI device information.</param> /// <param name="chipSelectLevel">The chip select line level to use.</param> public PiFaceDigital(DeviceInformation spiDeviceInformation, byte chipSelectLevel = 0) { this._chip = new MCP23S17(spiDeviceInformation, chipSelectLevel); this.InputPort = new MCP23S17RegisterNeg(MCP23S17RegisterAddresses.GPIOB, this._chip); this.InputPins = new MCP23S17RegisterBitNeg[8]; this.OutputPort = new MCP23S17Register(MCP23S17RegisterAddresses.GPIOA, this._chip); this.OutputPins = new MCP23S17RegisterBit[8]; this.LEDs = new MCP23S17RegisterBit[8]; this.Relays = new MCP23S17RegisterBit[2]; this.Switches = new MCP23S17RegisterBitNeg[4]; for (var i = 0; i < 8; i++) { if (i < 2) { this.Relays[i] = new MCP23S17RegisterBit(i, MCP23S17RegisterAddresses.GPIOA, this._chip); } if (i < 4) { this.Switches[i] = new MCP23S17RegisterBitNeg(i, MCP23S17RegisterAddresses.GPIOB, this._chip); } this.InputPins[i] = new MCP23S17RegisterBitNeg(i, MCP23S17RegisterAddresses.GPIOB, this._chip); this.OutputPins[i] = new MCP23S17RegisterBit(i, MCP23S17RegisterAddresses.GPIOB, this._chip); this.LEDs[i] = new MCP23S17RegisterBit(i, MCP23S17RegisterAddresses.GPIOA, this._chip); } }
/// <summary> /// Creates a new instance of the MCP23S17Register class. /// </summary> /// <param name="address">The address of the register.</param> /// <param name="chip">The MCP23S17 chip which contains the register.</param> internal MCP23S17Register(byte address, MCP23S17 chip) : base(address, chip) { this.LowerNibble = new MCP23S17RegisterNibble(Nibble.Lower, address, chip); this.UpperNibble = new MCP23S17RegisterNibble(Nibble.Upper, address, chip); this.Bits = new MCP23S17RegisterBit[8]; for (var i = 0; i < this.Bits.Length; i++) { this.Bits[i] = new MCP23S17RegisterBit(i, address, chip); } }
internal MCP23S17RegisterNibble(Nibble nibble, byte address, MCP23S17 chip) : base(address, chip) { this._nibble = nibble; this.Bits = new MCP23S17RegisterBit[4]; var rangeStart = nibble.GetRangeStart(); var rangeEnd = nibble.GetRangeEnd(); for (var i = rangeStart; i < rangeEnd; i++) { this.Bits[i - rangeStart] = new MCP23S17RegisterBit(i, address, chip); } }
/// <summary> /// Creates a new instance of the MCP23S17RegisterBaseNeg class. /// </summary> /// <param name="address">The address of the entity.</param> /// <param name="chip">The MCP23S17 chip which contains the register.</param> internal MCP23S17RegisterBaseNeg(byte address, MCP23S17 chip) : base(address, chip) { }
/// <summary> /// Instantiate a new MCP23S17 register bit. /// </summary> /// <param name="bitOffset"></param> /// <param name="address"></param> /// <param name="chip"></param> internal MCP23S17RegisterBit(int bitOffset, byte address, MCP23S17 chip) : base(address, chip) { this._bitOffset = bitOffset; }
/// <summary> /// Creates a new instance of the MCP23S17RegisterBase class. /// </summary> /// <param name="address">The address of the entity.</param> /// <param name="chip">The MCP23S17 chip which contains the register.</param> internal MCP23S17RegisterBase(byte address, MCP23S17 chip) { this.Address = address; this._chip = chip; }