Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/develop-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
uses: actions/setup-dotnet@v1
with:
dotnet-version:
8.0.x
9.0.200

- name: Build Meadow.ProjectLab
run: dotnet build -c Release Meadow.ProjectLab/Source/Meadow.ProjectLab.sln
run: dotnet build -c Release Meadow.ProjectLab/Source/Meadow.ProjectLab.slnx
218 changes: 0 additions & 218 deletions Source/Meadow.ProjectLab.sln

This file was deleted.

64 changes: 64 additions & 0 deletions Source/Meadow.ProjectLab.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<Solution>
<Folder Name="/_External/">
<Project Path="../../Meadow.Contracts/Source/Meadow.Contracts/Meadow.Contracts.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Core/Source/implementations/f7/Meadow.F7/Meadow.F7.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Core/Source/Meadow.Core/Meadow.Core.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/Audio.MicroAudio.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroLayout/Driver/Graphics.MicroLayout.csproj" />
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Libraries_and_Frameworks/Serialization.MicroJson/Driver/Serialization.MicroJson.csproj" />
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Sc16is7x2/Driver/ICs.IOExpanders.Sc16is7x2.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ahtx0/Driver/Sensors.Atmospheric.Ahtx0.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Xpt2046/Driver/Sensors.Hid.Xpt2046.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Foundation/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj">
<Deploy />
</Project>
<Project Path="../../Meadow.Logging/Source/Meadow.Logging/lib/Meadow.Logging.csproj" />
<Project Path="../../Meadow.Modbus/src/Meadow.Modbus/Meadow.Modbus.csproj" />
<Project Path="../../Meadow.Units/Source/Meadow.Units/Meadow.Units.csproj">
<Deploy />
</Project>
<Project Path="../../MQTTnet/Source/MQTTnet/MQTTnet.csproj" />
</Folder>
<Project Path="Meadow.ProjectLab/Meadow.ProjectLab.csproj">
<Deploy />
</Project>
<Project Path="ProjectLab_Demo/ProjectLab_Demo.csproj">
<BuildType Project="Debug" />
<Deploy />
</Project>
</Solution>
10 changes: 9 additions & 1 deletion Source/Meadow.ProjectLab/ConnectorProviderV3.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,17 @@ namespace Meadow.Devices;

internal class ConnectorProviderV3 : IConnectorProvider
{
private ProjectLabRs485Connector? _rs485Connector;

public Rs485Connector GetRs485UartConnector(ProjectLabHardwareBase projLab)
{
throw new PlatformNotSupportedException("RS485 is not supported on hardware revisions before 3.e");
if (_rs485Connector == null)
{
// create it with no parameters - it will throw only if a client tries to actually use it
_rs485Connector = new ProjectLabRs485Connector();
}

return _rs485Connector;
}

public ModbusRtuClient GetModbusRtuClient(ProjectLabHardwareBase projLab, int baudRate = 19200, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
Expand Down
12 changes: 7 additions & 5 deletions Source/Meadow.ProjectLab/ConnectorProviderV3e.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,22 @@ public ConnectorProviderV3e(ProjectLabHardwareBase projLab, II2cBus i2CBus)
}
catch (Exception ex)
{
Resolver.Log.Error($"Unable to connect to UART expander: {ex.Message}", Constants.LogGroup);
Resolver.Log.Warn($"Unable to connect to UART expander: {ex.Message}", Constants.LogGroup);
}
}

public Rs485Connector GetRs485UartConnector(ProjectLabHardwareBase projLab)
{
if (Resolver.Device is not F7CoreComputeV2) throw new NotSupportedException();
if (_uartExpander == null)
{
throw new NotSupportedException("No UART expander detected");
}

lock (_rs485SyncRoot)
{
if (_uartExpander == null)
{
// create it with no parameters - it will throw only if a client tries to actually use it
_rs485Connector = new ProjectLabRs485Connector();
}

if (_rs485Connector == null)
{
_rs485Connector = new ProjectLabRs485Connector(_uartExpander, _uartExpander.PortB);
Expand Down
32 changes: 29 additions & 3 deletions Source/Meadow.ProjectLab/ProjectLab.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,41 @@ public abstract class ProjectLabFeatherApp : App<F7FeatherV2, ProjectLab, IProje
}

/// <summary>
/// A base class for F7 Core Compute-based, Project Lab-targeted applications
/// A base class for F7 Core Compute (v4 and earlier)-based, Project Lab-targeted applications
/// </summary>
public abstract class ProjectLabCoreComputeApp : App<F7CoreComputeV2, ProjectLab, IProjectLabHardware>
{
}

/// <summary>
/// A base class for F7 Core Compute (v5)-based, Project Lab-targeted applications
/// </summary>
public abstract class ProjectLabV5App : App<F7CoreComputeV2, ProjectLabV5, IProjectLabHardware>
{
}

/// <summary>
/// Represents Project Lab hardware and exposes its peripherals
/// </summary>
public class ProjectLabV5 : ProjectLab
{
protected override IPin GetMcpResetPin(IF7CoreComputeMeadowDevice ccm)
{
return ccm.Pins.PH10;
}
}

/// <summary>
/// Represents Project Lab hardware and exposes its peripherals
/// </summary>
public class ProjectLab : IMeadowAppEmbeddedHardwareProvider<IProjectLabHardware>
{
private ProjectLab() { }
protected ProjectLab() { }

protected virtual IPin GetMcpResetPin(IF7CoreComputeMeadowDevice ccm)
{
return ccm.Pins.PB4; // this is where it is on the 4.e
}

/// <summary>
/// Create an instance of the ProjectLab class
Expand Down Expand Up @@ -72,6 +95,7 @@ public IProjectLabHardware Create(IMeadowDevice device)
mcpInterrupt = device.CreateDigitalInterruptPort(f.Pins.D09, InterruptMode.EdgeRising, ResistorMode.InternalPullDown);
mcpReset = device.CreateDigitalOutputPort(f.Pins.D14);

logger?.Info("creating Mcp_1 at 0x20");
mcp = new Mcp23008(i2cBus, address: 0x20, mcpInterrupt, mcpReset);

logger?.Trace("Mcp_1 up");
Expand All @@ -87,7 +111,9 @@ public IProjectLabHardware Create(IMeadowDevice device)
{
try
{
mcpReset = device.CreateDigitalOutputPort(c.Pins.PA10);
var reset = GetMcpResetPin(c);
Resolver.Log.Info($"Using MCP reset pin {reset.Name}");
mcpReset = device.CreateDigitalOutputPort(reset);

mcp = new Mcp23008(i2cBus, address: 0x27, resetPort: mcpReset);

Expand Down
4 changes: 2 additions & 2 deletions Source/Meadow.ProjectLab/ProjectLabHardwareV3.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,12 @@ internal ProjectLabHardwareV3(IF7CoreComputeMeadowDevice device, II2cBus i2cBus)

if (RevisionNumber < 15) // before 3.e
{
Logger?.Trace("Hardware is 3.d or earlier");
Logger?.Trace($"HW Revision: {RevisionNumber} Hardware is 3.d or earlier");
_connectors = new ConnectorProviderV3();
}
else
{
Logger?.Trace("Hardware is 3.e or later");
Logger?.Trace($"HW Revision: {RevisionNumber} Hardware is 3.e or later");
_connectors = new ConnectorProviderV3e(this, i2cBus);
}
}
Expand Down
4 changes: 2 additions & 2 deletions Source/Meadow.ProjectLab/ProjectLabHardwareV5.cs
Original file line number Diff line number Diff line change
Expand Up @@ -397,9 +397,9 @@ internal override DisplayConnector CreateDisplayConnector()
nameof(Display),
new PinMapping
{
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_CS, _device.Pins.PB15),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_CS, _device.Pins.PB4),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_RST, _device.Pins.PB8),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_DC, _device.Pins.PB14),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_DC, _device.Pins.PI11),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_CLK, _device.Pins.SPI5_SCK),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_COPI, _device.Pins.SPI5_COPI),
new PinMapping.PinAlias(DisplayConnector.PinNames.DISPLAY_LED, Mcp_1.Pins.GP5),
Expand Down
24 changes: 23 additions & 1 deletion Source/Meadow.ProjectLab/ProjectLabRs485Connector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,17 @@ namespace Meadow.Devices;

public class ProjectLabRs485Connector : Rs485Connector
{
private readonly Sc16is752 _expander;
private readonly Sc16is752? _expander;
private ISerialPort? _serialPort;
private ModbusRtuClient? _modbusClient;
private ModbusRtuServer? _modbusServer;

internal ProjectLabRs485Connector()
: base("Unsupported hardware", new SerialPortName("null", "null", null))
{

}

internal ProjectLabRs485Connector(Sc16is752 expander, SerialPortName portName)
: base("RS485", portName)
{
Expand All @@ -23,13 +29,24 @@ internal ProjectLabRs485Connector(Sc16is752 expander, SerialPortName portName)
/// <inheritdoc/>
public override ISerialPort CreateSerialPort(int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, int readBufferSize = 1024)
{
if (_expander == null)
{
throw new NotSupportedException("No UART expander detected");
}

Resolver.Log.Info("Creating RS485 serial port...");
_serialPort = _expander.PortB.CreateRs485SerialPort(baudRate, dataBits, parity, stopBits);
return _serialPort;
}

/// <inheritdoc/>
public override IModbusBusClient CreateModbusBusRtuClient(int baudRate = 19200, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
{
if (_expander == null)
{
throw new NotSupportedException("No UART expander detected");
}

Resolver.Log.Info("Creating Modbus RTU client...");
lock (_expander)
{
Expand All @@ -55,6 +72,11 @@ public override IModbusBusClient CreateModbusBusRtuClient(int baudRate = 19200,
/// <inheritdoc/>
public override IModbusServer CreateModbusBusRtuServer(int baudRate = 19200, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
{
if (_expander == null)
{
throw new NotSupportedException("No UART expander detected");
}

Resolver.Log.Info("Creating Modbus RTU server...");
lock (_expander)
{
Expand Down
3 changes: 2 additions & 1 deletion Source/ProjectLab_Demo/MeadowApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ namespace ProjectLab_Demo;

// Change to ProjectLabFeatherApp for Project Lab V1 or V2
// Change to ProjectLabCoreComputeApp for Project Lab V3+
public class MeadowApp : ProjectLabCoreComputeApp
// public class MeadowApp : ProjectLabCoreComputeApp // <-- this is for V3/v4
public class MeadowApp : ProjectLabV5App // this is for v5+
{
private DisplayController? displayController;

Expand Down
Loading