From be1495454685c361d22fcf13191478352498df34 Mon Sep 17 00:00:00 2001 From: "T. Thiery" Date: Thu, 21 Mar 2024 21:43:50 +0100 Subject: [PATCH] Add SetColorAsync method to ColorDistanceSensor #203 non-breaking --- .../ExampleColorDistanceSensor.cs | 7 ++++++ .../Devices/ColorDistanceSensor.cs | 23 ++++++++++++++++++- .../Enums/ColorDistanceSensorColor.cs | 10 ++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/SharpBrick.PoweredUp/Enums/ColorDistanceSensorColor.cs diff --git a/examples/SharpBrick.PoweredUp.Examples/ExampleColorDistanceSensor.cs b/examples/SharpBrick.PoweredUp.Examples/ExampleColorDistanceSensor.cs index ae70da9..aa37a2d 100644 --- a/examples/SharpBrick.PoweredUp.Examples/ExampleColorDistanceSensor.cs +++ b/examples/SharpBrick.PoweredUp.Examples/ExampleColorDistanceSensor.cs @@ -16,6 +16,13 @@ public override async Task ExecuteAsync() { var colorDistSensor = twoPortHub.B.GetDevice(); + foreach (var color in Enum.GetValues()) + { + await colorDistSensor.SetColorAsync(color); + + await Task.Delay(TimeSpan.FromSeconds(1)); + } + var observers = new[] { colorDistSensor.ColorObservable .Subscribe(color => Log.LogInformation("Color: {0}", color)), diff --git a/src/SharpBrick.PoweredUp/Devices/ColorDistanceSensor.cs b/src/SharpBrick.PoweredUp/Devices/ColorDistanceSensor.cs index c5c909c..516fdec 100644 --- a/src/SharpBrick.PoweredUp/Devices/ColorDistanceSensor.cs +++ b/src/SharpBrick.PoweredUp/Devices/ColorDistanceSensor.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; -using System.Text; using System.Threading.Tasks; using SharpBrick.PoweredUp.Protocol; +using SharpBrick.PoweredUp.Protocol.Messages; using SharpBrick.PoweredUp.Utils; namespace SharpBrick.PoweredUp; @@ -61,6 +61,27 @@ protected override uint GetDefaultDeltaInterval(byte modeIndex) _ => base.GetDefaultDeltaInterval(modeIndex), }; + public async Task SetColorAsync(ColorDistanceSensorColor colorLedMode) + { + AssertIsConnected(); + + await _protocol.SendMessageAsync(new PortInputFormatSetupSingleMessage(_portId, ModeIndexLight, 10000, false) + { + HubId = _hubId, + }); + + var response = await _protocol.SendPortOutputCommandAsync(new GenericWriteDirectModeDataMessage( + _portId, + PortOutputCommandStartupInformation.ExecuteImmediately, PortOutputCommandCompletionInformation.CommandFeedback, + ModeIndexLight, + new byte[] { (byte)colorLedMode }) + { + HubId = _hubId, + }); + + return response; + } + public IEnumerable GetStaticPortInfoMessages(Version softwareVersion, Version hardwareVersion, SystemType systemType) => ((softwareVersion, hardwareVersion, systemType) switch { diff --git a/src/SharpBrick.PoweredUp/Enums/ColorDistanceSensorColor.cs b/src/SharpBrick.PoweredUp/Enums/ColorDistanceSensorColor.cs new file mode 100644 index 0000000..98cbe42 --- /dev/null +++ b/src/SharpBrick.PoweredUp/Enums/ColorDistanceSensorColor.cs @@ -0,0 +1,10 @@ +namespace SharpBrick.PoweredUp; + +public enum ColorDistanceSensorColor +{ + None = 0, + Blue = 3, + Green = 5, + Red = 9, + White = 10, +} \ No newline at end of file