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()