diff --git a/Source/Meadow.Clima/Clima.cs b/Source/Meadow.Clima/Clima.cs index 46f0708..9c61bb9 100644 --- a/Source/Meadow.Clima/Clima.cs +++ b/Source/Meadow.Clima/Clima.cs @@ -1,4 +1,5 @@ -using Meadow.Hardware; +using Meadow.Foundation.ICs.IOExpanders; +using Meadow.Hardware; using Meadow.Logging; using System; @@ -44,8 +45,34 @@ public static IClimaHardware Create() } else if (device is IF7CoreComputeMeadowDevice { } ccm) { - logger?.Info("Instantiating Clima v3 specific hardware"); - hardware = new ClimaHardwareV3(ccm, i2cBus); + Mcp23008? mcpVersion = null; + byte version = 0; + + try + { + logger?.Info("Instantiating version MCP23008"); + + var resetPort = ccm.Pins.D02.CreateDigitalOutputPort(); + + mcpVersion = new Mcp23008(i2cBus, address: 0x27, resetPort: resetPort); + + version = mcpVersion.ReadFromPorts(); + } + catch + { + logger?.Info("Failed to instantiate version MCP23008"); + } + + if (version > 4) + { + logger?.Info("Instantiating Clima v4 specific hardware"); + hardware = new ClimaHardwareV4(ccm, i2cBus, mcpVersion!); + } + else + { + logger?.Info("Instantiating Clima v3 specific hardware"); + hardware = new ClimaHardwareV3(ccm, i2cBus, mcpVersion!); + } } else { diff --git a/Source/Meadow.Clima/ClimaHardwareV3.cs b/Source/Meadow.Clima/ClimaHardwareV3.cs index 6e66c47..487edfd 100644 --- a/Source/Meadow.Clima/ClimaHardwareV3.cs +++ b/Source/Meadow.Clima/ClimaHardwareV3.cs @@ -16,7 +16,10 @@ namespace Meadow.Devices /// public class ClimaHardwareV3 : ClimaHardwareBase { - private readonly IF7CoreComputeMeadowDevice _device; + /// + /// The Meadow CCM device + /// + protected readonly IF7CoreComputeMeadowDevice _device; private Scd40? _environmentalSensor; private ICO2ConcentrationSensor? _co2ConcentrationSensor; @@ -35,7 +38,7 @@ public class ClimaHardwareV3 : ClimaHardwareBase /// /// The MCP23008 IO expander that contains the Clima hardware version /// - Mcp23008? McpVersion { get; set; } + public Mcp23008 McpVersion { get; protected set; } /// public override string RevisionString => "v3.x"; @@ -59,8 +62,11 @@ public class ClimaHardwareV3 : ClimaHardwareBase /// /// The meadow device /// The I2C bus - public ClimaHardwareV3(IF7CoreComputeMeadowDevice device, II2cBus i2cBus) + /// The Mcp23008 used to read version information + public ClimaHardwareV3(IF7CoreComputeMeadowDevice device, II2cBus i2cBus, Mcp23008 mcpVersion) { + McpVersion = mcpVersion; + _device = device; I2cBus = i2cBus; @@ -69,18 +75,6 @@ public ClimaHardwareV3(IF7CoreComputeMeadowDevice device, II2cBus i2cBus) // Must initialise any PWM based I/O first GetRgbPwmLed(); - try - { - Logger?.Trace("Instantiating Mcp Version"); - McpVersion = new Mcp23008(I2cBus, address: 0x27, resetPort: device.Pins.D02.CreateDigitalOutputPort()); - Logger?.Info("Mcp Version up"); - } - catch (Exception e) - { - Logger?.Trace($"ERR creating the MCP that has version information: {e.Message}"); - } - - try { Logger?.Trace("Instantiating Solar Voltage Input"); diff --git a/Source/Meadow.Clima/ClimaHardwareV4.cs b/Source/Meadow.Clima/ClimaHardwareV4.cs index b245468..25baeda 100644 --- a/Source/Meadow.Clima/ClimaHardwareV4.cs +++ b/Source/Meadow.Clima/ClimaHardwareV4.cs @@ -1,4 +1,5 @@ -using Meadow.Hardware; +using Meadow.Foundation.ICs.IOExpanders; +using Meadow.Hardware; namespace Meadow.Devices { @@ -7,8 +8,6 @@ namespace Meadow.Devices /// public class ClimaHardwareV4 : ClimaHardwareV3 { - private readonly IF7CoreComputeMeadowDevice _device; - /// public override string RevisionString => "v4.x"; @@ -17,10 +16,10 @@ public class ClimaHardwareV4 : ClimaHardwareV3 /// /// The meadow device /// The I2C bus - public ClimaHardwareV4(IF7CoreComputeMeadowDevice device, II2cBus i2cBus) - : base(device, i2cBus) + /// The Mcp23008 used to read version information + public ClimaHardwareV4(IF7CoreComputeMeadowDevice device, II2cBus i2cBus, Mcp23008 mcpVersion) + : base(device, i2cBus, mcpVersion) { - _device = device; } internal override I2cConnector? CreateQwiicConnector()