From ae3abc4a513d99fd0d5a1e7f0e161e30d00a965b Mon Sep 17 00:00:00 2001 From: TheGreatCO Date: Wed, 22 Mar 2023 15:26:23 -0400 Subject: [PATCH 001/141] Initial commit of PMSA003I --- .../Driver/Pmsa003I/Pmsa003I.Constants.cs | 12 ++ .../Driver/Pmsa003I/Pmsa003I.Enums.cs | 10 ++ .../Driver/Pmsa003I/Pmsa003I.cs | 137 ++++++++++++++++++ .../Sensors.Environmental.Pmsa003I.csproj | 10 ++ .../Samples/Pma003I_Sample/MeadowApp.cs | 43 ++++++ .../Pma003I_Sample/Pma003I_Sample.csproj | 20 +++ .../Samples/Pma003I_Sample/meadow.config.yaml | 2 + Source/Meadow.Foundation.sln | 24 +++ 8 files changed, 258 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs new file mode 100644 index 0000000000..573885c393 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Meadow.Foundation.Sensors.Environmental +{ + public partial class Pmsa003I + { + // This is reversed because we reverse the whole message because it is big-endian and it makes converting values easier + private static readonly byte[] Preamble = {0x4d, 0x42}; + } +} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs new file mode 100644 index 0000000000..23e5eae029 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Meadow.Foundation.Sensors.Environmental +{ + public partial class Pmsa003I + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs new file mode 100644 index 0000000000..249c31927f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -0,0 +1,137 @@ +using System; +using System.Linq; +using System.Threading.Tasks; + +using Meadow.Hardware; +using Meadow.Peripherals.Sensors.Environmental; +using Meadow.Units; + +namespace Meadow.Foundation.Sensors.Environmental +{ + public partial class Pmsa003I : + ByteCommsSensorBase<(Concentration? PM1_0Std, + Concentration? PM2_5Std, + Concentration? PM10_0Std, + Concentration? PM1_0Env, + Concentration? PM2_5Env, + Concentration? PM10_0Env, + Concentration? P03um, + Concentration? P05um, + Concentration? P10um, + Concentration? P25um, + Concentration? P50um, + Concentration? P100um)>, + IConcentrationSensor + { + protected override Task<(Concentration? PM1_0Std, Concentration? PM2_5Std, Concentration? PM10_0Std, + Concentration? PM1_0Env, Concentration? PM2_5Env, Concentration? PM10_0Env, Concentration? P03um, + Concentration? P05um, Concentration? P10um, Concentration? P25um, Concentration? P50um, Concentration? + P100um)> ReadSensor() + { + var buffer = new byte[32]; + Peripheral.Read(buffer); + var span = buffer.AsSpan(); + span.Reverse(); + if (buffer[30..32].SequenceEqual(Preamble) == false) + { + throw new Exception("Preamble mismatch!"); + } + var messageLength = BitConverter.ToUInt16(span[28..30]); + if (messageLength != 28) + { + throw new Exception("Message is corrupt or has invalid length"); + } + + var checksum = BitConverter.ToUInt16(buffer[2..4]); + // this is in big-endian format, so we need to reverse things... + var pm10Standard = new Concentration(BitConverter.ToUInt16(span[26..28]), Units.Concentration.UnitType.PartsPerMillion); + var pm25Standard = new Concentration(BitConverter.ToUInt16(span[24..26]), Units.Concentration.UnitType.PartsPerMillion); + var pm100Standard = new Concentration(BitConverter.ToUInt16(span[22..24]), Units.Concentration.UnitType.PartsPerMillion); + var pm10Environmental = new Concentration(BitConverter.ToUInt16(span[20..22]), Units.Concentration.UnitType.PartsPerMillion); + var pm25Environmental = new Concentration(BitConverter.ToUInt16(span[18..20]), Units.Concentration.UnitType.PartsPerMillion); + var pm100Environmental = new Concentration(BitConverter.ToUInt16(span[16..18]), Units.Concentration.UnitType.PartsPerMillion); + var p03um = new Concentration(BitConverter.ToUInt16(span[14..16]), Units.Concentration.UnitType.PartsPerMillion); + var p05um = new Concentration(BitConverter.ToUInt16(span[12..14]), Units.Concentration.UnitType.PartsPerMillion); + var p10um = new Concentration(BitConverter.ToUInt16(span[10..12]), Units.Concentration.UnitType.PartsPerMillion); + var p25um = new Concentration(BitConverter.ToUInt16(span[8..10]), Units.Concentration.UnitType.PartsPerMillion); + var p50um = new Concentration(BitConverter.ToUInt16(span[6..8]), Units.Concentration.UnitType.PartsPerMillion); + var p100um = new Concentration(BitConverter.ToUInt16(span[4..6]), Units.Concentration.UnitType.PartsPerMillion); + + Conditions = (pm10Standard, pm25Standard, pm100Standard, pm10Environmental, pm25Environmental, + pm100Environmental, p03um, p05um, p10um, p25um, p50um, p100um); + + return Task.FromResult(Conditions); + } + + + public Concentration? Concentration { get; } + public event EventHandler> ConcentrationUpdated; + + /// + /// Raised when the Standard PM1.0 concentration changes + /// + public event EventHandler> PM1_0StdConcentrationUpdated = delegate { }; + + /// + /// Raised when the Standard PM2.5 concentration changes + /// + public event EventHandler> PM2_5StdConcentrationUpdated = delegate { }; + + /// + /// Raised when the Standard PM10.0 concentration changes + /// + public event EventHandler> PM10_0StdConcentrationUpdated = delegate { }; + + /// + /// Raised when the Environment PM1.0 concentration changes + /// + public event EventHandler> PM1_0EnvConcentrationUpdated = delegate { }; + + /// + /// Raised when the Environment PM2.5 concentration changes + /// + public event EventHandler> PM2_5EnvConcentrationUpdated = delegate { }; + + /// + /// Raised when the Environment PM10.0 concentration changes + /// + public event EventHandler> PM10_0EnvConcentrationUpdated = delegate { }; + + public Concentration? PM1_0Std => Conditions.PM1_0Std; + public Concentration? PM2_5Std => Conditions.PM2_5Std; + public Concentration? PM10_0Std => Conditions.PM10_0Std; + public Concentration? PM1_0Env => Conditions.PM1_0Env; + public Concentration? PM2_5Env => Conditions.PM2_5Env; + public Concentration? PM10_0Env => Conditions.PM10_0Env; + public Concentration? P03um => Conditions.P03um; + public Concentration? P05um => Conditions.P05um; + public Concentration? P10um => Conditions.P10um; + public Concentration? P25um => Conditions.P25um; + public Concentration? P50um => Conditions.P50um; + public Concentration? P100um => Conditions.P100um; + + /// + /// Create a new PMSA003I sensor object + /// + /// + /// The I2C bus + public Pmsa003I(II2cBus i2cBus) + : base(i2cBus, 0x12) + { + + } + + protected async Task Initialize() + { + + } + + public Task Read() => throw new NotImplementedException(); + + public Task<(Concentration? PM1_0Std, Concentration? PM2_5Std, Concentration? PM10_0Std, + Concentration? PM1_0Env, Concentration? PM2_5Env, Concentration? PM10_0Env, Concentration? P03um, + Concentration? P05um, Concentration? P10um, Concentration? P25um, Concentration? P50um, Concentration? + P100um)> ReadSensor2() => + ReadSensor(); + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj new file mode 100644 index 0000000000..06ab4dce1b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj @@ -0,0 +1,10 @@ + + + netstandard2.1 + Library + Pmsa003I + + + + + \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs new file mode 100644 index 0000000000..33fe78df21 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -0,0 +1,43 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation; +using Meadow.Foundation.Leds; + +using System; +using System.Threading; +using System.Threading.Tasks; +using Meadow.Foundation.Sensors.Environmental; +using Meadow.Hardware; + +namespace Pma003I_Sample +{ + // Change F7FeatherV2 to F7FeatherV1 for V1.x boards + public class MeadowApp : App + { + private Pmsa003I _pmsa003I; + + public override async Task Run() + { + Console.WriteLine("Run..."); + + while (true) + { + var (pm10Std, pm25Std, pm100Std, pm10Env, pm25Env, pm100Env, p03Um, p05Um, p10Um, p25Um, p50Um, p100Um) = await _pmsa003I.ReadSensor2() + .ConfigureAwait(false); + + Console.WriteLine( + $"{pm10Std}, {pm25Std}, {pm100Std}, {pm10Env}, {pm25Env}, {pm100Env}, {p03Um}, {p05Um}, {p10Um}, {p25Um}, {p50Um}, {p100Um}"); + } + + await base.Run(); + } + + public override Task Initialize() + { + var bus = Device.CreateI2cBus(I2cBusSpeed.Standard); + _pmsa003I = new Pmsa003I(bus); + + return base.Initialize(); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj new file mode 100644 index 0000000000..76de1c00a5 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj @@ -0,0 +1,20 @@ + + + netstandard2.1 + true + Library + App + + + + + + + + + + + Always + + + \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index ef3ac0c122..ed6f2f16a4 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1139,6 +1139,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Gtk", "Meadow.Foun EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Epd5in65f_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\Epd5in65f_Sample\Epd5in65f_Sample.csproj", "{16A387A9-80AA-4080-85F6-10F53D6EC99E}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003I", "Pmsa003I", "{AD6DD7B6-B896-44B9-904E-9330C2C842C7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensors.Environmental.Pmsa003I", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Pmsa003I\Sensors.Environmental.Pmsa003I.csproj", "{AE3BDF20-5078-49A7-AFDE-47A249418394}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2691,6 +2699,18 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.Build.0 = Release|Any CPU + {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Build.0 = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3259,6 +3279,10 @@ Global {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {768E2B04-FBE8-4464-B5DE-F5AA010E9D33} = {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} + {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {AE3BDF20-5078-49A7-AFDE-47A249418394} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} + {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} + {B2910299-B232-4CAB-AA13-591ABDDC0ED4} = {A3F37EFB-9686-4074-9962-5F731C52D919} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From bb71930af90e7603f04df5b9a1308ad4180b84d5 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 08:05:14 -0700 Subject: [PATCH 002/141] Denugetize --- .../Audio.PiezoSpeaker_Sample.csproj | 2 +- .../Generators.SoftPwmPort_Sample.csproj | 2 +- .../Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj | 2 +- .../Leds.Led_Sample/Leds.Led_Sample.csproj | 2 +- .../Leds.PwmLedBarGraph_Sample.csproj | 2 +- .../Leds.PwmLed_Onboard_Sample.csproj | 2 +- .../Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj | 2 +- .../Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj | 2 +- .../Leds.RgbPwmLed_Onboard_Sample.csproj | 2 +- .../Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj | 2 +- .../Motor.HBridgeMotor_Sample.csproj | 2 +- .../Relays.Relay_Sample/Relays.Relay_Sample.csproj | 2 +- .../Sensors.Buttons.PushButton_BasicSample.csproj | 2 +- .../Sensors.Buttons.PushButton_Sample.csproj | 2 +- .../Sensors.Environmental.AnalogWaterLevel_Sample.csproj | 2 +- .../Sensors.HID.AnalogJoystick_Sample.csproj | 2 +- .../Sensors.HallEffect_Sample.csproj | 2 +- .../Sensors.Light.AnalogLightSensor_Sample.csproj | 2 +- .../Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj | 2 +- .../Sensors.Rotary.RotaryEncoder_Sample.csproj | 2 +- .../Sensors.Switches.DipSwitch_Sample.csproj | 2 +- .../Sensors.Switches.SpdtSwitch_Sample.csproj | 2 +- .../Sensors.Switches.SpstSwitch_Sample.csproj | 2 +- .../Sensors.Temperature.AnalogTemperature_Sample.csproj | 2 +- Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj | 2 +- .../Driver/DataLoggers.AdafruitIO.csproj | 2 +- .../Driver/DataLoggers.SensorReading.csproj | 2 +- .../Driver/DataLoggers.ThingSpeak.csproj | 2 +- .../Driver/Displays.TextDisplayMenu.csproj | 2 +- .../TextDisplayMenu_GameMenu_Sample.csproj | 2 +- .../TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj | 2 +- .../Driver/Graphics.MicroGraphics.csproj | 2 +- .../Samples/ImageLoadSample/ImageLoad_Sample.csproj | 2 +- .../Driver/Sensors.Location.Gnss.NmeaProcessor.csproj | 2 +- .../NmeaProcessor_Sample/NmeaProcessor_Sample.csproj | 2 +- .../Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj | 2 +- .../Samples/Yx5300_Sample/Yx5300_Sample.csproj | 2 +- .../Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj | 2 +- .../Samples/Tea5767_Sample/Tea5767_Sample.csproj | 2 +- .../Displays.Ch1115/Driver/Displays.Ch1115.csproj | 2 +- .../Samples/Ch1115_Sample/Ch1115_Sample.csproj | 2 +- .../Displays.Gtk/Driver/Displays.Gtk.csproj | 2 +- .../Driver/Displays.Lcd.CharacterDisplay.csproj | 2 +- .../CharacterDisplay_Sample/CharacterDisplay_Sample.csproj | 2 +- .../Driver/Displays.Led.FourDigitSevenSegment.csproj | 2 +- .../FourDigitSevenSegment_Sample.csproj | 2 +- .../Driver/Displays.Led.SevenSegment.csproj | 2 +- .../Samples/SevenSegment_Sample/SevenSegment_Sample.csproj | 2 +- .../Displays.Max7219/Driver/Displays.Max7219.csproj | 2 +- .../Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj | 2 +- .../Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj | 2 +- .../Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj | 2 +- .../Displays.Pcd8544/Driver/Displays.Pcd8544.csproj | 2 +- .../Samples/Pcd8544_Sample/Pcd8544_Sample.csproj | 2 +- .../Displays.Sh1106/Driver/Displays.Sh1106.csproj | 2 +- .../Samples/Sh1106_Sample/Sh1106_Sample.csproj | 2 +- .../Displays.Ssd130x/Driver/Displays.Ssd130x.csproj | 2 +- .../Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj | 2 +- .../Samples/Ssd1306_Sample/Ssd1306_Sample.csproj | 2 +- .../Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj | 2 +- .../Samples/Ssd1309_Sample/Ssd1309_Sample.csproj | 2 +- .../Displays.Ssd1327/Driver/Displays.Ssd1327.csproj | 2 +- .../Samples/Ssd1327_Sample/Ssd1327_Sample.csproj | 2 +- .../Displays.St7565/Driver/Displays.St7565.csproj | 2 +- .../Samples/St7565_Sample/St7565_Sample.csproj | 2 +- .../Displays.TftSpi/Driver/Displays.TftSpi.csproj | 4 ++-- .../Samples/Gc9a01_Sample/Gc9a01_Sample.csproj | 2 +- .../Samples/Hx8357b_Sample/Hx8357b_Sample.csproj | 2 +- .../Samples/Hx8357d_Sample/Hx8357d_Sample.csproj | 2 +- .../Samples/Ili9163_Sample/Ili9163_Sample.csproj | 2 +- .../Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj | 2 +- .../Samples/Ili9341_Sample/Ili9341_Sample.csproj | 2 +- .../Samples/Ili9481_Sample/Ili9481_Sample.csproj | 2 +- .../Samples/Ili9486_Sample/Ili9486_Sample.csproj | 2 +- .../Samples/Ili9488_Sample/Ili9488_Sample.csproj | 2 +- .../Samples/Rm68140_Sample/Rm68140_Sample.csproj | 2 +- .../Samples/S6D02A1_Sample/S6D02A1_Sample.csproj | 2 +- .../Samples/ST7789_Sample/ST7789_Sample.csproj | 2 +- .../Samples/Ssd1331_Sample/Ssd1331_Sample.csproj | 2 +- .../Samples/Ssd1351_Sample/Ssd1351_Sample.csproj | 2 +- .../Samples/St7735_Sample/St7735_Sample.csproj | 2 +- .../Samples/St7796s_Sample/St7796s_Sample.csproj | 2 +- .../Displays.Tm1637/Driver/Displays.Tm1637.csproj | 2 +- .../Samples/Tm1637_Sample/Tm1637_Sample.csproj | 2 +- .../Displays.WinForms/Driver/Displays.WinForms.csproj | 2 +- .../Displays.ePaper/Driver/Displays.ePaper.csproj | 2 +- .../Samples/IL0373_Sample/IL0373_Sample.csproj | 2 +- .../Samples/IL0376F_Sample/IL0376F_Sample.csproj | 2 +- .../Samples/IL0398_Sample/IL0398_Sample.csproj | 2 +- .../Samples/IL3897_Sample/IL3897_Sample.csproj | 2 +- .../Samples/IL91874V03_Sample/IL91874V03_Sample.csproj | 2 +- .../Samples/IL91874_Sample/IL91874_Sample.csproj | 2 +- .../Samples/SSD1608_Sample/SSD1608_Sample.csproj | 2 +- .../Samples/SSD1680_Sample/SSD1680_Sample.csproj | 2 +- .../Samples/SSD1681_Sample/SSD1681_Sample.csproj | 2 +- .../Samples/UC8151C_Sample/UC8151C_Sample.csproj | 2 +- .../Driver/Displays.ePaperWaveShare.csproj | 2 +- .../Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj | 2 +- .../Samples/EpdColor_Sample/EpdColor_Sample.csproj | 2 +- .../EpdMonochrome_Sample/EpdMonochrome_Sample.csproj | 2 +- .../ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj | 2 +- .../Samples/Ads1015_Sample/Ads1015_Sample.csproj | 2 +- .../Samples/Ads1115_Sample/Ads1115_Sample.csproj | 2 +- .../ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj | 2 +- .../Samples/At24Cxx_Sample/At24Cxx_Sample.csproj | 2 +- .../Driver/ICs.FanControllers.Emc2101.csproj | 2 +- .../Samples/Emc2101_Sample/Emc2101_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.AnalogMux.csproj | 2 +- .../Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.As1115.csproj | 2 +- .../Samples/As1115_Sample/As1115_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Ds3502.csproj | 2 +- .../Samples/Ds3502_Sample/Ds3502_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Ht16k33.csproj | 2 +- .../Samples/Ht16k33_Sample/Ht16k33_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Is31fl3731.csproj | 2 +- .../Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Mcp23xxx.csproj | 2 +- .../Samples/Mcp23008_Sample/Mcp23008_Sample.csproj | 2 +- .../Samples/Mcp23009_Sample/Mcp23009_Sample.csproj | 2 +- .../Samples/Mcp23017_Sample/Mcp23017_Sample.csproj | 2 +- .../Samples/Mcp23018_Sample/Mcp23018_Sample.csproj | 2 +- .../Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj | 2 +- .../Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj | 2 +- .../Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj | 2 +- .../Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj | 2 +- .../Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj | 2 +- .../Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Pca9685.csproj | 2 +- .../Samples/Pca9685_Sample/Pca9685_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.SerialWombat.csproj | 6 +++--- .../Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj | 2 +- .../Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj | 2 +- .../Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj | 2 +- .../Samples/Sw18AB_Sample/Sw18AB_Sample.csproj | 2 +- .../Sw18AB_Ultrasonic_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.Tca9548a.csproj | 2 +- .../Samples/Tca9548a_Sample/Tca9548a_Sample.csproj | 2 +- .../Driver/ICs.IOExpanders.x74595.csproj | 2 +- .../Samples/x74595_Sample/x74595_Sample.csproj | 2 +- .../Leds.Apa102/Driver/Leds.Apa102.csproj | 2 +- .../Apa102_Display_Sample/Apa102_Display_Sample.csproj | 2 +- .../Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj | 2 +- .../Leds.Pca9633/Driver/Leds.Pca9633.csproj | 2 +- .../Samples/Pca9633_Sample/Pca9633_Sample.csproj | 2 +- .../Driver/Motors.ElectronicSpeedController.csproj | 2 +- .../ElectronicSpeedController_Sample.csproj | 2 +- .../Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj | 2 +- .../Samples/A4988_Sample/A4988_Sample.csproj | 2 +- .../Driver/Motors.Stepper.Uln2003.csproj | 2 +- .../Samples/Uln2003_Sample/Uln2003_Sample.csproj | 2 +- .../Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj | 2 +- .../Tb67h420ftg_Encoder_Sample.csproj | 2 +- .../Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj | 2 +- .../RTCs.Ds1307/Driver/RTCs.Ds1307.csproj | 2 +- .../RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj | 2 +- .../RTCs.Ds323x/Driver/RTCs.Ds323x.csproj | 2 +- .../RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj | 2 +- .../AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Bh1900Nux.csproj | 2 +- .../Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Bme280.csproj | 2 +- .../Samples/Bme280_Sample/Bme280_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Bme68x.csproj | 2 +- .../Samples/Bme680_Sample/Bme680_Sample.csproj | 2 +- .../Samples/Bme688_Sample/Bme688_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Bmp085.csproj | 2 +- .../Samples/Bmp085_Sample/Bmp085_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Bmp180.csproj | 2 +- .../Samples/Bmp180_Sample/Bmp180_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Ccs811.csproj | 2 +- .../Samples/Ccs811_Sample/Ccs811_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Dhtxx.csproj | 2 +- .../Samples/Dht10_Sample/Dht10_Sample.csproj | 2 +- .../Samples/Dht12_Sample/Dht12_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Hih6130.csproj | 2 +- .../Samples/Hih6130_Sample/Hih6130_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Htux1d.csproj | 2 +- .../Samples/Htu21d_Sample/Htu21d_Sample.csproj | 2 +- .../Samples/Htu31d_Sample/Htu31d_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Mpl3115a2.csproj | 2 +- .../Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Ms5611.csproj | 2 +- .../Samples/Ms5611_Sample/Ms5611_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Sgp40.csproj | 2 +- .../Samples/Sgp40_Sample/Sgp40_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Sht31d.csproj | 2 +- .../Samples/Sht31d_Sample/Sht31d_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Sht4x.csproj | 2 +- .../Samples/Sht4x_Sample/Sht4x_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Si70xx.csproj | 2 +- .../Samples/Si70xx_Sample/Si70xx_Sample.csproj | 2 +- .../Driver/Sensors.Atmospheric.Th02.csproj | 2 +- .../Samples/Th02_Sample/Th02_Sample.csproj | 2 +- .../Driver/Sensors.Camera.Mlx90640.csproj | 2 +- .../Samples/Mlx90640_Sample/Mlx90640_Sample.csproj | 2 +- .../Driver/Sensors.Camera.Vc0706.csproj | 2 +- .../Samples/Vc0706_Sample/Vc0706_Sample.csproj | 2 +- .../Driver/Sensors.Distance.Hcsr04.csproj | 2 +- .../Samples/Hcsr04_Sample/Hcsr04_Sample.csproj | 2 +- .../Driver/Sensors.Distance.MaxBotix.csproj | 2 +- .../Samples/MaxBotix_Sample/MaxBotix_Sample.csproj | 2 +- .../Driver/Sensors.Distance.Vl53l0x.csproj | 2 +- .../Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj | 2 +- .../Driver/Sensors.Environmental.Ags01Db.csproj | 2 +- .../Samples/Ags01Db_Sample/Ags01Db_Sample.csproj | 2 +- .../Driver/Sensors.Environmental.Ens160.csproj | 2 +- .../Samples/Ens160_Sample/Ens160_Sample.csproj | 2 +- .../Driver/Sensors.Environmental.Scd4x.csproj | 2 +- .../Samples/Scd40_Sample/Scd40_Sample.csproj | 2 +- .../Samples/Scd41_Sample/Scd41_Sample.csproj | 2 +- .../Driver/Sensors.Environmental.Y4000.csproj | 4 ++-- .../Samples/Y4000_Sample/Y4000_Sample.csproj | 2 +- .../Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj | 2 +- .../Samples/Mt3339_Sample/Mt3339_Sample.csproj | 2 +- .../Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj | 2 +- .../Samples/NeoM8_Sample/NeoM8_Sample.csproj | 2 +- .../Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj | 2 +- .../Samples/As5013_Sample/As5013_Sample.csproj | 2 +- .../Driver/Sensors.Hid.Bbq10Keyboard.csproj | 2 +- .../Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj | 2 +- .../Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj | 2 +- .../Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj | 2 +- .../Samples/Mpr121_Sample/Mpr121_Sample.csproj | 2 +- .../Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj | 2 +- .../Samples/Tsc2004_Sample/Tsc2004_Sample.csproj | 2 +- .../Driver/Sensors.Hid.WiiExtensionControllers.csproj | 2 +- .../NesClassicController_Sample.csproj | 2 +- .../SnesClassicController_Sample.csproj | 2 +- .../WiiClassicControllerPro_Sample.csproj | 2 +- .../WiiClassicController_Sample.csproj | 2 +- .../Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj | 2 +- .../Driver/Sensors.Light.Alspt19315C.csproj | 2 +- .../Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj | 2 +- .../Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj | 2 +- .../AnalogSolarIntensityGauge_Sample.csproj | 2 +- .../Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj | 2 +- .../Samples/Bh1745_Sample/Bh1745_Sample.csproj | 2 +- .../Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj | 2 +- .../Samples/Bh1750_Sample/Bh1750_Sample.csproj | 2 +- .../Driver/Sensors.Light.Max44009.csproj | 2 +- .../Samples/Max44009_Sample/Max44009_Sample.csproj | 2 +- .../Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj | 2 +- .../Samples/Si1145_Sample/Si1145_Sample.csproj | 2 +- .../Driver/Sensors.Light.Temt6000.csproj | 2 +- .../Samples/Temt6000_Sample/Temt6000_Sample.csproj | 2 +- .../Driver/Sensors.Light.Tsl2591.csproj | 2 +- .../Samples/Tsl2591_Sample/Tsl2591_Sample.csproj | 2 +- .../Driver/Sensors.Light.Veml7700.csproj | 2 +- .../Samples/Veml7700_Sample/Veml7700_Sample.csproj | 2 +- .../Driver/Sensors.LoadCell.Hx711.csproj | 2 +- .../Samples/Hx711_Sample/Hx711_Sample.csproj | 2 +- .../Driver/Sensors.LoadCell.Nau7802.csproj | 2 +- .../Samples/Nau7802_Sample/Nau7802_Sample.csproj | 2 +- .../Driver/Sensors.Moisture.Capacitive.csproj | 2 +- .../Samples/Capacitive_Sample/Capacitive_Sample.csproj | 2 +- .../Driver/Sensors.Moisture.Fc28.csproj | 2 +- .../Samples/Fc28_Sample/Fc28_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Adxl3xx.csproj | 2 +- .../Samples/Adxl335_Sample/Adxl335_Sample.csproj | 2 +- .../Samples/Adxl337_Sample/Adxl337_Sample.csproj | 2 +- .../Samples/Adxl345_Sample/Adxl345_Sample.csproj | 2 +- .../Samples/Adxl362_Sample/Adxl362_Sample.csproj | 2 +- .../Samples/Adxl377_Sample/Adxl377_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Apds9960.csproj | 2 +- .../Samples/Apds9960_Sample/Apds9960_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Bmi270.csproj | 2 +- .../Samples/Bmi270_Sample/Bmi270_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Bno055.csproj | 2 +- .../Samples/Bno055_Sample/Bno055_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Hcsens0040.csproj | 2 +- .../Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Hmc5883.csproj | 2 +- .../Samples/Hmc5883_Sample/Hmc5883_Sample.csproj | 2 +- .../Samples/Qmc5883_Sample/Qmc5883_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Mag3110.csproj | 2 +- .../Samples/Mag3110_Sample/Mag3110_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Mma7660fc.csproj | 2 +- .../Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Mmc5603.csproj | 2 +- .../Samples/Mmc5603_Sample/Mmc5603_Sample.csproj | 2 +- .../Driver/Sensors.Motion.Mpu6050.csproj | 2 +- .../Samples/Mpu6050_Sample/Mpu6050_Sample.csproj | 2 +- .../Driver/Sensors.Motion.ParallaxPir.csproj | 2 +- .../Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj | 2 +- .../Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj | 2 +- .../Samples/Ina260_Sample/Ina260_Sample.csproj | 2 +- .../Driver/Sensors.Radio.Rfid.IDxxLA.csproj | 2 +- .../Samples/IDxxLA_Sample/IDxxLA_Sample.csproj | 2 +- .../Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj | 2 +- .../Samples/Ky038_Sample/Ky038_Sample.csproj | 2 +- .../Driver/Sensors.Temperature.Lm75.csproj | 2 +- .../Samples/Lm75_Sample/Lm75_Sample.csproj | 2 +- .../Driver/Sensors.Temperature.Mcp9808.csproj | 2 +- .../Samples/Mcp9808_Sample/Mcp9808_Sample.csproj | 2 +- .../Driver/Sensors.Temperature.Thermistor.csproj | 2 +- .../Samples/Thermistor_Sample/Thermistor_Sample.csproj | 2 +- .../Driver/Sensors.Temperature.Tmp102.csproj | 2 +- .../Samples/Tmp102_Sample/Tmp102_Sample.csproj | 2 +- .../Driver/Sensors.Weather.SwitchingAnemometer.csproj | 2 +- .../SwitchingAnemometer_Sample.csproj | 2 +- .../Driver/Sensors.Weather.SwitchingRainGauge.csproj | 2 +- .../SwitchingRainGauge_Sample.csproj | 2 +- .../Driver/Sensors.Weather.WindVane.csproj | 2 +- .../Samples/WindVane_Sample/WindVane_Sample.csproj | 2 +- .../Servos.ServoCore/Driver/Servos.ServoCore.csproj | 2 +- .../Samples/ServoCore_Sample/ServoCore_Sample.csproj | 2 +- 308 files changed, 312 insertions(+), 312 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Audio.PiezoSpeaker_Sample/Audio.PiezoSpeaker_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Generators.SoftPwmPort_Sample/Generators.SoftPwmPort_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/Leds.LedBarGraph_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/Leds.Led_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/Leds.PwmLedBarGraph_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/Leds.PwmLed_Onboard_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/Leds.PwmLed_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/Leds.RgbLed_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/Leds.RgbPwmLed_Onboard_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/Leds.RgbPwmLed_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Motor.HBridgeMotor_Sample/Motor.HBridgeMotor_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/Relays.Relay_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_BasicSample/Sensors.Buttons.PushButton_BasicSample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Buttons.PushButton_Sample/Sensors.Buttons.PushButton_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Environmental.AnalogWaterLevel_Sample/Sensors.Environmental.AnalogWaterLevel_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj index da9f61d7ac..54ea931c17 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.HID.AnalogJoystick_Sample/Sensors.HID.AnalogJoystick_Sample.csproj @@ -14,7 +14,7 @@ - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.HallEffect_Sample/Sensors.HallEffect_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj index d49a10589f..92c62f04f6 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Light.AnalogLightSensor_Sample/Sensors.Light.AnalogLightSensor_Sample.csproj @@ -14,7 +14,7 @@ - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj index 2c2803bf16..36fca71b8f 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoderWithButton_Sample/Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj @@ -11,7 +11,7 @@ - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj index 2c2803bf16..36fca71b8f 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Rotary.RotaryEncoder_Sample/Sensors.Rotary.RotaryEncoder_Sample.csproj @@ -11,7 +11,7 @@ - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.DipSwitch_Sample/Sensors.Switches.DipSwitch_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpdtSwitch_Sample/Sensors.Switches.SpdtSwitch_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj index ea265c2bc9..5232cdbf91 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Switches.SpstSwitch_Sample/Sensors.Switches.SpstSwitch_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj b/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj index d49a10589f..92c62f04f6 100644 --- a/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj +++ b/Source/Meadow.Foundation.Core.Samples/Sensors.Temperature.AnalogTemperature_Sample/Sensors.Temperature.AnalogTemperature_Sample.csproj @@ -14,7 +14,7 @@ - + diff --git a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj index 8010d4d2ef..c426d65ed7 100644 --- a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj +++ b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj index bc01078230..5ffef7852f 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.AdafruitIO/Driver/DataLoggers.AdafruitIO.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj index 9a3ee85e03..da1bd10972 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.SensorReading/Driver/DataLoggers.SensorReading.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj index 133a4482a1..8889a0373a 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/DataLoggers.ThingSpeak/Driver/DataLoggers.ThingSpeak.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj index 29f59b96a2..9412145386 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj index b53abd752b..be9dfbc67b 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/TextDisplayMenu_GameMenu_Sample.csproj @@ -16,7 +16,7 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj index b53abd752b..be9dfbc67b 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/TextDisplayMenu_Sample.csproj @@ -16,7 +16,7 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj index 6bf01b4d0d..f82424dd8a 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Graphics.MicroGraphics.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj index 2b966ed4a5..133629e6ad 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Samples/ImageLoadSample/ImageLoad_Sample.csproj @@ -29,7 +29,7 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj index 69c68b9d9e..cc66492434 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Driver/Sensors.Location.Gnss.NmeaProcessor.csproj @@ -20,6 +20,6 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj index 90d9b56fc1..b09c180581 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Sensors.Location.Gnss.NmeaProcessor/Samples/NmeaProcessor_Sample/NmeaProcessor_Sample.csproj @@ -13,7 +13,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj index 22a753d535..97c48c99db 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Driver/Audio.Mp3.Yx5300.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj index fabfbad8b5..d0b166c4eb 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Mp3.Yx5300/Samples/Yx5300_Sample/Yx5300_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj index 7449e4cf31..06de32f482 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Audio.Radio.Tea5767.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj index 93b8663c86..0a4bf80da1 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Samples/Tea5767_Sample/Tea5767_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj index e9d6113de8..dadb73d968 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Displays.Ch1115.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj index 9e5b64a30b..ff2e0c050a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/Ch1115_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj index 0454cf7697..256638b403 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Gtk/Driver/Displays.Gtk.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj index 2ac132c89b..9bb9f0551f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/Displays.Lcd.CharacterDisplay.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj index 3027db4da9..a3072ddbd8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/CharacterDisplay_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj index ba3559ad4a..067f6011f4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/Displays.Led.FourDigitSevenSegment.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj index 5ba5b90891..ca22616d61 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Samples/FourDigitSevenSegment_Sample/FourDigitSevenSegment_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj index cfac952597..0a71883f23 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj index 8ddd30aaae..17d6c70395 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Samples/SevenSegment_Sample/SevenSegment_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj index dc491de832..f6c44ef382 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Displays.Max7219.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj index 5c2a5c8793..f6e6d249d4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/Max7219_8x8x4_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj index 5c2a5c8793..f6e6d249d4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/Max7219_8x8x4x2_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj index 9643fea42c..8407db89ab 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_Sample/Max7219_7Segment_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj index 002e791655..7d48ec626e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Displays.Pcd8544.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj index a43e1bcd88..bd40575663 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/Pcd8544_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj index ace950b3bf..d456daa683 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj index 71e4a4cd37..9de266f8ef 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj index bd1b3a4ad8..63456de2f7 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Displays.Ssd130x.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj index de6076c2e0..146b540624 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1039_3DCube_Sample/Ssd1039_3DCube_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj index de6076c2e0..146b540624 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1306_Sample/Ssd1306_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj index de6076c2e0..146b540624 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Game_Sample/Ssd1309_Game_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj index de6076c2e0..146b540624 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Samples/Ssd1309_Sample/Ssd1309_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj index 847ba0fd76..9322e47efc 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Displays.Ssd1327.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj index 9862eaaa14..6dd495359b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Samples/Ssd1327_Sample/Ssd1327_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj index ab767b3cb9..caf3aef140 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/Displays.St7565.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj index f64310cb2a..be8439be9d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Samples/St7565_Sample/St7565_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj index 52a64f3308..3737d90268 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Displays.TftSpi.csproj @@ -19,7 +19,7 @@ - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/Gc9a01_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/Hx8357b_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/Hx8357d_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/Ili9163_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj index 523f0ef410..09e1200534 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/Ili9341_Jpg_Sample.csproj @@ -13,7 +13,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/Ili9341_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/Ili9481_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/Ili9486_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/Ili9488_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/Rm68140_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/S6D02A1_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/ST7789_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/Ssd1331_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/Ssd1351_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/St7735_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj index 48503a4911..e9e1887334 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/St7796s_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj index 66bdc65397..6e5d48837d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Driver/Displays.Tm1637.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj index 82789bbe4a..428001c25b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Tm1637/Samples/Tm1637_Sample/Tm1637_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj index 7d589dc922..a641691013 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.WinForms/Driver/Displays.WinForms.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj index 1556a625b5..0ec966ac3b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Displays.ePaper.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0373_Sample/IL0373_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0376F_Sample/IL0376F_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL0398_Sample/IL0398_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL3897_Sample/IL3897_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874V03_Sample/IL91874V03_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/IL91874_Sample/IL91874_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1608_Sample/SSD1608_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1680_Sample/SSD1680_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/SSD1681_Sample/SSD1681_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj index c2155c249f..f605c3cd8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Samples/UC8151C_Sample/UC8151C_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj index 088ee8c830..6cf5f8cdd4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Displays.ePaperWaveShare.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj index e3ffab4558..dec8368b51 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/Epd5in65f_Sample/Epd5in65f_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj index e3ffab4558..dec8368b51 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdColor_Sample/EpdColor_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj index e3ffab4558..dec8368b51 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Samples/EpdMonochrome_Sample/EpdMonochrome_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj index ae6f47a5da..a751b4ee55 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/ICs.ADC.Ads1x15.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj index f1fa173c58..ac5847f4e9 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/Ads1015_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj index f1fa173c58..ac5847f4e9 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/Ads1115_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj index 3886fb8bb2..cfacc56ee0 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/ICs.EEPROM.At24Cxx.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj index f509d1ffef..05c6946fd7 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Samples/At24Cxx_Sample/At24Cxx_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj index 70b43660a7..3f726fd349 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/ICs.FanControllers.Emc2101.csproj @@ -16,7 +16,7 @@ Emc2101 I2C fan controller and temperature monitor - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj index 15f0d92735..ff25e07fbb 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Samples/Emc2101_Sample/Emc2101_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj index 4eb132edbd..de8eda5123 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Driver/ICs.IOExpanders.AnalogMux.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj index d45bf7555b..f93e637400 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.AnalogMux/Samples/Nxp74HC4051_Sample/Nxp74HC4051_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj index dda8424a4c..5f630ea03a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/ICs.IOExpanders.As1115.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj index f47ae6a8de..77ed15adc4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Samples/As1115_Sample/As1115_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj index 7657f96667..ea1a94a775 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj index bb09c86b89..d646735cf3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj index c8e2001837..1b2561f485 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj index 98fa1ad197..64c7e9b299 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/Ht16k33_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj index b0e4f86988..a62b6004e4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/ICs.IOExpanders.Is31fl3731.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj index f95b958a0d..667efbf6b0 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Samples/Is31fl3731_Sample/Is31fl3731_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj index 42ee840691..4e77ce41a1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/ICs.IOExpanders.Mcp23xxx.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23008_Sample/Mcp23008_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23009_Sample/Mcp23009_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23017_Sample/Mcp23017_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23018_Sample/Mcp23018_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s08_Sample/Mcp23s08_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s09_Sample/Mcp23s09_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s17_Sample/Mcp23s17_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj index a2ab40e1d0..7124be98ad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23s18_Sample/Mcp23s18_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj index 6c41472925..771d3570a2 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/Mcp23x08_Input_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj index 6c41472925..771d3570a2 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/Mcp23x17_Input_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj index b00455f5d5..2b38a713ff 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/ICs.IOExpanders.Pca9685.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj index 40e6a94252..222f95eb3a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/Pca9685_Sample.csproj @@ -10,7 +10,7 @@ ICs.IOExpanders - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj index 4e3f5589cb..48d8891285 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/ICs.IOExpanders.SerialWombat.csproj @@ -18,8 +18,8 @@ - - - + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj index 915b63566c..ecac6aa1f4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_ADC_Sample/Sw18AB_ADC_Sample.csproj @@ -17,7 +17,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj index ed7da98a43..859e298e47 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Core_Sample/Sw18AB_Core_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj index ed7da98a43..859e298e47 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_PWM_Sample/Sw18AB_PWM_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj index ed7da98a43..859e298e47 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Sample/Sw18AB_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj index 915b63566c..ecac6aa1f4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Samples/Sw18AB_Ultrasonic_Sample/Sw18AB_Ultrasonic_Sample.csproj @@ -17,7 +17,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj index 6b7b424a49..b4e0ed65f8 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/ICs.IOExpanders.Tca9548a.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj index 544a40a07f..2bd2057f64 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Samples/Tca9548a_Sample/Tca9548a_Sample.csproj @@ -11,7 +11,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj index d5bae06a84..84ccaa18b7 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj index 6c6988c7c7..7853e8be9c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Samples/x74595_Sample/x74595_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj index 2db2652af1..ef20ea02d0 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Leds.Apa102.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj index 711507f815..f0ec3ac486 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/Apa102_Display_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj index c1ec7ea573..93a26db4d2 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/Apa102_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj index e2b70e8581..f4d6acce70 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Leds.Pca9633.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj index a709d767fc..8ff278dd6e 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Samples/Pca9633_Sample/Pca9633_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj index 846b30dbf2..a2b24edada 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Driver/Motors.ElectronicSpeedController.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj index 94450ae30e..a2b1a31d42 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.ElectronicSpeedController/Samples/ElectronicSpeedController_Sample/ElectronicSpeedController_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj index 5d021738c9..3129cb4391 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Driver/Motors.Stepper.A4988.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj index e465643087..af1a3ec6b0 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.A4988/Samples/A4988_Sample/A4988_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj index ed89d08425..91edeacd57 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Driver/Motors.Stepper.Uln2003.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj index 103d18896b..9642084eb8 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Stepper.Uln2003/Samples/Uln2003_Sample/Uln2003_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj index 03fbcdec08..ea7a9c28d0 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj index 3cbd61dc1c..8f2dd29c8d 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Encoder_Sample/Tb67h420ftg_Encoder_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj index de3746657b..2fe4806d8c 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Samples/Tb67h420ftg_Sample/Tb67h420ftg_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj index 42947d433e..50b9c86ed3 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/RTCs.Ds1307.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj index 60d7492d84..80dc4abef1 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Samples/Ds1307_Sample/Ds1307_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj index 5bd57930d0..42ebda30c8 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/RTCs.Ds323x.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj index 21cde7cfae..e551c88435 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Samples/Ds323x_Sample/Ds323x_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj index 57e451e87c..9e932b1491 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/Sensors.Atmospheric.AdafruitMPRLS.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj index 46752a6b39..c97e7de334 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Samples/AdafruitMPRLS_Sample/AdafruitMPRLS_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj index ce7f600d98..d62e2c62de 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Sensors.Atmospheric.Bh1900Nux.csproj @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj index 2eea9cb741..fb31b7cdd8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/Bh1900Nux_Sample.csproj @@ -12,7 +12,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj index b046cdc658..3b63737624 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Sensors.Atmospheric.Bme280.csproj @@ -26,6 +26,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj index 84fc1b96db..410dc88451 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/Bme280_Sample.csproj @@ -12,7 +12,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj index e6c1297e25..8df91d23c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Sensors.Atmospheric.Bme68x.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj index 83f1e815c1..fa9f774f7d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/Bme680_Sample.csproj @@ -13,7 +13,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj index 83f1e815c1..fa9f774f7d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/Bme688_Sample.csproj @@ -13,7 +13,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj index fbd33386c7..b2dd441771 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj index 97286583d6..c0fa8e1c7f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Samples/Bmp085_Sample/Bmp085_Sample.csproj @@ -16,7 +16,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj index 0dcc7dc105..537f9e191d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Sensors.Atmospheric.Bmp180.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj index ea5e26fc25..6b63eb8208 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Samples/Bmp180_Sample/Bmp180_Sample.csproj @@ -15,7 +15,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj index 6fecfbc9bd..39588b0cc3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj index c97ba8a43c..dd489af886 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/Ccs811_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj index 069e5093c9..3d2c5706c7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Sensors.Atmospheric.Dhtxx.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj index 817e4fd8ce..a6ac2afe10 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht10_Sample/Dht10_Sample.csproj @@ -13,7 +13,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj index 817e4fd8ce..a6ac2afe10 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Samples/Dht12_Sample/Dht12_Sample.csproj @@ -13,7 +13,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj index 96166010f9..fd1e126a99 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Sensors.Atmospheric.Hih6130.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj index 7bc56e1bd4..44c5f7a8a5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Samples/Hih6130_Sample/Hih6130_Sample.csproj @@ -16,7 +16,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj index 133d810927..ec728f1170 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj index 1aea63c6d8..d85e67fc66 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj @@ -13,7 +13,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj index 1aea63c6d8..d85e67fc66 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj @@ -13,7 +13,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj index 53aed54aa5..175b7eb156 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Sensors.Atmospheric.Mpl3115a2.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj index 96dea2fbfd..d6ca5cf127 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Samples/Mpl3115a2_Sample/Mpl3115a2_Sample.csproj @@ -16,7 +16,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj index 458403c40f..6042b50e48 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Sensors.Atmospheric.Ms5611.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj index dc31d63b0c..3bf81b3e91 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Samples/Ms5611_Sample/Ms5611_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj index 713dc1301f..22f7dd3466 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sensors.Atmospheric.Sgp40.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj index a5f3503b2f..2b30bdac49 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Samples/Sgp40_Sample/Sgp40_Sample.csproj @@ -16,7 +16,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj index c74c923e1b..7a5fea5a38 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sensors.Atmospheric.Sht31d.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj index 3071051cb0..ef2dfaeaae 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31d/Samples/Sht31d_Sample/Sht31d_Sample.csproj @@ -15,7 +15,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj index 6a3dea1f4c..c1fc3bf958 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sensors.Atmospheric.Sht4x.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj index 6c79440e11..e7c9fd8b45 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Samples/Sht4x_Sample/Sht4x_Sample.csproj @@ -12,7 +12,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj index cb277ca00b..5fc42134c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Sensors.Atmospheric.Si70xx.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj index 40a7e040f3..7dfadf704a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Samples/Si70xx_Sample/Si70xx_Sample.csproj @@ -16,7 +16,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj index da6600897e..2ca53c1ae0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Sensors.Atmospheric.Th02.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj index df7937ed1c..c4398f5377 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Samples/Th02_Sample/Th02_Sample.csproj @@ -15,7 +15,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj index 1852bc1f84..04cb4004b2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Sensors.Camera.Mlx90640.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj index 902cd346e8..9fe420dbde 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Samples/Mlx90640_Sample/Mlx90640_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj index 11c0c96579..05c688529a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Driver/Sensors.Camera.Vc0706.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj index 9fba944813..76f5a7cfb2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Vc0706/Samples/Vc0706_Sample/Vc0706_Sample.csproj @@ -16,7 +16,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj index 01afc7693d..0072bb0676 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Driver/Sensors.Distance.Hcsr04.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj index 8acdbb04e8..7d32d67f2f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Hcsr04/Samples/Hcsr04_Sample/Hcsr04_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj index 6f9cbeaa26..233efc917e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/Sensors.Distance.MaxBotix.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj index f45e574b78..442e13c818 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Samples/MaxBotix_Sample/MaxBotix_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj index 72fa456699..683357de86 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Sensors.Distance.Vl53l0x.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj index 25a856b8d8..85df091c69 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/Vl53l0x_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj index 3fa445deee..6521e34226 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Sensors.Environmental.Ags01Db.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj index 24305de7ec..23b61a416e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Samples/Ags01Db_Sample/Ags01Db_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj index 492a80dc04..be41a70ceb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Sensors.Environmental.Ens160.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj index a0633d896f..8c07ca3633 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/Ens160_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj index f9ce7628f3..0d940068b8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Sensors.Environmental.Scd4x.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj index 19f4ff98c4..9e1e521dba 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd40_Sample/Scd40_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj index 19f4ff98c4..9e1e521dba 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Samples/Scd41_Sample/Scd41_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj index 7d05d9d64a..e9cd7c0efe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Sensors.Environmental.Y4000.csproj @@ -17,7 +17,7 @@ - - + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj index d593369f05..e2b6c815c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Samples/Y4000_Sample/Y4000_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj index 97358fcb5c..1d4ce0cf3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj @@ -23,7 +23,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj index b9d40e4f9a..fd8ede7b83 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Samples/Mt3339_Sample/Mt3339_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj index eb535f6559..50cbfe7e1a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/Sensors.Gnss.NeoM8.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj index 7c21e5118d..e2881bb3ec 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Samples/NeoM8_Sample/NeoM8_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj index 99bad67c10..1399c27934 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/Sensors.Hid.As5013.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj index b5056d2ae1..7435f00b05 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Samples/As5013_Sample/As5013_Sample.csproj @@ -7,7 +7,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj index ffb135d4d8..f8c4af596e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/Sensors.Hid.Bbq10Keyboard.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj index 2ec7fa5c03..2373c5a1e8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Samples/Bbq10Keyboard_Sample/Bbq10Keyboard_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj index 91a789a95e..feda6693c1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Keyboard/Driver/Sensors.Hid.Keyboard.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj index 0086502009..d483b94a5a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Sensors.Hid.Mpr121.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj index 414fe67e97..b1acabddd1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Samples/Mpr121_Sample/Mpr121_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj index d1e054065c..87e2465458 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Sensors.Hid.Tsc2004.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj index 452d91a5d5..60c6a684d5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Samples/Tsc2004_Sample/Tsc2004_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj index f497a4971d..fc5e6d7ebd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Sensors.Hid.WiiExtensionControllers.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj index efc7f9f6cf..cbea010873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/NesClassicController_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj index efc7f9f6cf..cbea010873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/SnesClassicController_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj index efc7f9f6cf..cbea010873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/WiiClassicControllerPro_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj index efc7f9f6cf..cbea010873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/WiiClassicController_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj index efc7f9f6cf..cbea010873 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/WiiNunchuck_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj index 388d18ee63..3ade17edd0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Driver/Sensors.Light.Alspt19315C.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj index a517a04a0c..d162dbda33 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Alspt19315C/Samples/Alspt19315C_Sample/Alspt19315C_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj index ec8c453c20..6eaea9900d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Driver/Sensors.Light.AnalogSolarIntensityGauge.csproj @@ -22,6 +22,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj index 35befbcb29..b613283f31 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.AnalogSolarIntensityGauge/Samples/AnalogSolarIntensityGauge_Sample/AnalogSolarIntensityGauge_Sample.csproj @@ -6,7 +6,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj index 6c362b60f5..8c1b9c21e0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Sensors.Light.Bh1745.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj index 0071a85cc1..42892b5830 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Samples/Bh1745_Sample/Bh1745_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj index f73b1c5a83..f72e3c4d76 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj @@ -19,6 +19,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj index e4dfd96e39..7a7b6b7a4a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Samples/Bh1750_Sample/Bh1750_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj index 9d5fbc6fd7..73d727c4db 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj index 79fe294729..e23cf0ef63 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Samples/Max44009_Sample/Max44009_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj index d86ef87ab4..9e4bd488fe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Sensors.Light.Si1145.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj index 133342a340..3062050e54 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Samples/Si1145_Sample/Si1145_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj index 990b556f93..3044a6f20f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Driver/Sensors.Light.Temt6000.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj index 54f0dcbdbc..6bb3f30dc0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Temt6000/Samples/Temt6000_Sample/Temt6000_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj index daa0ca04f5..59d9e39b0b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Sensors.Light.Tsl2591.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj index 2dd4e68675..44b469e7a5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Samples/Tsl2591_Sample/Tsl2591_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj index 2f9808394d..0cf2ded146 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Sensors.Light.Veml7700.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj index 56262f8ec4..ba4822da3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Samples/Veml7700_Sample/Veml7700_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj index cbdbe73fc4..b4211af8fc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj index 18ed96a0ca..477a7d951c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Samples/Hx711_Sample/Hx711_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj index a173858ad5..964e5b4dd4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj index 6ab679f263..4d9e4fd123 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Samples/Nau7802_Sample/Nau7802_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj index 78cc9fd0b6..0d5ce90ab2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj index bdbf243f0b..42e00caf72 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Samples/Capacitive_Sample/Capacitive_Sample.csproj @@ -12,7 +12,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj index 8d8ecb3e12..98c68f38ad 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj index 8111a75075..1cf9bc5372 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Samples/Fc28_Sample/Fc28_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj index ef4c5e6231..94b2a4605a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj index 13370ea35b..85eef182de 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl335_Sample/Adxl335_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj index 13370ea35b..85eef182de 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl337_Sample/Adxl337_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj index 60c1a77ce7..6959941263 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl345_Sample/Adxl345_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj index 60c1a77ce7..6959941263 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl362_Sample/Adxl362_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj index 13370ea35b..85eef182de 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Samples/Adxl377_Sample/Adxl377_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj index 66013fd7c5..7c413c972f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj index 3b004462fb..98eb4777c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Samples/Apds9960_Sample/Apds9960_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj index 11ee9c7dac..8455ab7d79 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Sensors.Motion.Bmi270.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj index 5ca84cf1a5..eac0b078c1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/Bmi270_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj index a84b7c0795..c87e32a6be 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Sensors.Motion.Bno055.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj index 9fa1e3e1a8..118ffe67c3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Samples/Bno055_Sample/Bno055_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj index 1d6d481672..da0a72f3e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj index e450603049..5dd325d050 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Samples/Hcsens0040_Sample/Hcsens0040_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj index d3434de0e9..d6495bb2f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Sensors.Motion.Hmc5883.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj index 9ab89f1ada..79bcba9366 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Hmc5883_Sample/Hmc5883_Sample.csproj @@ -12,7 +12,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj index 9ab89f1ada..79bcba9366 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Samples/Qmc5883_Sample/Qmc5883_Sample.csproj @@ -12,7 +12,7 @@ 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj index b102549fa1..8f528ab68f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj index a19373ce38..62d5cb5495 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Samples/Mag3110_Sample/Mag3110_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj index 73d40ae092..0200ea0ebd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj index f9044f50c6..96adca0177 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Samples/Mma7660fc_Sample/Mma7660fc_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj index 6de72f5c57..bed6545694 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Sensors.Motion.Mmc5603.csproj @@ -18,6 +18,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj index 27c5716ec9..6fbd15eff7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Samples/Mmc5603_Sample/Mmc5603_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj index e9e0c5d39c..46217a5c45 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Sensors.Motion.Mpu6050.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj index 14435938aa..77f82e46b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Samples/Mpu6050_Sample/Mpu6050_Sample.csproj @@ -12,7 +12,7 @@ 8.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj index 444ee43356..e0e2531c73 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj index b33234c529..4b3211b99a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Samples/ParallaxPir_Sample/ParallaxPir_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj index 7f5aa69197..cbbcdef956 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj @@ -23,6 +23,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj index 498e9b6ae9..3933dab743 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Samples/Ina260_Sample/Ina260_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj index 5db0b5833c..ede99df4da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj index 88fcc8848f..f01b1f3414 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Samples/IDxxLA_Sample/IDxxLA_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj index ae14bdc85e..01d475fc6b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj index 76be9d4090..5281294c2d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Samples/Ky038_Sample/Ky038_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj index 8d592f5407..a674695205 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj index 2a06b215b4..5a9abc816a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Samples/Lm75_Sample/Lm75_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj index aef79ce92b..2e09e8c875 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Sensors.Temperature.Mcp9808.csproj @@ -24,6 +24,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj index eadf3f382e..19bcd5127b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Samples/Mcp9808_Sample/Mcp9808_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj index 99d889d591..be1c3c3c23 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj index 37b63cf91b..01f779defc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Samples/Thermistor_Sample/Thermistor_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj index deebe7d429..1f0fdb840d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj @@ -25,6 +25,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj index f9016499d5..009bf3e218 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Samples/Tmp102_Sample/Tmp102_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj index e04b882c26..ac62a89d80 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj index f5223cd8d0..7b2ada9419 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Samples/SwitchingAnemometer_Sample/SwitchingAnemometer_Sample.csproj @@ -11,7 +11,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj index 84dc305a36..33db39c2fe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj index 869c2e8bda..5cc4dff47a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Samples/SwitchingRainGauge_Sample/SwitchingRainGauge_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj index ff67d45818..b2238f81da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj @@ -17,6 +17,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj index 3e2b53ebd5..c83295c445 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Samples/WindVane_Sample/WindVane_Sample.csproj @@ -9,7 +9,7 @@ App - + diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj index 94ef80a171..3b9e186bce 100644 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj +++ b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj @@ -21,6 +21,6 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj index 2de53d3c43..eb96644510 100644 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Samples/ServoCore_Sample/ServoCore_Sample.csproj @@ -9,7 +9,7 @@ App - + From c4b370b2c7d3f27e3e3cccc235c438f93711f1a7 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:21:50 -0700 Subject: [PATCH 003/141] 7 segment metadata cleanup --- .../Driver/Displays.Led.SevenSegment.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj index 0a71883f23..f0ecda2e5c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SevenSegment/Driver/Displays.Led.SevenSegment.csproj @@ -10,10 +10,10 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Displays.Led.SevenSegment https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, SevenSegment, Display + Meadow.Foundation,SevenSegment,Seven,7,Segment,Display,LED 0.9.52 true - Ditigal Seven segment displays + Digital Seven (7) segment display From dce8eb097903e40a58bfefe12422788573dc6234 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:23:15 -0700 Subject: [PATCH 004/141] Add 14-segment display driver --- .../Displays.Led.FourteenSegment.csproj | 22 +++ .../Driver/FourteenSegment.Ascii.cs | 104 +++++++++++ .../Driver/FourteenSegment.Enums.cs | 72 ++++++++ .../Driver/FourteenSegment.cs | 169 ++++++++++++++++++ .../FourteenSegment_Sample.csproj | 20 +++ .../FourteenSegment_Sample/MeadowApp.cs | 50 ++++++ .../FourteenSegment_Sample/meadow.config.yaml | 2 + 7 files changed, 439 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Ascii.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj new file mode 100644 index 0000000000..d2d8f36533 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/Displays.Led.FourteenSegment.csproj @@ -0,0 +1,22 @@ + + + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + FourteenSegment + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Displays.Led.FourteenSegment + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation,FourteenSegment,Fourteen,14,Segment,Display,LED + 0.1.0 + true + Digital Fourteen (14) segment display + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Ascii.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Ascii.cs new file mode 100644 index 0000000000..b03711bcd4 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Ascii.cs @@ -0,0 +1,104 @@ +namespace Meadow.Foundation.Displays.Led +{ + public partial class FourteenSegment + { + static ushort[] fourteenSegmentASCII = { + 0b000000000000000, /* (space) */ + 0b100000000000110, /* ! */ + 0b000001000000010, /* " */ + 0b001001011001110, /* # */ + 0b001001011101101, /* $ */ + 0b011111111100100, /* % */ + 0b010001101011001, /* & */ + 0b000001000000000, /* ' */ + 0b010010000000000, /* ( */ + 0b000100100000000, /* ) */ + 0b011111111000000, /* * */ + 0b001001011000000, /* + */ + 0b000100000000000, /* , */ + 0b000000011000000, /* - */ + 0b100000000000000, /* . */ + 0b000110000000000, /* / */ + 0b000110000111111, /* 0 */ + 0b000010000000110, /* 1 */ + 0b000000011011011, /* 2 */ + 0b000000010001111, /* 3 */ + 0b000000011100110, /* 4 */ + 0b010000001101001, /* 5 */ + 0b000000011111101, /* 6 */ + 0b000000000000111, /* 7 */ + 0b000000011111111, /* 8 */ + 0b000000011101111, /* 9 */ + 0b001001000000000, /* : */ + 0b000101000000000, /* ; */ + 0b010010001000000, /* < */ + 0b000000011001000, /* = */ + 0b000100110000000, /* > */ + 0b101000010000011, /* ? */ + 0b000001010111011, /* @ */ + 0b000000011110111, /* A */ + 0b001001010001111, /* B */ + 0b000000000111001, /* C */ + 0b001001000001111, /* D */ + 0b000000001111001, /* E */ + 0b000000001110001, /* F */ + 0b000000010111101, /* G */ + 0b000000011110110, /* H */ + 0b001001000001001, /* I */ + 0b000000000011110, /* J */ + 0b010010001110000, /* K */ + 0b000000000111000, /* L */ + 0b000010100110110, /* M */ + 0b010000100110110, /* N */ + 0b000000000111111, /* O */ + 0b000000011110011, /* P */ + 0b010000000111111, /* Q */ + 0b010000011110011, /* R */ + 0b000000011101101, /* S */ + 0b001001000000001, /* T */ + 0b000000000111110, /* U */ + 0b000110000110000, /* V */ + 0b010100000110110, /* W */ + 0b010110100000000, /* X */ + 0b000000011101110, /* Y */ + 0b000110000001001, /* Z */ + 0b000000000111001, /* [ */ + 0b010000100000000, /* \ */ + 0b000000000001111, /* ] */ + 0b010100000000000, /* ^ */ + 0b000000000001000, /* _ */ + 0b000000100000000, /* ` */ + 0b001000001011000, /* a */ + 0b010000001111000, /* b */ + 0b000000011011000, /* c */ + 0b000100010001110, /* d */ + 0b000100001011000, /* e */ + 0b001010011000000, /* f */ + 0b000010010001110, /* g */ + 0b001000001110000, /* h */ + 0b001000000000000, /* i */ + 0b000101000010000, /* j */ + 0b011011000000000, /* k */ + 0b000000000110000, /* l */ + 0b001000011010100, /* m */ + 0b001000001010000, /* n */ + 0b000000011011100, /* o */ + 0b000000101110000, /* p */ + 0b000010010000110, /* q */ + 0b000000001010000, /* r */ + 0b010000010001000, /* s */ + 0b000000001111000, /* t */ + 0b000000000011100, /* u */ + 0b000100000010000, /* v */ + 0b010100000010100, /* w */ + 0b010110100000000, /* x */ + 0b000001010001110, /* y */ + 0b000100001001000, /* z */ + 0b000100101001001, /* { */ + 0b001001000000000, /* | */ + 0b010010010001001, /* } */ + 0b000110011000000, /* ~ */ + 0b000000000000000, /* (del) */ + }; + } +} diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Enums.cs new file mode 100644 index 0000000000..b592aeb17e --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.Enums.cs @@ -0,0 +1,72 @@ +namespace Meadow.Foundation.Displays.Led +{ + public partial class FourteenSegment + { + /// + /// The led segments + /// + public enum Segment : byte + { + /// + /// Segment A + /// + A, + /// + /// Segment B + /// + B, + /// + /// Segment C + /// + C, + /// + /// Segment D + /// + D, + /// + /// Segment E + /// + E, + /// + /// Segment F + /// + F, + /// + /// Segment G + /// + G, + /// + /// Segment G2 + /// + G2, + /// + /// Segment H + /// + H, + /// + /// Segment J + /// + J, + /// + /// Segment K + /// + K, + /// + /// Segment L + /// + L, + /// + /// Segment M + /// + M, + /// + /// Segment N + /// + N, + /// + /// Segment decimal + /// + Decimal, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.cs new file mode 100644 index 0000000000..79ba8c1a7f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Driver/FourteenSegment.cs @@ -0,0 +1,169 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.Displays.Led +{ + /// + /// Fourteen Segment Display + /// + public partial class FourteenSegment + { + private readonly IDigitalOutputPort portA; + private readonly IDigitalOutputPort portB; + private readonly IDigitalOutputPort portC; + private readonly IDigitalOutputPort portD; + private readonly IDigitalOutputPort portE; + private readonly IDigitalOutputPort portF; + private readonly IDigitalOutputPort portG; + private readonly IDigitalOutputPort portG2; + private readonly IDigitalOutputPort portH; + private readonly IDigitalOutputPort portJ; + private readonly IDigitalOutputPort portK; + private readonly IDigitalOutputPort portL; + private readonly IDigitalOutputPort portM; + private readonly IDigitalOutputPort portN; + private readonly IDigitalOutputPort portDecimal; + + private readonly bool isCommonCathode; + + /// + /// Creates a FourteenSegment connected to the especified IPins to a IODevice + /// + /// Pin A + /// Pin B + /// Pin C + /// Pin D + /// Pin E + /// Pin F + /// Pin G + /// Pin G2 + /// Pin H + /// Pin J + /// Pin K + /// Pin L + /// Pin M + /// Pin N + /// Pin decimal + /// Is the display using common cathod (true) or common annode (false) + public FourteenSegment( + IPin pinA, IPin pinB, IPin pinC, IPin pinD, IPin pinE, IPin pinF, IPin pinG, + IPin pinG2, IPin pinH, IPin pinJ, IPin pinK, IPin pinL, IPin pinM, IPin pinN, + IPin pinDecimal, + bool isCommonCathode) : + this(pinA.CreateDigitalOutputPort(), + pinB.CreateDigitalOutputPort(), + pinC.CreateDigitalOutputPort(), + pinD.CreateDigitalOutputPort(), + pinE.CreateDigitalOutputPort(), + pinF.CreateDigitalOutputPort(), + pinG.CreateDigitalOutputPort(), + pinG2.CreateDigitalOutputPort(), + pinH.CreateDigitalOutputPort(), + pinJ.CreateDigitalOutputPort(), + pinK.CreateDigitalOutputPort(), + pinL.CreateDigitalOutputPort(), + pinM.CreateDigitalOutputPort(), + pinN.CreateDigitalOutputPort(), + pinDecimal.CreateDigitalOutputPort(), + isCommonCathode) + { } + + /// + /// Creates a FourteenSegment connected to the especified IDigitalOutputPorts + /// + /// Digital input port for pin A + /// Digital input port for pin B + /// Digital input port for pin C + /// Digital input port for pin D + /// Digital input port for pin E + /// Digital input port for pin F + /// Digital input port for pin G + /// Digital input port for pin G2 + /// Digital input port for pin H + /// Digital input port for pin J + /// Digital input port for pin K + /// Digital input port for pin L + /// Digital input port for pin M + /// Digital input port for pin N + /// Digital input port for decimal pin + /// Is the display using common cathod (true) or common annode (false) + public FourteenSegment( + IDigitalOutputPort portA, IDigitalOutputPort portB, IDigitalOutputPort portC, IDigitalOutputPort portD, + IDigitalOutputPort portE, IDigitalOutputPort portF, IDigitalOutputPort portG, IDigitalOutputPort portG2, + IDigitalOutputPort portH, IDigitalOutputPort portJ, IDigitalOutputPort portK, IDigitalOutputPort portL, + IDigitalOutputPort portM, IDigitalOutputPort portN, + IDigitalOutputPort portDecimal, + bool isCommonCathode) + { + this.portA = portA; + this.portB = portB; + this.portC = portC; + this.portD = portD; + this.portE = portE; + this.portF = portF; + this.portG = portG; + this.portG2 = portG2; + this.portH = portH; + this.portJ = portJ; + this.portK = portK; + this.portL = portL; + this.portM = portM; + this.portN = portN; + this.portDecimal = portDecimal; + + this.isCommonCathode = isCommonCathode; + } + + /// + /// Displays the specified ascii character (from 32 to 126) + /// Unsupported ascii values will be blank + /// + public void SetDisplay(char asciiCharacter, bool? showDecimal = null) + { + if (asciiCharacter < 32 || asciiCharacter > 126) + { + asciiCharacter = ' '; + } + + var data = fourteenSegmentASCII[asciiCharacter - 32]; + + portA.State = (data & 1 << 0) != 0; + portB.State = (data & 1 << 1) != 0; + portC.State = (data & 1 << 2) != 0; + portD.State = (data & 1 << 3) != 0; + portE.State = (data & 1 << 4) != 0; + portF.State = (data & 1 << 5) != 0; + portG.State = (data & 1 << 6) != 0; + portG2.State = (data & 1 << 7) != 0; + portH.State = (data & 1 << 8) != 0; + portJ.State = (data & 1 << 9) != 0; + portK.State = (data & 1 << 10) != 0; + portL.State = (data & 1 << 11) != 0; + portM.State = (data & 1 << 12) != 0; + portN.State = (data & 1 << 13) != 0; + portDecimal.State = (data & 1 << 14) != 0; + + if (showDecimal != null) + { + portDecimal.State = isCommonCathode ? showDecimal.Value : !showDecimal.Value; + } + } + + /// + /// Is a specific led segment enabled for an ascii character + /// + /// The led segment + /// The ascii character + /// + public static bool IsEnabled(Segment segment, char asciiCharacter) + { + if (asciiCharacter < 32 || asciiCharacter > 126) + { + return false; + } + + var data = fourteenSegmentASCII[asciiCharacter - 32]; + + return (data & 1 << (int)segment) != 0; + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj new file mode 100644 index 0000000000..587271b4e7 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/FourteenSegment_Sample.csproj @@ -0,0 +1,20 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/MeadowApp.cs new file mode 100644 index 0000000000..0cc3a93fee --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/MeadowApp.cs @@ -0,0 +1,50 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Displays.Led; +using System.Threading.Tasks; + +namespace Displays.Led.FourteenSegment_Sample +{ + public class MeadowApp : App + { + // + + FourteenSegment fourteenSegment; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + fourteenSegment = new FourteenSegment + ( + portA: Device.CreateDigitalOutputPort(Device.Pins.D00), + portB: Device.CreateDigitalOutputPort(Device.Pins.D01), + portC: Device.CreateDigitalOutputPort(Device.Pins.D02), + portD: Device.CreateDigitalOutputPort(Device.Pins.D03), + portE: Device.CreateDigitalOutputPort(Device.Pins.D04), + portF: Device.CreateDigitalOutputPort(Device.Pins.D05), + portG: Device.CreateDigitalOutputPort(Device.Pins.D06), + portG2: Device.CreateDigitalOutputPort(Device.Pins.D07), + portH: Device.CreateDigitalOutputPort(Device.Pins.D08), + portJ: Device.CreateDigitalOutputPort(Device.Pins.D09), + portK: Device.CreateDigitalOutputPort(Device.Pins.D10), + portL: Device.CreateDigitalOutputPort(Device.Pins.D11), + portM: Device.CreateDigitalOutputPort(Device.Pins.D12), + portN: Device.CreateDigitalOutputPort(Device.Pins.D13), + portDecimal: Device.CreateDigitalOutputPort(Device.Pins.D14), + isCommonCathode: false + ); + + return base.Initialize(); + } + + public override Task Run() + { + fourteenSegment.SetDisplay(asciiCharacter: 'A', showDecimal: true); + + return base.Run(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourteenSegment/Samples/FourteenSegment_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file From c03b566fd296e6b0bb11f7bf8a4bb509df6d440e Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:25:28 -0700 Subject: [PATCH 005/141] Add 16-segment display driver --- .../Driver/Displays.Led.SixteenSegment.csproj | 22 +++ .../Driver/SixteenSegment.Ascii.cs | 104 ++++++++++ .../Driver/SixteenSegment.Enums.cs | 84 ++++++++ .../Driver/SixteenSegment.cs | 183 ++++++++++++++++++ .../SixteenSegment_Sample/MeadowApp.cs | 52 +++++ .../SixteenSegment_Sample.csproj | 20 ++ .../SixteenSegment_Sample/meadow.config.yaml | 2 + 7 files changed, 467 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Ascii.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj new file mode 100644 index 0000000000..c28d4525d0 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/Displays.Led.SixteenSegment.csproj @@ -0,0 +1,22 @@ + + + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + SixteenSegment + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Displays.Led.SixteenSegment + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation,SixteenSegment,Sixteen,14,Segment,Display,LED + 0.1.0 + true + Digital Sixteen (16) segment display + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Ascii.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Ascii.cs new file mode 100644 index 0000000000..eaa611fc04 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Ascii.cs @@ -0,0 +1,104 @@ +namespace Meadow.Foundation.Displays.Led +{ + public partial class SixteenSegment + { + static uint[] sixteenSegmentASCII = { + 0b00000000000000000, /* (space) */ + 0b10000000000001100, /* ! */ + 0b00000001000000100, /* " */ + 0b01010101000111100, /* # */ + 0b01010101010111011, /* $ */ + 0b01110111010011001, /* % */ + 0b01001001101110001, /* & */ + 0b00000001000000000, /* ' */ + 0b00001010000000000, /* ( */ + 0b00100000100000000, /* ) */ + 0b01111111100000000, /* * */ + 0b01010101000000000, /* + */ + 0b00100000000000000, /* , */ + 0b01000100000000000, /* - */ + 0b10000000000000000, /* . */ + 0b00100010000000000, /* / */ + 0b00100010011111111, /* 0 */ + 0b00000010000001100, /* 1 */ + 0b01000100001110111, /* 2 */ + 0b00000100000111111, /* 3 */ + 0b01000100010001100, /* 4 */ + 0b01001000010110011, /* 5 */ + 0b01000100011111011, /* 6 */ + 0b00000000000001111, /* 7 */ + 0b01000100011111111, /* 8 */ + 0b01000100010111111, /* 9 */ + 0b00010001000000000, /* : */ + 0b00100001000000000, /* ; */ + 0b01001010000000000, /* < */ + 0b01000100000110000, /* = */ + 0b00100100100000000, /* > */ + 0b10010100000000111, /* ? */ + 0b00000101011110111, /* @ */ + 0b01000100011001111, /* A */ + 0b00010101000111111, /* B */ + 0b00000000011110011, /* C */ + 0b00010001000111111, /* D */ + 0b01000000011110011, /* E */ + 0b01000000011000011, /* F */ + 0b00000100011111011, /* G */ + 0b01000100011001100, /* H */ + 0b00010001000110011, /* I */ + 0b00000000001111100, /* J */ + 0b01001010011000000, /* K */ + 0b00000000011110000, /* L */ + 0b00000010111001100, /* M */ + 0b00001000111001100, /* N */ + 0b00000000011111111, /* O */ + 0b01000100011000111, /* P */ + 0b00001000011111111, /* Q */ + 0b01001100011000111, /* R */ + 0b01000100010111011, /* S */ + 0b00010001000000011, /* T */ + 0b00000000011111100, /* U */ + 0b00100010011000000, /* V */ + 0b00101000011001100, /* W */ + 0b00101010100000000, /* X */ + 0b01000100010111100, /* Y */ + 0b00100010000110011, /* Z */ + 0b00010001000010010, /* [ */ + 0b00001000100000000, /* \ */ + 0b00010001000100001, /* ] */ + 0b00101000000000000, /* ^ */ + 0b00000000000110000, /* _ */ + 0b00000000100000000, /* ` */ + 0b01010000001110000, /* a */ + 0b01010000011100000, /* b */ + 0b01000000001100000, /* c */ + 0b00010100000011100, /* d */ + 0b01100000001100000, /* e */ + 0b01010101000000010, /* f */ + 0b01010001010100001, /* g */ + 0b01010000011000000, /* h */ + 0b00010000000000000, /* i */ + 0b00010001001100000, /* j */ + 0b00011011000000000, /* k */ + 0b00000000011000000, /* l */ + 0b01010100001001000, /* m */ + 0b01010000001000000, /* n */ + 0b01010000001100000, /* o */ + 0b01000001011000001, /* p */ + 0b01010001010000001, /* q */ + 0b01000000001000000, /* r */ + 0b01010000010100001, /* s */ + 0b01000000011100000, /* t */ + 0b00010000001100000, /* u */ + 0b00100000001000000, /* v */ + 0b00101000001001000, /* w */ + 0b00101010100000000, /* x */ + 0b00000101000011100, /* y */ + 0b01100000000100000, /* z */ + 0b01010001000010010, /* { */ + 0b00010001000000000, /* | */ + 0b00010101000100001, /* } */ + 0b01100110000000000, /* ~ */ + 0b00000000000000000, /* (del) */ + }; + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Enums.cs new file mode 100644 index 0000000000..7a5e11a350 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.Enums.cs @@ -0,0 +1,84 @@ +namespace Meadow.Foundation.Displays.Led +{ + public partial class SixteenSegment + { + /// + /// The led segments + /// + public enum Segment : byte + { + /// + /// Segment A + /// + A, + /// + /// Segment B + /// + B, + /// + /// Segment C + /// + C, + /// + /// Segment D + /// + D, + /// + /// Segment E + /// + E, + /// + /// Segment F + /// + F, + /// + /// Segment G + /// + G, + /// + /// Segment H + /// + H, + /// + /// Segment K + /// + K, + /// + /// Segment L + /// + L, + /// + /// Segment M + /// + M, + /// + /// Segment N + /// + N, + /// + /// Segment P + /// + P, + /// + /// Segment R + /// + R, + /// + /// Segment S + /// + S, + /// + /// Segment T + /// + T, + /// + /// Segment U + /// + U, + /// + /// Segment decimal + /// + Decimal, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.cs new file mode 100644 index 0000000000..1e36a4cf8e --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Driver/SixteenSegment.cs @@ -0,0 +1,183 @@ +using Meadow.Hardware; + +namespace Meadow.Foundation.Displays.Led +{ + /// + /// Sixteen Segment Display + /// + public partial class SixteenSegment + { + private readonly IDigitalOutputPort portA; + private readonly IDigitalOutputPort portB; + private readonly IDigitalOutputPort portC; + private readonly IDigitalOutputPort portD; + private readonly IDigitalOutputPort portE; + private readonly IDigitalOutputPort portF; + private readonly IDigitalOutputPort portG; + private readonly IDigitalOutputPort portH; + private readonly IDigitalOutputPort portK; + private readonly IDigitalOutputPort portM; + private readonly IDigitalOutputPort portN; + private readonly IDigitalOutputPort portP; + private readonly IDigitalOutputPort portR; + private readonly IDigitalOutputPort portS; + private readonly IDigitalOutputPort portT; + private readonly IDigitalOutputPort portU; + private readonly IDigitalOutputPort portDecimal; + + private readonly bool isCommonCathode; + + /// + /// Creates a SixteenSegment connected to the especified IPins to a IODevice + /// + /// Pin A + /// Pin B + /// Pin C + /// Pin D + /// Pin E + /// Pin F + /// Pin G + /// Pin H + /// Pin K + /// Pin M + /// Pin N + /// Pin P + /// Pin R + /// Pin S + /// Pin T + /// Pin U + /// Pin decimal + /// Is the display using common cathod (true) or common annode (false) + public SixteenSegment( + IPin pinA, IPin pinB, IPin pinC, IPin pinD, + IPin pinE, IPin pinF, IPin pinG, IPin pinH, + IPin pinK, IPin pinM, IPin pinN, IPin pinP, + IPin pinR, IPin pinS, IPin pinT, IPin pinU, + IPin pinDecimal, + bool isCommonCathode) : + this(pinA.CreateDigitalOutputPort(), + pinB.CreateDigitalOutputPort(), + pinC.CreateDigitalOutputPort(), + pinD.CreateDigitalOutputPort(), + pinE.CreateDigitalOutputPort(), + pinF.CreateDigitalOutputPort(), + pinG.CreateDigitalOutputPort(), + pinH.CreateDigitalOutputPort(), + pinK.CreateDigitalOutputPort(), + pinM.CreateDigitalOutputPort(), + pinN.CreateDigitalOutputPort(), + pinP.CreateDigitalOutputPort(), + pinR.CreateDigitalOutputPort(), + pinS.CreateDigitalOutputPort(), + pinT.CreateDigitalOutputPort(), + pinU.CreateDigitalOutputPort(), + pinDecimal.CreateDigitalOutputPort(), + isCommonCathode) + { } + + /// + /// Creates a SixteenSegment connected to the especified IDigitalOutputPorts + /// + /// Digital input port for pin A + /// Digital input port for pin B + /// Digital input port for pin C + /// Digital input port for pin D + /// Digital input port for pin E + /// Digital input port for pin F + /// Digital input port for pin G + /// Digital input port for pin H + /// Digital input port for pin K + /// Digital input port for pin M + /// Digital input port for pin N + /// Digital input port for pin P + /// Digital input port for pin R + /// Digital input port for pin S + /// Digital input port for pin T + /// Digital input port for pin U + /// Digital input port for decimal pin + /// Is the display using common cathod (true) or common annode (false) + public SixteenSegment( + IDigitalOutputPort portA, IDigitalOutputPort portB, IDigitalOutputPort portC, IDigitalOutputPort portD, + IDigitalOutputPort portE, IDigitalOutputPort portF, IDigitalOutputPort portG, IDigitalOutputPort portH, + IDigitalOutputPort portK, IDigitalOutputPort portM, IDigitalOutputPort portN, IDigitalOutputPort portP, + IDigitalOutputPort portR, IDigitalOutputPort portS, IDigitalOutputPort portT, IDigitalOutputPort portU, + IDigitalOutputPort portDecimal, + bool isCommonCathode) + { + this.portA = portA; + this.portB = portB; + this.portC = portC; + this.portD = portD; + this.portE = portE; + this.portF = portF; + this.portG = portG; + this.portH = portH; + this.portK = portK; + this.portM = portM; + this.portN = portN; + this.portP = portP; + this.portR = portR; + this.portS = portS; + this.portT = portT; + this.portU = portU; + this.portDecimal = portDecimal; + + this.isCommonCathode = isCommonCathode; + } + + /// + /// Displays the specified ascii character (from 32 to 126) + /// Unsupported ascii values will be blank + /// + public void SetDisplay(char asciiCharacter, bool? showDecimal = null) + { + if (asciiCharacter < 32 || asciiCharacter > 126) + { + asciiCharacter = ' '; + } + + var data = sixteenSegmentASCII[asciiCharacter - 32]; + + portA.State = (data & 1 << 0) != 0; + portB.State = (data & 1 << 1) != 0; + portC.State = (data & 1 << 2) != 0; + portD.State = (data & 1 << 3) != 0; + portE.State = (data & 1 << 4) != 0; + portF.State = (data & 1 << 5) != 0; + portG.State = (data & 1 << 6) != 0; + portH.State = (data & 1 << 7) != 0; + portK.State = (data & 1 << 8) != 0; + portM.State = (data & 1 << 9) != 0; + portN.State = (data & 1 << 10) != 0; + portP.State = (data & 1 << 11) != 0; + portR.State = (data & 1 << 12) != 0; + portS.State = (data & 1 << 13) != 0; + portT.State = (data & 1 << 14) != 0; + portU.State = (data & 1 << 15) != 0; + portDecimal.State = (data & 1 << 16) != 0; + + if (showDecimal != null) + { + portDecimal.State = isCommonCathode ? showDecimal.Value : !showDecimal.Value; + } + } + + /// + /// Is a specific led segment enabled for an ascii character + /// + /// The led segment + /// The ascii character + /// + public static bool IsEnabled(Segment segment, char asciiCharacter) + { + if (asciiCharacter < 32 || asciiCharacter > 126) + { + return false; + } + + var data = sixteenSegmentASCII[asciiCharacter - 32]; + + return (data & 1 << (int)segment) != 0; + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/MeadowApp.cs new file mode 100644 index 0000000000..e921f28c6c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/MeadowApp.cs @@ -0,0 +1,52 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Displays.Led; +using System.Threading.Tasks; + +namespace Displays.Led.SixteenSegment_Sample +{ + public class MeadowApp : App + { + // + + SixteenSegment sixteenSegment; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + sixteenSegment = new SixteenSegment + ( + portA: Device.CreateDigitalOutputPort(Device.Pins.D00), + portB: Device.CreateDigitalOutputPort(Device.Pins.D01), + portC: Device.CreateDigitalOutputPort(Device.Pins.D02), + portD: Device.CreateDigitalOutputPort(Device.Pins.D03), + portE: Device.CreateDigitalOutputPort(Device.Pins.D04), + portF: Device.CreateDigitalOutputPort(Device.Pins.D05), + portG: Device.CreateDigitalOutputPort(Device.Pins.D06), + portH: Device.CreateDigitalOutputPort(Device.Pins.D07), + portK: Device.CreateDigitalOutputPort(Device.Pins.D08), + portM: Device.CreateDigitalOutputPort(Device.Pins.D09), + portN: Device.CreateDigitalOutputPort(Device.Pins.D10), + portP: Device.CreateDigitalOutputPort(Device.Pins.D11), + portR: Device.CreateDigitalOutputPort(Device.Pins.D12), + portS: Device.CreateDigitalOutputPort(Device.Pins.D13), + portT: Device.CreateDigitalOutputPort(Device.Pins.D14), + portU: Device.CreateDigitalOutputPort(Device.Pins.D15), + portDecimal: Device.CreateDigitalOutputPort(Device.Pins.A00), + isCommonCathode: false + ); + + return base.Initialize(); + } + + public override Task Run() + { + sixteenSegment.SetDisplay(asciiCharacter: 'Z', showDecimal: true); + + return base.Run(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj new file mode 100644 index 0000000000..f0550a6169 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/SixteenSegment_Sample.csproj @@ -0,0 +1,20 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.SixteenSegment/Samples/SixteenSegment_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file From 407ddd25735af5c5e9751c7d6c98484f40591fb4 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:26:42 -0700 Subject: [PATCH 006/141] Add 14-segment support to HT16K33 w sample --- .../Driver/Ht16k33.14Character.cs | 35 ++++++++++++ .../ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs | 6 +-- .../Driver/ICs.IOExpanders.Ht16k33.csproj | 1 + .../Ht16k33_Character_Sample.csproj | 20 +++++++ .../Ht16k33_Character_Sample/MeadowApp.cs | 53 +++++++++++++++++++ .../meadow.config.yaml | 2 + .../Samples/Ht16k33_Sample/MeadowApp.cs | 1 - 7 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs create mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs new file mode 100644 index 0000000000..f7430ba726 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs @@ -0,0 +1,35 @@ +using Meadow.Foundation.Displays.Led; +using System; + +namespace Meadow.Foundation.ICs.IOExpanders +{ + public partial class Ht16k33 + { + /// + /// Set a 14-segment display to a specific character + /// + /// The ascii chracter + /// The display index (0-3) + public void Set14SegmentDisplay(char character, int displayIndex) + { + if (displayIndex < 0 || displayIndex > 3) + { + throw new IndexOutOfRangeException("Set14SegmentDisplay index must be 0, 1, 2 or 3"); + } + + int startIndex = 16 * displayIndex; + + for (int i = 0; i < 16; i++) + { + if (FourteenSegment.IsEnabled((FourteenSegment.Segment)i, character)) + { + SetLed((byte)(startIndex + i), true); + } + else + { + SetLed((byte)(startIndex + i), false); + } + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs index 5f9a441fee..a3882a9582 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs @@ -1,5 +1,5 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using System; namespace Meadow.Foundation.ICs.IOExpanders { @@ -26,7 +26,7 @@ public partial class Ht16k33 /// /// Create a new HT16K33 object using the default parameters /// - /// Address of the bus on the I2C display. + /// Address of the bus on the I2C display /// I2C bus instance public Ht16k33(II2cBus i2cBus, byte address = (byte)Addresses.Default) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj index 1b2561f485..74f67d5868 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/ICs.IOExpanders.Ht16k33.csproj @@ -18,5 +18,6 @@ + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj new file mode 100644 index 0000000000..64c7e9b299 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/Ht16k33_Character_Sample.csproj @@ -0,0 +1,20 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/MeadowApp.cs new file mode 100644 index 0000000000..7f05e05f35 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/MeadowApp.cs @@ -0,0 +1,53 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.ICs.IOExpanders; +using System.Threading; +using System.Threading.Tasks; + +namespace ICs.IOExpanders.HT16K33_Sample +{ + public class MeadowApp : App + { + // + + Ht16k33 ht16k33; + + public override Task Initialize() + { + Resolver.Log.Info("Initialize..."); + ht16k33 = new Ht16k33(Device.CreateI2cBus()); + + return base.Initialize(); + } + + public override async Task Run() + { + ht16k33.Set14SegmentDisplay('F', 0); + ht16k33.Set14SegmentDisplay('7', 1); + ht16k33.Set14SegmentDisplay('v', 2); + ht16k33.Set14SegmentDisplay('2', 3); + + ht16k33.UpdateDisplay(); + } + + // + + void LoopCharacters() + { + while (true) + { + for (int i = 32; i < 127; i++) + { + ht16k33.Set14SegmentDisplay((char)i, 0); + ht16k33.Set14SegmentDisplay((char)i, 1); + ht16k33.Set14SegmentDisplay((char)i, 2); + ht16k33.Set14SegmentDisplay((char)i, 3); + + ht16k33.UpdateDisplay(); + + Thread.Sleep(250); + } + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Character_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/MeadowApp.cs index bfe3940610..b1637c23c3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Samples/Ht16k33_Sample/MeadowApp.cs @@ -1,7 +1,6 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.ICs.IOExpanders; -using System; using System.Threading.Tasks; namespace ICs.IOExpanders.HT16K33_Sample From 267d8f1e80dd08ffdf4042dccfefc9986e7ffa1d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:31:08 -0700 Subject: [PATCH 007/141] Add ability to set a string to the HT16K33 --- .../Driver/Ht16k33.14Character.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs index f7430ba726..09d8e49ecd 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs @@ -6,7 +6,20 @@ namespace Meadow.Foundation.ICs.IOExpanders public partial class Ht16k33 { /// - /// Set a 14-segment display to a specific character + /// Set a message on a 14-segment display array + /// + /// The message (up to 4 chracters) + public void Set14SegmentMessage(string message) + { + for (int i = 0; i < Math.Max(message.Length, 4); i++) + { + Set14SegmentDisplay(message[i], i); + } + } + + + /// + /// Set a single 14-segment display to a specific character /// /// The ascii chracter /// The display index (0-3) From c7ef8dfe6d3edb9d59e1f0414d14e177c98382d1 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:31:35 -0700 Subject: [PATCH 008/141] Update sln --- Source/Meadow.Foundation.sln | 108 +++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index ef3ac0c122..e657f30e9a 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1139,6 +1139,42 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Gtk", "Meadow.Foun EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Epd5in65f_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\Epd5in65f_Sample\Epd5in65f_Sample.csproj", "{16A387A9-80AA-4080-85F6-10F53D6EC99E}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ch1115", "Ch1115", "{753F764D-EA21-43A0-B761-6E9B43D8C90B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ch1115", "Meadow.Foundation.Peripherals\Displays.Ch1115\Driver\Displays.Ch1115.csproj", "{C182D69A-FE45-46BF-8522-76E0BC962FFB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D46CA94B-9A0C-4188-9EE8-8A51E1499B73}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ch1115_Sample", "Meadow.Foundation.Peripherals\Displays.Ch1115\Samples\Ch1115_Sample\Ch1115_Sample.csproj", "{1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sh1106", "Sh1106", "{8D0C58C8-B325-48A1-A500-7E8FDC28C272}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F288D725-B26F-4E32-B870-F391AF4211EB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Sh1106", "Meadow.Foundation.Peripherals\Displays.Sh1106\Driver\Displays.Sh1106.csproj", "{BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1106_Sample", "Meadow.Foundation.Peripherals\Displays.Sh1106\Samples\Sh1106_Sample\Sh1106_Sample.csproj", "{F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourteenSegment", "Led.FourteenSegment", "{1D0D2EEC-2637-489F-83C3-7F7CB36E5512}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A7E3CDC-2141-4D74-A8CB-480ED78251B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.FourteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Driver\Displays.Led.FourteenSegment.csproj", "{2E207B06-0C55-44FA-8334-62D791DB6105}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FourteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Samples\FourteenSegment_Sample\FourteenSegment_Sample.csproj", "{B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ht16k33_Character_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Samples\Ht16k33_Character_Sample\Ht16k33_Character_Sample.csproj", "{85EA8B09-1C8D-4E67-9770-C1AD0A550DED}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.SixteenSegment", "Led.SixteenSegment", "{C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{13D97CCB-2CFF-4AB8-A170-701525DA740B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SixteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Driver\Displays.Led.SixteenSegment.csproj", "{70A3BC90-AB6A-4498-BFDE-07AA25823036}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Samples\SixteenSegment_Sample\SixteenSegment_Sample.csproj", "{A470E563-7ADD-4A76-91AE-C1190134D3FA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2691,6 +2727,60 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Build.0 = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Build.0 = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Build.0 = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Build.0 = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Build.0 = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Build.0 = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Deploy.0 = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Build.0 = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Build.0 = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3259,6 +3349,24 @@ Global {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {768E2B04-FBE8-4464-B5DE-F5AA010E9D33} = {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} + {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} + {753F764D-EA21-43A0-B761-6E9B43D8C90B} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {C182D69A-FE45-46BF-8522-76E0BC962FFB} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} + {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B} = {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} + {8D0C58C8-B325-48A1-A500-7E8FDC28C272} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {F288D725-B26F-4E32-B870-F391AF4211EB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2} = {F288D725-B26F-4E32-B870-F391AF4211EB} + {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} + {2E207B06-0C55-44FA-8334-62D791DB6105} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6} = {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED} = {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} + {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {13D97CCB-2CFF-4AB8-A170-701525DA740B} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} + {70A3BC90-AB6A-4498-BFDE-07AA25823036} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} + {A470E563-7ADD-4A76-91AE-C1190134D3FA} = {13D97CCB-2CFF-4AB8-A170-701525DA740B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From 94e9506bb571e3c9b6d043c48a40c58ca4a2f2a4 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 19:35:22 -0700 Subject: [PATCH 009/141] Remove blank line --- .../ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs index 09d8e49ecd..16494adf7b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.14Character.cs @@ -17,7 +17,6 @@ public void Set14SegmentMessage(string message) } } - /// /// Set a single 14-segment display to a specific character /// From 3b1cc284d9961b08e018bdaff31e221a3d3f87c9 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 3 Apr 2023 22:37:17 -0700 Subject: [PATCH 010/141] Pmsa003i updates (in progress) --- ...SA003I_series_data_manual_English_V2.6.pdf | Bin 0 -> 1297451 bytes .../Driver/Pmsa003I/Pmsa003I.Constants.cs | 13 +- .../Driver/Pmsa003I/Pmsa003I.Enums.cs | 23 ++- .../Driver/Pmsa003I/Pmsa003I.cs | 186 ++++++++++-------- .../Samples/Pma003I_Sample/MeadowApp.cs | 34 ++-- .../Pma003I_Sample/Pma003I_Sample.csproj | 5 +- 6 files changed, 137 insertions(+), 124 deletions(-) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Datasheet/4505_PMSA003I_series_data_manual_English_V2.6.pdf diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Datasheet/4505_PMSA003I_series_data_manual_English_V2.6.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Datasheet/4505_PMSA003I_series_data_manual_English_V2.6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..204bb5e2442dd4e2c4257558b880e1446adb6ebe GIT binary patch literal 1297451 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

ct;rW&5001+y@UHbUUUQJ+-s? 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�=6%Z&@!_9|v(6+H2`gY^Ai-o2|Iq$M8$k14wG_V<6mBAc4Lakxh zC%M>SX_?#X()qJzh3#HVcX^TZRYy>_KL>{6Ym}Z@oh=(W#aXL4nrwa7>xQ9F0Jj08 z6>ySaCa~=fDEJKr(g23!3Uq4feKpYiJY9x3{wHf;Ak;85ISIV-7&kls1UI-&Q61tg zWM}hh?fvrv_9LlMWg0SjFUC?*rlf;_QzNaQ<7MaZx z<$9=>yuEMY>wf8tv9Q{Gb5N>lCm1@EXIA@1?VMtZI}s;WhAo~U_qiQRCC9|?{^855 zDd|sB?R}V;&O99kA2y>(w(h?ER#QwK-431!{)Qo-0W$d@{>VB1P=;W2JHk{PdiGnI z(hrnCL1|D0m@w00Y5~gX%Z!fve2LFTZ4C5+UqA(_Z(Z%Y?T{_?zIleXI(mxAN!KR; z=tq0&`2WC<{@cP56zOtGM)h-p!zO!vr`dD49p{EjHIg0B@hi~$d-2QJ@iZZsd z^yPY(T)I0YkEUCM3@a;}-3~2RN#<-`%|@6?VTfhK4ocStT-5PTL(wsl0`|md_{4k8 z3%c7gG#(Thb@DvkApMyyp~UhTl;{DuT^@kK=jR3Z`1k6%1X59 z_{e*BTOCU3rj}je9N7rkZ+uh?);?KF87>vLP*g2@Pp*p{Zhip zCdr~{Ga`hMLA|LF(&d1~K{1-{&WQjuGn2-Ykb5-eC#pPHX6=sYfI=qiCYtvL$PWO6 z0z?t(>7yZ%W_lxt9nYE<0+%v?H)BK!??Y6{>DaB*>cr_Vzw zF(u>(>;z(wK^{mRVoqpYH|Dx7mfz|Vz6Qoel(e-cVSqw^s`UZwy6mCBL6C*M`_}oAk+G(>7OsrD-=#f* z-0RJUcz`wl(5VjK>j?^!-624k&=l=mII|T1JFZqBc48qsvvqVaJ#3s1@q@NGYG$}s z$9hexrV}RWXi4UHjE-U><2dU{Dx{_@|8BZt`}i4ua&z-;iI4ZZZXti(Sx(8kzq_!h z#Yi>FnU(QtGObF|YFx=MH*q|F(q#driiQAH?6htwjZ(a4R|O z0h(s!lpvbq-kz1(>G|6QHW2;a*<3BQ-FiPNxsbdQ4g*sKe(@@zLE3w~kIYqQVsL@9 z|1DNU|G{rQdmomT;7GcXU@3rlAbo!egsuc|(UGc0UBXZ^FcbmGaLI^gcesQ0b92E3 z6Vldb!rj928CB>#m#mIPVz$Te)p7dB%qY zi!nDRN`##qfM9+g0K=6UZRTpU3VNV^Ov+9k*I>*}^!st-Auye1rxfgb*g+0Ff)=%)5LMUXD~v8N zp+Wc-v7V%YqFX%!fm*NLi_szl!@57CwE|fvI($;wF4gA1-(ZxXh0?Rft~$d*8;2lr zbhOo?OvEwxqm{R6@Wy52)3OYl)YZWJ4}4A3W0O~@D87pk;sx?LUt8ð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

    GGHh{B=*)n({J9y&X$h_rJ)Uvp0)Pq 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 OJBt%EJK+mHX^d!v2>Bdk_;6#c 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 zü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

      a!f$^h*|{GuD2&F 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 + /// Valid I2C addresses for the sensor + /// + internal enum Addresses : byte + { + /// + /// Bus address 0x52 + /// ADDR is low + /// + Address_0x12 = 0x12, + /// + /// Default bus address + /// + Default = Address_0x12 + } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs index 249c31927f..81b5c50779 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -1,114 +1,74 @@ -using System; -using System.Linq; -using System.Threading.Tasks; - -using Meadow.Hardware; +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; using Meadow.Peripherals.Sensors.Environmental; using Meadow.Units; +using System; +using System.Linq; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Environmental { public partial class Pmsa003I : - ByteCommsSensorBase<(Concentration? PM1_0Std, - Concentration? PM2_5Std, - Concentration? PM10_0Std, - Concentration? PM1_0Env, - Concentration? PM2_5Env, - Concentration? PM10_0Env, - Concentration? P03um, - Concentration? P05um, - Concentration? P10um, - Concentration? P25um, - Concentration? P50um, - Concentration? P100um)>, + ByteCommsSensorBase<( + Density? PM1_0Std, //Particulate Matter 1 micro or less + Density? PM2_5Std, //Particulate Matter 2.5 micro or less + Density? PM10_0Std, //Particulate Matter 10 micro or less + Density? PM1_0Env, + Density? PM2_5Env, + Density? PM10_0Env, + Concentration? particles_0_3microns,//P03um, + Concentration? particles_0_5microns, + Concentration? particles_10microns, + Concentration? particles_25microns, + Concentration? particles_50microns, + Concentration? particles_100microns)>, IConcentrationSensor { - protected override Task<(Concentration? PM1_0Std, Concentration? PM2_5Std, Concentration? PM10_0Std, - Concentration? PM1_0Env, Concentration? PM2_5Env, Concentration? PM10_0Env, Concentration? P03um, - Concentration? P05um, Concentration? P10um, Concentration? P25um, Concentration? P50um, Concentration? - P100um)> ReadSensor() - { - var buffer = new byte[32]; - Peripheral.Read(buffer); - var span = buffer.AsSpan(); - span.Reverse(); - if (buffer[30..32].SequenceEqual(Preamble) == false) - { - throw new Exception("Preamble mismatch!"); - } - var messageLength = BitConverter.ToUInt16(span[28..30]); - if (messageLength != 28) - { - throw new Exception("Message is corrupt or has invalid length"); - } - - var checksum = BitConverter.ToUInt16(buffer[2..4]); - // this is in big-endian format, so we need to reverse things... - var pm10Standard = new Concentration(BitConverter.ToUInt16(span[26..28]), Units.Concentration.UnitType.PartsPerMillion); - var pm25Standard = new Concentration(BitConverter.ToUInt16(span[24..26]), Units.Concentration.UnitType.PartsPerMillion); - var pm100Standard = new Concentration(BitConverter.ToUInt16(span[22..24]), Units.Concentration.UnitType.PartsPerMillion); - var pm10Environmental = new Concentration(BitConverter.ToUInt16(span[20..22]), Units.Concentration.UnitType.PartsPerMillion); - var pm25Environmental = new Concentration(BitConverter.ToUInt16(span[18..20]), Units.Concentration.UnitType.PartsPerMillion); - var pm100Environmental = new Concentration(BitConverter.ToUInt16(span[16..18]), Units.Concentration.UnitType.PartsPerMillion); - var p03um = new Concentration(BitConverter.ToUInt16(span[14..16]), Units.Concentration.UnitType.PartsPerMillion); - var p05um = new Concentration(BitConverter.ToUInt16(span[12..14]), Units.Concentration.UnitType.PartsPerMillion); - var p10um = new Concentration(BitConverter.ToUInt16(span[10..12]), Units.Concentration.UnitType.PartsPerMillion); - var p25um = new Concentration(BitConverter.ToUInt16(span[8..10]), Units.Concentration.UnitType.PartsPerMillion); - var p50um = new Concentration(BitConverter.ToUInt16(span[6..8]), Units.Concentration.UnitType.PartsPerMillion); - var p100um = new Concentration(BitConverter.ToUInt16(span[4..6]), Units.Concentration.UnitType.PartsPerMillion); - - Conditions = (pm10Standard, pm25Standard, pm100Standard, pm10Environmental, pm25Environmental, - pm100Environmental, p03um, p05um, p10um, p25um, p50um, p100um); - - return Task.FromResult(Conditions); - } - - public Concentration? Concentration { get; } public event EventHandler> ConcentrationUpdated; /// /// Raised when the Standard PM1.0 concentration changes /// - public event EventHandler> PM1_0StdConcentrationUpdated = delegate { }; + public event EventHandler> PM1_0StdConcentrationUpdated = delegate { }; /// /// Raised when the Standard PM2.5 concentration changes /// - public event EventHandler> PM2_5StdConcentrationUpdated = delegate { }; + public event EventHandler> PM2_5StdConcentrationUpdated = delegate { }; /// /// Raised when the Standard PM10.0 concentration changes /// - public event EventHandler> PM10_0StdConcentrationUpdated = delegate { }; + public event EventHandler> PM10_0StdConcentrationUpdated = delegate { }; /// /// Raised when the Environment PM1.0 concentration changes /// - public event EventHandler> PM1_0EnvConcentrationUpdated = delegate { }; + public event EventHandler> PM1_0EnvConcentrationUpdated = delegate { }; /// /// Raised when the Environment PM2.5 concentration changes /// - public event EventHandler> PM2_5EnvConcentrationUpdated = delegate { }; + public event EventHandler> PM2_5EnvConcentrationUpdated = delegate { }; /// /// Raised when the Environment PM10.0 concentration changes /// - public event EventHandler> PM10_0EnvConcentrationUpdated = delegate { }; - - public Concentration? PM1_0Std => Conditions.PM1_0Std; - public Concentration? PM2_5Std => Conditions.PM2_5Std; - public Concentration? PM10_0Std => Conditions.PM10_0Std; - public Concentration? PM1_0Env => Conditions.PM1_0Env; - public Concentration? PM2_5Env => Conditions.PM2_5Env; - public Concentration? PM10_0Env => Conditions.PM10_0Env; - public Concentration? P03um => Conditions.P03um; - public Concentration? P05um => Conditions.P05um; - public Concentration? P10um => Conditions.P10um; - public Concentration? P25um => Conditions.P25um; - public Concentration? P50um => Conditions.P50um; - public Concentration? P100um => Conditions.P100um; + public event EventHandler> PM10_0EnvConcentrationUpdated = delegate { }; + + public Density? PM1_0Std => Conditions.PM1_0Std; + public Density? PM2_5Std => Conditions.PM2_5Std; + public Density? PM10_0Std => Conditions.PM10_0Std; + public Density? PM1_0Env => Conditions.PM1_0Env; + public Density? PM2_5Env => Conditions.PM2_5Env; + public Density? PM10_0Env => Conditions.PM10_0Env; + public Concentration? ConcentrationOf0_3micronParticles => Conditions.particles_0_3microns; + public Concentration? ConcentrationOf0_5micronParticles => Conditions.particles_0_5microns; + public Concentration? ConcentrationOf10micronParticles => Conditions.particles_10microns; + public Concentration? ConcentrationOf25micronParticles => Conditions.particles_25microns; + public Concentration? ConcentrationOf50micronParticles => Conditions.particles_50microns; + public Concentration? ConcentrationOf100micronParticles => Conditions.particles_100microns; /// public Concentration? Concentration { get; protected set; } + /// + /// The MiniPID2 device type + /// + public MiniPID2Type MiniPID2DeviceType { get; protected set; } + /// /// AnalogInputPort connected to temperature sensor /// @@ -39,11 +44,12 @@ public partial class MiniPID2 : SamplingSensorBase, IConcentratio /// These are automatically averaged to reduce noise /// The time between sample readings public MiniPID2(IPin analogPin, + MiniPID2Type pid2Type, int sampleCount = 5, TimeSpan? sampleInterval = null) : this(analogPin.CreateAnalogInputPort(sampleCount, sampleInterval ?? TimeSpan.FromMilliseconds(40), - new Voltage(3.3, Voltage.UnitType.Volts))) + new Voltage(3.3, Voltage.UnitType.Volts)), pid2Type) { } @@ -51,8 +57,9 @@ public MiniPID2(IPin analogPin, /// Create a new MiniPID2 object /// /// The analog port connected to the sensor - public MiniPID2(IAnalogInputPort analogInputPort) + public MiniPID2(IAnalogInputPort analogInputPort, MiniPID2Type pid2Type) { + MiniPID2DeviceType = pid2Type; AnalogInputPort = analogInputPort; Initialize(); } @@ -62,7 +69,6 @@ public MiniPID2(IAnalogInputPort analogInputPort) /// void Initialize() { - // wire up our observable AnalogInputPort.Subscribe ( IAnalogInputPort.CreateObserver( @@ -73,9 +79,7 @@ void Initialize() New = VoltageToConcentration(result.New), Old = Concentration }; - // save state Concentration = changeResult.New; - // notify RaiseEventsAndNotify(changeResult); } ) @@ -156,7 +160,16 @@ protected override void RaiseEventsAndNotify(IChangeResult change /// Concentration protected Concentration VoltageToConcentration(Voltage voltage) { - return new Concentration(voltage.Volts); + switch (MiniPID2DeviceType) + { + case MiniPID2Type.PPB: + Console.WriteLine(voltage.ToString()); + var ppb = (voltage.Millivolts - (51 + 65) / 2.0) / 30.0; + return new Concentration(ppb, Units.Concentration.UnitType.PartsPerBillion); + + } + + return new Concentration(0); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs index 3f34254395..d835f5961b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs @@ -1,35 +1,35 @@ -using System; -using System.Threading.Tasks; -using Meadow; +using Meadow; using Meadow.Devices; using Meadow.Foundation.Sensors.Environmental; +using System; +using System.Threading.Tasks; namespace Sensors.Environmental.Ens160_Sample { - public class MeadowApp : App + public class MeadowApp : App { // - Ens160 sensor; + MiniPID2 sensor; public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); - - sensor = new Ens160(i2cBus, (byte)Ens160.Addresses.Address_0x53); - - var consumer = Ens160.CreateObserver( + sensor = new MiniPID2(Device.Pins.A01, MiniPID2.MiniPID2Type.PPB); + + + + var consumer = MiniPID2.CreateObserver( handler: result => { - Resolver.Log.Info($"Observer: C02 concentration changed by threshold; new: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm"); + Resolver.Log.Info($"Observer: VOC concentration changed by threshold; new: {result.New.PartsPerBillion:N0}ppm"); }, filter: result => { - if (result.Old?.CO2Concentration is { } oldCon && - result.New.CO2Concentration is { } newCon) + if (result.Old is { } oldCon && + result.New is { } newCon) { return Math.Abs((newCon - oldCon).PartsPerMillion) > 10; } @@ -43,10 +43,7 @@ public override Task Initialize() { sensor.Updated += (sender, result) => { - Resolver.Log.Info($" CO2 Concentration: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm"); - Resolver.Log.Info($" Ethanol Concentraion: {result.New.EthanolConcentration?.PartsPerBillion:N0}ppb"); - Resolver.Log.Info($" TVOC Concentraion: {result.New.TVOCConcentration?.PartsPerBillion:N0}ppb"); - Resolver.Log.Info($" AQI: {sensor.GetAirQualityIndex()}"); + Resolver.Log.Info($" VOC Concentraion: {result.New.PartsPerBillion:N0}ppb"); }; } From d8d5e23fac26bd3fa6c701f03e5ed86072a02384 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 10:49:56 -0700 Subject: [PATCH 023/141] MiniPID2 supports multiple sensors + cleanup --- .../Driver/MiniPID2.Enums.cs | 32 +++++- .../{MiniPID2MiniPID2.cs => MiniPID2.cs} | 97 ++++++++++++++----- .../Samples/MiniPID2_Sample/MeadowApp.cs | 9 +- 3 files changed, 106 insertions(+), 32 deletions(-) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/{MiniPID2MiniPID2.cs => MiniPID2.cs} (62%) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs index 641013ee57..8ece9f0cd7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs @@ -2,13 +2,43 @@ { partial class MiniPID2 { + /// + /// The MiniPID 2 Volatile Organic Compounds (VOC) sensor variant + /// public enum MiniPID2Type : byte { + /// + /// MiniPID 2 PartsPerMillion VOC Sensor + /// PPM, + /// + /// MiniPID 2 PartsPerMillion Wide Range VOC Sensor + /// + PPM_WR, + /// + /// MiniPID 2 PartsPerBillion VOC Sensor + /// PPB, + /// + /// MiniPID 2 PartsPerBillion Wide Range VOC Sensor + /// + PPB_WR, + /// + /// MiniPID 2 High Sensitivity VOC Sensor + /// HS, + /// + /// MiniPID 2 10.0 eV VOC Sensor + /// _10ev, - _11_7eV + /// + /// MiniPID 2 11.7 eV VOC Sensor + /// + _11_7eV, + /// + /// The number of supported sensors + /// + count } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.cs similarity index 62% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.cs index 59209713c6..302bef2418 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Sensors.Environmental { /// - /// Represents an IonScience MiniPID2 analog photoionisation (PID) VOC sensor + /// Represents an IonScience MiniPID2 analog photoionisation (PID) Volatile Organic Compounds (VOC) sensor /// public partial class MiniPID2 : SamplingSensorBase, IConcentrationSensor { @@ -36,10 +36,13 @@ public partial class MiniPID2 : SamplingSensorBase, IConcentratio /// protected IAnalogInputPort AnalogInputPort { get; } + SensorCalibration[] calibrations; + /// /// Create a new MiniPID2 object /// /// The analog data pin connected to the sensor + /// The MiniPID sensor type /// How many samples to take during a given reading. /// These are automatically averaged to reduce noise /// The time between sample readings @@ -57,6 +60,7 @@ public MiniPID2(IPin analogPin, /// Create a new MiniPID2 object /// /// The analog port connected to the sensor + /// The MiniPID sensor type public MiniPID2(IAnalogInputPort analogInputPort, MiniPID2Type pid2Type) { MiniPID2DeviceType = pid2Type; @@ -64,11 +68,47 @@ public MiniPID2(IAnalogInputPort analogInputPort, MiniPID2Type pid2Type) Initialize(); } + /// + /// Set the sensor voltage offset + /// Useful for compensating for air conditions + /// + /// Offset voltage + /// The sensor to change + public void SetOffsetForSensor(Voltage offset, MiniPID2Type sensorType) + { + calibrations[(int)sensorType].Offset = offset; + } + + /// + /// Get the voltage offset for a sensor + /// + /// The sensor + /// The offset as voltage + public Voltage GetOffsetForSensor(MiniPID2Type sensorType) + => calibrations[(int)sensorType].Offset; + /// /// Initialize the sensor /// void Initialize() { + static SensorCalibration GetCalibration(int airOffsetLow, int airOffsetHigh, double sensitivity, double minimumPPB) + { + return new SensorCalibration(new Voltage((airOffsetLow + airOffsetHigh) / 2, Voltage.UnitType.Millivolts), + new Voltage(sensitivity, Voltage.UnitType.Millivolts), + new Concentration(minimumPPB, Units.Concentration.UnitType.PartsPerBillion)); + } + + calibrations = new SensorCalibration[(int)MiniPID2Type.count]; + + calibrations[(int)MiniPID2Type.PPM] = GetCalibration(51, 65, 65, 100); + calibrations[(int)MiniPID2Type.PPM_WR] = GetCalibration(51, 64, 40, 500); + calibrations[(int)MiniPID2Type.PPB] = GetCalibration(51, 80, 30, 1); + calibrations[(int)MiniPID2Type.PPB_WR] = GetCalibration(51, 80, 5, 20); + calibrations[(int)MiniPID2Type.HS] = GetCalibration(100, 200, 600, 0.5); + calibrations[(int)MiniPID2Type._10ev] = GetCalibration(51, 80, 15, 5); + calibrations[(int)MiniPID2Type._11_7eV] = GetCalibration(51, 90, 1, 100); + AnalogInputPort.Subscribe ( IAnalogInputPort.CreateObserver( @@ -99,24 +139,6 @@ protected override async Task ReadSensor() return newConcentration; } - /// - /// Set ambient temperature - /// - /// - public void SetTemperature(Units.Temperature ambientTemperature) - { - - } - - /// - /// Set relative humidity - /// - /// - public void SetHumidity(RelativeHumidity humidity) - { - - } - /// /// Starts updating the sensor on the updateInterval frequency specified /// @@ -160,16 +182,41 @@ protected override void RaiseEventsAndNotify(IChangeResult change /// Concentration protected Concentration VoltageToConcentration(Voltage voltage) { - switch (MiniPID2DeviceType) + int i = (int)MiniPID2DeviceType; + + var ppm = (voltage.Millivolts - calibrations[i].Offset.Millivolts) / calibrations[i].Sensitivity.Millivolts; + + if (ppm < calibrations[i].MinimumDetectionLimit.PartsPerMillion) { - case MiniPID2Type.PPB: - Console.WriteLine(voltage.ToString()); - var ppb = (voltage.Millivolts - (51 + 65) / 2.0) / 30.0; - return new Concentration(ppb, Units.Concentration.UnitType.PartsPerBillion); + return calibrations[i].MinimumDetectionLimit; + } + + return new Concentration(ppm, Units.Concentration.UnitType.PartsPerMillion); + } + struct SensorCalibration + { + public SensorCalibration(Voltage offset, Voltage sensitivity, Concentration minimumDetectionLimit) + { + Offset = offset; + Sensitivity = sensitivity; + MinimumDetectionLimit = minimumDetectionLimit; } - return new Concentration(0); + /// + /// The offset to compensate for air quality/conditions + /// + public Voltage Offset { get; set; } + + /// + /// Sensitivity mv/ppm as voltage + /// + public Voltage Sensitivity { get; set; } + + /// + /// The minimum concentration returned by the sensor + /// + public Concentration MinimumDetectionLimit { get; set; } } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs index d835f5961b..f10540f033 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs @@ -16,15 +16,12 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - - sensor = new MiniPID2(Device.Pins.A01, MiniPID2.MiniPID2Type.PPB); - - + sensor = new MiniPID2(Device.Pins.A01, MiniPID2.MiniPID2Type.PPB_WR); var consumer = MiniPID2.CreateObserver( handler: result => { - Resolver.Log.Info($"Observer: VOC concentration changed by threshold; new: {result.New.PartsPerBillion:N0}ppm"); + Resolver.Log.Info($"Observer: VOC concentration changed by threshold; new: {result.New.PartsPerBillion:N1}ppm"); }, filter: result => { @@ -43,7 +40,7 @@ public override Task Initialize() { sensor.Updated += (sender, result) => { - Resolver.Log.Info($" VOC Concentraion: {result.New.PartsPerBillion:N0}ppb"); + Resolver.Log.Info($" VOC Concentraion: {result.New.PartsPerMillion:N1}ppm"); }; } From dbad72dfd6941cb754766d2ab8ff2051db1e4551 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 13:52:12 -0700 Subject: [PATCH 024/141] Add DigitalJoystick driver --- .../Sensors/Hid/DigitalJoystick.cs | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs diff --git a/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs new file mode 100644 index 0000000000..913b99cacb --- /dev/null +++ b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs @@ -0,0 +1,121 @@ +using Meadow.Foundation.Sensors.Buttons; +using Meadow.Hardware; +using Meadow.Peripherals.Sensors.Hid; +using System; + + +namespace Meadow.Foundation.Sensors.Hid +{ + /// + /// Represents a 4 switch digital joystick or directional pad (D-pad) + /// + public class DigitalJoystick : IDigitalJoystick + { + /// + /// Get the current digital joystick position + /// + public DigitalJoystickPosition? Position { get; protected set; } = DigitalJoystickPosition.Center; + + public event EventHandler> Updated; + + PushButton buttonUp; + PushButton buttonDown; + PushButton buttonLeft; + PushButton buttonRight; + + public DigitalJoystick(IPin pinUp, IPin pinDown, IPin pinLeft, IPin pinRight, ResistorMode resistorMode) + : this(pinUp.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), + pinDown.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), + pinLeft.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), + pinRight.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode)) + { + } + + public DigitalJoystick(IDigitalInputPort portUp, + IDigitalInputPort portDown, + IDigitalInputPort portLeft, + IDigitalInputPort portRight) + { + buttonUp = new PushButton(portUp); + buttonDown = new PushButton(portDown); + buttonLeft = new PushButton(portLeft); + buttonRight = new PushButton(portRight); + + buttonUp.PressStarted += PressStarted; + buttonDown.PressStarted += PressStarted; + buttonLeft.PressStarted += PressStarted; + buttonRight.PressStarted += PressStarted; + + buttonUp.PressEnded += PressEnded; + buttonDown.PressEnded += PressEnded; + buttonLeft.PressEnded += PressEnded; + buttonUp.PressEnded += PressEnded; + } + + private void PressEnded(object sender, EventArgs e) + { + Update(); + } + + private void PressStarted(object sender, EventArgs e) + { + Update(); + } + + void Update() + { + var isLeftPressed = buttonLeft.State; + var isRightPressed = buttonRight.State; + var isUpPressed = buttonUp.State; + var isDownPressed = buttonDown.State; + + var newPosition = GetDigitalPosition(isLeftPressed, isRightPressed, isUpPressed, isDownPressed); + + if (newPosition != Position) + { + Updated?.Invoke(this, new ChangeResult(newPosition, Position)); + Position = newPosition; + } + } + + DigitalJoystickPosition GetDigitalPosition(bool isLeftPressed, bool isRightPressed, bool isUpPressed, bool isDownPressed) + { + if (isRightPressed) + { //Right + if (isUpPressed) + { + return DigitalJoystickPosition.UpRight; + } + if (isDownPressed) + { + return DigitalJoystickPosition.DownRight; + } + return DigitalJoystickPosition.Right; + } + else if (isLeftPressed) + { //Left + if (isUpPressed) + { + return DigitalJoystickPosition.UpLeft; + } + if (isDownPressed) + { + return DigitalJoystickPosition.DownLeft; + } + return DigitalJoystickPosition.Left; + } + else if (isUpPressed) + { //Up + return DigitalJoystickPosition.Up; + } + else if (isDownPressed) + { //Down + return DigitalJoystickPosition.Down; + } + else + { //Center + return DigitalJoystickPosition.Center; + } + } + } +} \ No newline at end of file From d334c516b2b005756548741311c56b05e8019093 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 13:52:38 -0700 Subject: [PATCH 025/141] Minor cleanup in WiiExtensionDPad --- .../Driver/Controls/WiiExtensionDPad.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Controls/WiiExtensionDPad.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Controls/WiiExtensionDPad.cs index bc70b6129a..bdee20cebb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Controls/WiiExtensionDPad.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Controls/WiiExtensionDPad.cs @@ -1,5 +1,4 @@ -using Meadow; -using Meadow.Peripherals.Sensors.Hid; +using Meadow.Peripherals.Sensors.Hid; using System; namespace Meadow.Foundation.Sensors.Hid @@ -14,11 +13,10 @@ public void Update(bool isLeftPressed, bool isRightPressed, bool isUpPressed, bo { var newPosition = GetDigitalPosition(isLeftPressed, isRightPressed, isUpPressed, isDownPressed); - if(newPosition != Position) + if (newPosition != Position) { - Updated?.Invoke(this, new ChangeResult(newPosition, Position)); - Position = newPosition; + Position = newPosition; } } From 3f56a1dcc94c81d7f202cd40c2d42e090175723d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 13:52:51 -0700 Subject: [PATCH 026/141] Minor push button cleanup --- Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs index 8495ba060f..d401d3cc00 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs @@ -39,7 +39,7 @@ public TimeSpan DebounceDuration /// /// The button state polling interval for PushButton instances that are created - /// from a port that doesn't have an tnterrupt mode of EdgeBoth - otherwise ignored + /// from a port that doesn't have an interrupt mode of EdgeBoth - otherwise ignored /// public TimeSpan ButtonPollingInterval { get; set; } = TimeSpan.FromMilliseconds(100); From 1add0dcf38c289a44e72796579f568fb141019ae Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 13:53:05 -0700 Subject: [PATCH 027/141] Add support for common ground to RotaryEncoder --- .../Sensors/Rotary/RotaryEncoder.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Sensors/Rotary/RotaryEncoder.cs b/Source/Meadow.Foundation.Core/Sensors/Rotary/RotaryEncoder.cs index 3382e35a90..160e0fa15b 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Rotary/RotaryEncoder.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Rotary/RotaryEncoder.cs @@ -58,13 +58,14 @@ public class RotaryEncoder : IRotaryEncoder 0, 1, -1, 0 }; /// - /// Instantiate a new RotaryEncoder on the specified pins. + /// Instantiate a new RotaryEncoder on the specified pins /// - /// - /// - public RotaryEncoder(IPin aPhasePin, IPin bPhasePin) : - this(aPhasePin.CreateDigitalInputPort(InterruptMode.EdgeBoth, ResistorMode.InternalPullDown, TimeSpan.Zero, TimeSpan.FromMilliseconds(0.1)), - bPhasePin.CreateDigitalInputPort(InterruptMode.EdgeBoth, ResistorMode.InternalPullDown, TimeSpan.Zero, TimeSpan.FromMilliseconds(0.1))) + /// Pin A + /// Pin B + /// Do the encode pins use a common ground (true) or common positive (false) + public RotaryEncoder(IPin aPhasePin, IPin bPhasePin, bool isCommonGround = false) : + this(aPhasePin.CreateDigitalInputPort(InterruptMode.EdgeBoth, isCommonGround ? ResistorMode.InternalPullUp : ResistorMode.InternalPullDown, TimeSpan.Zero, TimeSpan.FromMilliseconds(0.1)), + bPhasePin.CreateDigitalInputPort(InterruptMode.EdgeBoth, isCommonGround ? ResistorMode.InternalPullUp : ResistorMode.InternalPullDown, TimeSpan.Zero, TimeSpan.FromMilliseconds(0.1))) { } /// From 9c1b9b8a0bd600cb0202623a49d1b492ee80a3d9 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 13:53:26 -0700 Subject: [PATCH 028/141] Add ANO Navigation Encocder driver --- .../Driver/ANONavigationEncoder.Enums.cs | 6 ++ .../Driver/ANONavigationEncoder.cs | 64 +++++++++++++++++++ .../Sensors.Hid.ANONavigationEncoder.csproj | 22 +++++++ .../ANONavigationEncoder_Sample.csproj | 17 +++++ .../ANONavigationEncoder_Sample/MeadowApp.cs | 41 ++++++++++++ .../meadow.config.yaml | 2 + Source/Meadow.Foundation.sln | 24 +++++++ 7 files changed, 176 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs new file mode 100644 index 0000000000..346f27e26b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs @@ -0,0 +1,6 @@ +namespace Meadow.Foundation.Sensors.Hid +{ + public partial class ANONavigationEncoder + { + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs new file mode 100644 index 0000000000..83564e93d2 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs @@ -0,0 +1,64 @@ +using Meadow.Foundation.Sensors.Buttons; +using Meadow.Foundation.Sensors.Rotary; +using Meadow.Hardware; +using Meadow.Peripherals.Sensors.Hid; + +namespace Meadow.Foundation.Sensors.Hid +{ + /// + /// Represents a ANO Directional Navigation and Scroll Wheel Rotary Encoder + /// + public partial class ANONavigationEncoder + { + /// + /// The directional pad + /// + public IDigitalJoystick DirectionalPad { get; protected set; } + + /// + /// The center button + /// + public PushButton ButtonCenter { get; protected set; } + + /// + /// The rotary wheel + /// + public RotaryEncoder RotaryEncoder { get; protected set; } + + /// + /// Create a new ANONavigationEncoder object + /// + public ANONavigationEncoder(IPin pinSwitch1, IPin pinSwitch2, IPin pinSwitch3, IPin pinSwitch4, IPin pinSwitch5, + bool isSwitchCommonGround, IPin pinEncoderA, IPin pinEncoderB, bool isEncoderCommonGround) + { + var buttonResistorMode = isSwitchCommonGround ? ResistorMode.InternalPullUp : ResistorMode.InternalPullDown; + + DirectionalPad = new DigitalJoystick( + pinSwitch2, + pinSwitch4, + pinSwitch1, + pinSwitch3, + buttonResistorMode); + + ButtonCenter = new PushButton(pinSwitch5, buttonResistorMode); + + RotaryEncoder = new RotaryEncoder(pinEncoderA, pinEncoderB, isEncoderCommonGround); + } + + /// + /// Create a new ANONavigationEncoder object + /// + public ANONavigationEncoder(IDigitalInputPort portSwitch1, + IDigitalInputPort portSwitch2, + IDigitalInputPort portSwitch3, + IDigitalInputPort portSwitch4, + IDigitalInputPort portSwitch5, + IDigitalInputPort portEncoderA, + IDigitalInputPort portEncoderB) + { + DirectionalPad = new DigitalJoystick(portSwitch1, portSwitch2, portSwitch3, portSwitch4); + ButtonCenter = new PushButton(portSwitch5); + RotaryEncoder = new RotaryEncoder(portEncoderA, portEncoderB); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj new file mode 100644 index 0000000000..8ca0460119 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/Sensors.Hid.ANONavigationEncoder.csproj @@ -0,0 +1,22 @@ + + + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + ANONavigationEncoder + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Sensors.Hid.ANONavigationEncoder + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation,ANONavigationEncoder,direction,directional,navigation,rotary,encoder + 0.1.9 + true + GPIO ANO Directional Navigation and Scroll Wheel Rotary Encoder + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj new file mode 100644 index 0000000000..e743065dfd --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/ANONavigationEncoder_Sample.csproj @@ -0,0 +1,17 @@ + + + netstandard2.1 + true + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs new file mode 100644 index 0000000000..8d84f37ec3 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs @@ -0,0 +1,41 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Hid; +using System.Threading.Tasks; + +namespace ANONavigationEncoder_Sample +{ + public class MeadowApp : App + { + ANONavigationEncoder encoder; + + public override Task Initialize() + { + Resolver.Log.Info("Initialize..."); + + encoder = new ANONavigationEncoder(Device.Pins.A01, Device.Pins.A02, Device.Pins.A03, Device.Pins.A04, + Device.Pins.A05, true, Device.Pins.D02, Device.Pins.D03, true); + + encoder.ButtonCenter.Clicked += ButtonCenter_Clicked; + encoder.DirectionalPad.Updated += DirectionalPad_Updated; + encoder.RotaryEncoder.Rotated += RotaryEncoder_Rotated; + + return Task.CompletedTask; + } + + private void RotaryEncoder_Rotated(object sender, Meadow.Peripherals.Sensors.Rotary.RotaryChangeResult e) + { + Resolver.Log.Info($"Rotary dial moved: {e.New}"); + } + + private void DirectionalPad_Updated(object sender, ChangeResult e) + { + Resolver.Log.Info($"DPad state updated: {e.New}"); + } + + private void ButtonCenter_Clicked(object sender, System.EventArgs e) + { + Resolver.Log.Info("Center button clicked"); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index 93f271708a..61f4446b64 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1191,6 +1191,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5944 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniPID2_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Samples\MiniPID2_Sample\MiniPID2_Sample.csproj", "{95670172-AB31-4239-8805-346DDD57983F}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ANONavigationEncoder", "ANONavigationEncoder", "{E2A8BDCC-626E-450D-918F-785E3777793E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.ANONavigationEncoder", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Driver\Sensors.Hid.ANONavigationEncoder.csproj", "{D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{113D71B4-AE9A-402A-95A0-4D46C28F1EA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ANONavigationEncoder_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Samples\ANONavigationEncoder_Sample\ANONavigationEncoder_Sample.csproj", "{3885F704-2844-4EDD-9706-BD1B0C85A29B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2821,6 +2829,18 @@ Global {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.ActiveCfg = Release|Any CPU {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Build.0 = Release|Any CPU {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Build.0 = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Build.0 = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3415,6 +3435,10 @@ Global {00085539-EB03-49CE-8518-13544FD480BB} = {38944011-FA3C-4557-9049-B41B6168F6C0} {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} = {38944011-FA3C-4557-9049-B41B6168F6C0} {95670172-AB31-4239-8805-346DDD57983F} = {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} + {E2A8BDCC-626E-450D-918F-785E3777793E} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4} = {E2A8BDCC-626E-450D-918F-785E3777793E} + {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} = {E2A8BDCC-626E-450D-918F-785E3777793E} + {3885F704-2844-4EDD-9706-BD1B0C85A29B} = {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From 57088d59f234c18e786f713c4dd975e4f2f67eac Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 7 Apr 2023 14:10:29 -0700 Subject: [PATCH 029/141] Minor cleanup --- .../Sensors/Hid/DigitalJoystick.cs | 15 ++++++++------- .../Driver/ANONavigationEncoder.cs | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs index 913b99cacb..02673ff517 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs @@ -3,7 +3,6 @@ using Meadow.Peripherals.Sensors.Hid; using System; - namespace Meadow.Foundation.Sensors.Hid { /// @@ -16,20 +15,22 @@ public class DigitalJoystick : IDigitalJoystick /// public DigitalJoystickPosition? Position { get; protected set; } = DigitalJoystickPosition.Center; + /// + /// Raised when the digital joystick position changes + /// public event EventHandler> Updated; - PushButton buttonUp; - PushButton buttonDown; - PushButton buttonLeft; - PushButton buttonRight; + readonly PushButton buttonUp; + readonly PushButton buttonDown; + readonly PushButton buttonLeft; + readonly PushButton buttonRight; public DigitalJoystick(IPin pinUp, IPin pinDown, IPin pinLeft, IPin pinRight, ResistorMode resistorMode) : this(pinUp.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), pinDown.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), pinLeft.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), pinRight.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode)) - { - } + { } public DigitalJoystick(IDigitalInputPort portUp, IDigitalInputPort portDown, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs index 83564e93d2..b1429d59cf 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs @@ -34,10 +34,10 @@ public ANONavigationEncoder(IPin pinSwitch1, IPin pinSwitch2, IPin pinSwitch3, I var buttonResistorMode = isSwitchCommonGround ? ResistorMode.InternalPullUp : ResistorMode.InternalPullDown; DirectionalPad = new DigitalJoystick( - pinSwitch2, pinSwitch4, - pinSwitch1, + pinSwitch2, pinSwitch3, + pinSwitch1, buttonResistorMode); ButtonCenter = new PushButton(pinSwitch5, buttonResistorMode); From acae751080f34f3862c8c3c8cf93c66b9b79ca39 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sat, 8 Apr 2023 13:32:46 -0700 Subject: [PATCH 030/141] DigitalJoystick driver cleanup --- .../Sensors/Hid/DigitalJoystick.cs | 79 ++++++++++++------- 1 file changed, 51 insertions(+), 28 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs index 02673ff517..b0e49a2250 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Hid/DigitalJoystick.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Sensors.Hid { /// - /// Represents a 4 switch digital joystick or directional pad (D-pad) + /// Represents a 4 switch digital joystick / directional pad (D-pad) /// public class DigitalJoystick : IDigitalJoystick { @@ -18,13 +18,33 @@ public class DigitalJoystick : IDigitalJoystick /// /// Raised when the digital joystick position changes /// - public event EventHandler> Updated; + public event EventHandler> Updated = delegate { }; - readonly PushButton buttonUp; - readonly PushButton buttonDown; - readonly PushButton buttonLeft; - readonly PushButton buttonRight; + /// + /// The PushButton class for the up digital joystick switch + /// + public PushButton ButtonUp { get; protected set; } + /// + /// The PushButton class for the down digital joystick switch + /// + public PushButton ButtonDown { get; protected set; } + /// + /// The PushButton class for the left digital joystick switch + /// + public PushButton ButtonLeft { get; protected set; } + /// + /// The PushButton class for the right digital joystick switch + /// + public PushButton ButtonRight { get; protected set; } + /// + /// Create a new DigitalJoystick object + /// + /// The pin connected to the up switch + /// The pin connected to the down switch + /// The pin connected to the left switch + /// The pin connected to the right switch + /// The resistor mode for all pins public DigitalJoystick(IPin pinUp, IPin pinDown, IPin pinLeft, IPin pinRight, ResistorMode resistorMode) : this(pinUp.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), pinDown.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode), @@ -32,43 +52,46 @@ public DigitalJoystick(IPin pinUp, IPin pinDown, IPin pinLeft, IPin pinRight, Re pinRight.CreateDigitalInputPort(InterruptMode.EdgeBoth, resistorMode)) { } + /// + /// Create a new DigitalJoystick object + /// + /// The digital port for the up switch + /// The digital port for the down switch + /// The digital port for the left switch + /// The digital port for the right switch public DigitalJoystick(IDigitalInputPort portUp, IDigitalInputPort portDown, IDigitalInputPort portLeft, IDigitalInputPort portRight) { - buttonUp = new PushButton(portUp); - buttonDown = new PushButton(portDown); - buttonLeft = new PushButton(portLeft); - buttonRight = new PushButton(portRight); + ButtonUp = new PushButton(portUp); + ButtonDown = new PushButton(portDown); + ButtonLeft = new PushButton(portLeft); + ButtonRight = new PushButton(portRight); - buttonUp.PressStarted += PressStarted; - buttonDown.PressStarted += PressStarted; - buttonLeft.PressStarted += PressStarted; - buttonRight.PressStarted += PressStarted; + ButtonUp.PressStarted += PressStarted; + ButtonDown.PressStarted += PressStarted; + ButtonLeft.PressStarted += PressStarted; + ButtonRight.PressStarted += PressStarted; - buttonUp.PressEnded += PressEnded; - buttonDown.PressEnded += PressEnded; - buttonLeft.PressEnded += PressEnded; - buttonUp.PressEnded += PressEnded; + ButtonUp.PressEnded += PressEnded; + ButtonDown.PressEnded += PressEnded; + ButtonLeft.PressEnded += PressEnded; + ButtonUp.PressEnded += PressEnded; } private void PressEnded(object sender, EventArgs e) - { - Update(); - } + => Update(); private void PressStarted(object sender, EventArgs e) - { - Update(); - } + => Update(); void Update() { - var isLeftPressed = buttonLeft.State; - var isRightPressed = buttonRight.State; - var isUpPressed = buttonUp.State; - var isDownPressed = buttonDown.State; + var isLeftPressed = ButtonLeft.State; + var isRightPressed = ButtonRight.State; + var isUpPressed = ButtonUp.State; + var isDownPressed = ButtonDown.State; var newPosition = GetDigitalPosition(isLeftPressed, isRightPressed, isUpPressed, isDownPressed); From 3b1535f1d3e4346845cc20b3cd3b04d5527cc7c3 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sat, 8 Apr 2023 13:39:02 -0700 Subject: [PATCH 031/141] ANO Navigation Encoder cleanup --- .../Driver/ANONavigationEncoder.Enums.cs | 6 ------ .../Driver/ANONavigationEncoder.cs | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs deleted file mode 100644 index 346f27e26b..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.Enums.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Meadow.Foundation.Sensors.Hid -{ - public partial class ANONavigationEncoder - { - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs index b1429d59cf..160fe6285c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Driver/ANONavigationEncoder.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Sensors.Hid /// /// Represents a ANO Directional Navigation and Scroll Wheel Rotary Encoder /// - public partial class ANONavigationEncoder + public class ANONavigationEncoder { /// /// The directional pad @@ -28,6 +28,15 @@ public partial class ANONavigationEncoder /// /// Create a new ANONavigationEncoder object /// + /// The pin connected to switch 1 (left) + /// The pin connected to switch 2 (down) + /// The pin connected to switch 3 (right) + /// The pin connected to switch 4 (up) + /// The pin connected to switch 5 (center button) + /// Are the switches connected to ground (true) or VCC (false) + /// The pin connected to rotary encoder A + /// The pin connected to rotary encoder B + /// Is the rotary encoder connected to ground (true) or VCC (false)> public ANONavigationEncoder(IPin pinSwitch1, IPin pinSwitch2, IPin pinSwitch3, IPin pinSwitch4, IPin pinSwitch5, bool isSwitchCommonGround, IPin pinEncoderA, IPin pinEncoderB, bool isEncoderCommonGround) { @@ -48,6 +57,13 @@ public ANONavigationEncoder(IPin pinSwitch1, IPin pinSwitch2, IPin pinSwitch3, I /// /// Create a new ANONavigationEncoder object /// + /// The port for switch 1 (left) + /// The port for switch 2 (down) + /// The port for switch 3 (right) + /// The port for switch 4 (up) + /// The port for switch 5 (center buttons) + /// The port for rotary encoder A + /// The port for rotary encoder A public ANONavigationEncoder(IDigitalInputPort portSwitch1, IDigitalInputPort portSwitch2, IDigitalInputPort portSwitch3, From be7c785de2f3310768fcb751380b11ae6420d454 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sat, 8 Apr 2023 13:59:05 -0700 Subject: [PATCH 032/141] Switch a few samples to Feather V2 --- .../Displays.Ch1115/Samples/Ch1115_Sample/MeadowApp.cs | 2 +- .../Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs | 2 +- .../Samples/MiniPID2_Sample/MeadowApp.cs | 2 +- .../Samples/ANONavigationEncoder_Sample/MeadowApp.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/MeadowApp.cs index 90862010c0..2d2d448c9e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Samples/Ch1115_Sample/MeadowApp.cs @@ -6,7 +6,7 @@ namespace Displays.Ch1115_Sample { - public class MeadowApp : App + public class MeadowApp : App { // diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs index 7ad862910f..9e0de1b3c8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs @@ -6,7 +6,7 @@ namespace Displays.Sh1106_Sample { - public class MeadowApp : App + public class MeadowApp : App { // diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs index f10540f033..ea59c52d29 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs @@ -6,7 +6,7 @@ namespace Sensors.Environmental.Ens160_Sample { - public class MeadowApp : App + public class MeadowApp : App { // diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs index 8d84f37ec3..5411443e5b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.ANONavigationEncoder/Samples/ANONavigationEncoder_Sample/MeadowApp.cs @@ -5,7 +5,7 @@ namespace ANONavigationEncoder_Sample { - public class MeadowApp : App + public class MeadowApp : App { ANONavigationEncoder encoder; From eb15a59bd4e569afcc6259dd7a623ab245935c8e Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 9 Apr 2023 15:34:26 -0700 Subject: [PATCH 033/141] Add SH1107 driver plus cleanup --- Meadow.Foundation.sln | 3455 +++++++++++++++++ .../Datasheet/SH1106-SINOWEALTH.pdf | Bin .../Displays.Sh110x/Datasheet/SH1107.pdf | Bin 0 -> 508404 bytes .../Driver/Displays.Sh110x.csproj} | 8 +- .../Displays.Sh110x/Driver/Drivers/Sh1106.cs | 92 + .../Displays.Sh110x/Driver/Drivers/Sh1107.cs | 105 + .../Driver/Sh110x.Enums.cs} | 52 +- .../Driver/Sh110x.cs} | 232 +- .../Samples/Sh1106_Sample/MeadowApp.cs | 48 + .../Sh1106_Sample/Sh1106_Sample.csproj | 2 +- .../Samples/Sh1106_Sample/meadow.config.yaml | 0 .../Samples/Sh1107_Sample/MeadowApp.cs | 53 + .../Sh1107_Sample/Sh1107_Sample.csproj | 20 + .../Samples/Sh1107_Sample/meadow.config.yaml | 2 + .../Driver/Drivers/Ssd1306.cs | 4 +- .../Driver/Drivers/Ssd1309.cs | 4 +- .../Driver/SSd130xBase.Enums.cs | 5 +- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 8 +- Source/Meadow.Foundation.sln | 15 +- 19 files changed, 3994 insertions(+), 111 deletions(-) create mode 100644 Meadow.Foundation.sln rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106 => Displays.Sh110x}/Datasheet/SH1106-SINOWEALTH.pdf (100%) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Datasheet/SH1107.pdf rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106/Driver/Displays.Sh1106.csproj => Displays.Sh110x/Driver/Displays.Sh110x.csproj} (77%) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1106.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106/Driver/Sh1106.Enums.cs => Displays.Sh110x/Driver/Sh110x.Enums.cs} (61%) rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106/Driver/Sh1106.cs => Displays.Sh110x/Driver/Sh110x.cs} (65%) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106 => Displays.Sh110x}/Samples/Sh1106_Sample/Sh1106_Sample.csproj (92%) rename Source/Meadow.Foundation.Peripherals/{Displays.Sh1106 => Displays.Sh110x}/Samples/Sh1106_Sample/meadow.config.yaml (100%) create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml diff --git a/Meadow.Foundation.sln b/Meadow.Foundation.sln new file mode 100644 index 0000000000..08f0b2e2d4 --- /dev/null +++ b/Meadow.Foundation.sln @@ -0,0 +1,3455 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Core.Samples", "Meadow.Foundation.Core.Samples", "{7EBB4434-F29C-4316-BEDC-F28F07CE4AC8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Libraries_and_Frameworks", "Meadow.Foundation.Libraries_and_Frameworks", "{E0384B86-37FC-403C-B1F7-AA5D1B869EB1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Peripherals", "Meadow.Foundation.Peripherals", "{64623FCA-6086-4F0A-A59D-2BF372EA38AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.PiezoSpeaker_Sample", "Meadow.Foundation.Core.Samples\Audio.PiezoSpeaker_Sample\Audio.PiezoSpeaker_Sample.csproj", "{74F47C15-1293-404A-8C92-0F72A3DE7BA7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Led_Sample", "Meadow.Foundation.Core.Samples\Leds.Led_Sample\Leds.Led_Sample.csproj", "{87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.LedBarGraph_Sample", "Meadow.Foundation.Core.Samples\Leds.LedBarGraph_Sample\Leds.LedBarGraph_Sample.csproj", "{3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLed_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLed_Sample\Leds.PwmLed_Sample.csproj", "{90A0ADDA-0CC2-491B-9140-DFE086EA66FC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbLed_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbLed_Sample\Leds.RgbLed_Sample.csproj", "{20A24104-F8EF-4BDD-99F7-145CA63645B0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbPwmLed_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbPwmLed_Sample\Leds.RgbPwmLed_Sample.csproj", "{5C0F8C22-10FB-4D50-B87B-41558A87B30A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motor.HBridgeMotor_Sample", "Meadow.Foundation.Core.Samples\Motor.HBridgeMotor_Sample\Motor.HBridgeMotor_Sample.csproj", "{05896551-6032-48C3-B847-79DEA73D5143}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Relays.Relay_Sample", "Meadow.Foundation.Core.Samples\Relays.Relay_Sample\Relays.Relay_Sample.csproj", "{28967B13-8651-4E28-B1E9-5D99D43DE202}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Buttons.PushButton_Sample", "Meadow.Foundation.Core.Samples\Sensors.Buttons.PushButton_Sample\Sensors.Buttons.PushButton_Sample.csproj", "{2D4A6B45-101D-49F4-B4BD-8A47B8A98098}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Rotary.RotaryEncoder_Sample", "Meadow.Foundation.Core.Samples\Sensors.Rotary.RotaryEncoder_Sample\Sensors.Rotary.RotaryEncoder_Sample.csproj", "{5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Rotary.RotaryEncoderWithButton_Sample", "Meadow.Foundation.Core.Samples\Sensors.Rotary.RotaryEncoderWithButton_Sample\Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj", "{26EC0711-624C-48E1-A4A6-A55FD2249139}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.DipSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.DipSwitch_Sample\Sensors.Switches.DipSwitch_Sample.csproj", "{634CA076-F37B-4700-9FC4-58B1BD490627}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.SpdtSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.SpdtSwitch_Sample\Sensors.Switches.SpdtSwitch_Sample.csproj", "{FD938FD6-64B5-4B12-AD1B-42D4D401486C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.SpstSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.SpstSwitch_Sample\Sensors.Switches.SpstSwitch_Sample.csproj", "{091CF87A-BF50-44B5-BA3A-2D4BFB56E111}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.AnalogTemperature_Sample", "Meadow.Foundation.Core.Samples\Sensors.Temperature.AnalogTemperature_Sample\Sensors.Temperature.AnalogTemperature_Sample.csproj", "{105C53A9-4421-4A54-BF09-533D54BABECC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServoCore", "ServoCore", "{60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Servos.ServoCore", "Meadow.Foundation.Peripherals\Servos.ServoCore\Driver\Servos.ServoCore.csproj", "{FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServoCore_Sample", "Meadow.Foundation.Peripherals\Servos.ServoCore\Samples\ServoCore_Sample\ServoCore_Sample.csproj", "{1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tmp102", "Tmp102", "{92FF91F9-027A-47AC-8315-64547A80F54C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Tmp102", "Meadow.Foundation.Peripherals\Sensors.Temperature.Tmp102\Driver\Sensors.Temperature.Tmp102.csproj", "{E3A79085-41A4-4F86-90D1-8BC4F53FA625}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C31B4F18-78CB-4DC6-A09A-FD00C0303A80}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D5471726-76C5-46DD-9931-6328C6A3D375}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ParallaxPir", "ParallaxPir", "{35210A0B-2366-490B-A186-F8B9965BB89A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1B4327CF-B17A-46C3-A001-D9389E0E391B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.ParallaxPir", "Meadow.Foundation.Peripherals\Sensors.Motion.ParallaxPir\Driver\Sensors.Motion.ParallaxPir.csproj", "{0141F077-F5B1-4134-B513-F3A6FEA8D53A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParallaxPir_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.ParallaxPir\Samples\ParallaxPir_Sample\ParallaxPir_Sample.csproj", "{6711636F-A503-4D2F-AD47-CFB23FBDF484}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mag3110", "Mag3110", "{D4AF8585-D919-4A4E-A41A-400C8E95031C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B80C99F7-CFC0-409B-AFDD-23E2C8775327}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mag3110", "Meadow.Foundation.Peripherals\Sensors.Motion.Mag3110\Driver\Sensors.Motion.Mag3110.csproj", "{02E56C68-5B09-4331-9E5D-7FD9217594F0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpu6050", "Mpu6050", "{A4089518-DBDB-4E12-8A31-D916859259F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mpu6050", "Meadow.Foundation.Peripherals\Sensors.Motion.Mpu6050\Driver\Sensors.Motion.Mpu6050.csproj", "{8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{35BE1129-CB5E-4003-987A-5EE41423EA72}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpu6050_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mpu6050\Samples\Mpu6050_Sample\Mpu6050_Sample.csproj", "{7387C800-5C6C-4AA8-87E8-7FF04DF189F2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bno055", "Bno055", "{AAE72992-84CD-4B91-9736-252D49735D24}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{07F59EFA-8D03-489D-BB05-905C3B0A7699}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Bno055", "Meadow.Foundation.Peripherals\Sensors.Motion.Bno055\Driver\Sensors.Motion.Bno055.csproj", "{94A3A79A-3614-426C-A99C-F1F5CCDC4305}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apds9960", "Apds9960", "{58CE81BF-8BBD-4840-A8D0-DC5C19E23100}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D744EA2C-4534-42ED-B7BB-CC511762C509}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Apds9960", "Meadow.Foundation.Peripherals\Sensors.Motion.Apds9960\Driver\Sensors.Motion.Apds9960.csproj", "{894672CE-285A-40E7-98C7-EEBC530BBF24}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Fc28", "Fc28", "{52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BDBF448A-E9DA-4629-953C-1FADE3817724}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fc28_Sample", "Meadow.Foundation.Peripherals\Sensors.Moisture.Fc28\Samples\Fc28_Sample\Fc28_Sample.csproj", "{C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Capacitive", "Capacitive", "{A9CD1742-A2D0-4346-9007-809FA6EC6F8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A545B814-74FD-4A0E-8BF3-9905C42FB315}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Moisture.Capacitive", "Meadow.Foundation.Peripherals\Sensors.Moisture.Capacitive\Driver\Sensors.Moisture.Capacitive.csproj", "{DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Capacitive_Sample", "Meadow.Foundation.Peripherals\Sensors.Moisture.Capacitive\Samples\Capacitive_Sample\Capacitive_Sample.csproj", "{5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Si1145", "Si1145", "{46752A8C-7971-41E2-8866-4E962EEDC803}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B99DE5A0-FF26-4805-BBB2-2739582191C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Si1145", "Meadow.Foundation.Peripherals\Sensors.Light.Si1145\Driver\Sensors.Light.Si1145.csproj", "{E77A4923-9FBD-471B-B161-DD9AD138313E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Alspt19315C", "Alspt19315C", "{BE6B35AA-5AD4-4D1F-B699-7752FF425A38}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{212F665B-A91A-4DEA-B0CB-E8BA195D8137}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hcsr04", "Hcsr04", "{FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{22F9AB41-151C-41EB-A662-1C155E9B067E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.Hcsr04", "Meadow.Foundation.Peripherals\Sensors.Distance.Hcsr04\Driver\Sensors.Distance.Hcsr04.csproj", "{BB051C9D-49C5-46C5-B8B1-5E459179C761}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hcsr04_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.Hcsr04\Samples\Hcsr04_Sample\Hcsr04_Sample.csproj", "{041FFFB3-926E-471A-9C2B-343311824B30}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpl3115a2", "Mpl3115a2", "{50A0527F-7CFF-40E3-B8C5-1BB915139BA5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D9E26608-83A9-4146-8B06-5CF9EF3E4F7A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Si70xx", "Si70xx", "{BEB54F58-AB14-4030-BA81-746F1D3A34B2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{AEF8B139-CB86-4DB1-944D-2D859C8669DA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Si70xx", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Si70xx\Driver\Sensors.Atmospheric.Si70xx.csproj", "{2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sht31d", "Sht31d", "{E985E479-23A7-4516-837F-256B40C50BF3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6A664586-4544-4427-8FC1-2A8E306BE7A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sht31d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht31D\Driver\Sensors.Atmospheric.Sht31d.csproj", "{81E6E143-8752-45A9-8BDA-C6F4730A7DF1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Htux1d", "Htux1d", "{27F8F5B1-F535-4116-BB16-63454D21D13B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hih6130", "Hih6130", "{91CA9079-8D10-4A3B-AE42-CB49781687C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6416DC2C-DED8-44E7-8783-24EFB7F9C682}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Hih6130", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Hih6130\Driver\Sensors.Atmospheric.Hih6130.csproj", "{5542FE52-8D47-4279-A436-67DB6B1E1E12}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp085", "Bmp085", "{C724C5EE-7972-41DA-9FDB-42416980F25C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A2BBDB4-6130-4C9D-9947-12F39309E8E9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bme280", "Bme280", "{449B29BE-7A04-4A6D-858B-77C8E81415DE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{21C511DD-43DD-486E-86D7-18D8F6810ACD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds1307", "Ds1307", "{D5C58443-E77C-472D-B5A9-FAC05B40334C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{626AAFA5-97ED-47C3-9303-977B1B17F6A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RTCs.Ds1307", "Meadow.Foundation.Peripherals\RTCs.Ds1307\Driver\RTCs.Ds1307.csproj", "{43BE21E0-CA04-4987-A1EE-0E3F5E940C00}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds1307_Sample", "Meadow.Foundation.Peripherals\RTCs.Ds1307\Samples\Ds1307_Sample\Ds1307_Sample.csproj", "{CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds323x", "Ds323x", "{A867D092-9D63-4516-89C7-509B161D331A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C32CCF68-5D86-4337-BF37-4053C7F01848}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RTCs.Ds323x", "Meadow.Foundation.Peripherals\RTCs.Ds323x\Driver\RTCs.Ds323x.csproj", "{225C7669-6CD3-4F24-8F02-5620BF682BF3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "x74595", "x74595", "{371BBDB4-E337-4A66-A132-86C6DA3E4EB4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BA4E26C9-BFF0-48B1-9D53-315F6906AF06}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.x74595", "Meadow.Foundation.Peripherals\ICs.IOExpanders.x74595\Driver\ICs.IOExpanders.x74595.csproj", "{C4E371CD-452B-445D-968A-FA2805A13DEE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp23xxx", "Mcp23xxx", "{240F389E-5109-4266-AE58-04DEAC585F22}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1A91B800-DC03-4199-AE38-4BD57195416F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Mcp23xxx", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Driver\ICs.IOExpanders.Mcp23xxx.csproj", "{E5256D16-2D8E-4A38-913C-863AB9819D53}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ht16k33", "Ht16k33", "{E95B5F1B-244F-4B45-AC8E-B2483DB0C980}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1EB7CD8B-7293-4C4A-9C58-160456BCCB1E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ht16k33", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Driver\ICs.IOExpanders.Ht16k33.csproj", "{15D040E2-2ECC-413B-AA87-6455D7D930A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ht16k33_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Samples\Ht16k33_Sample\Ht16k33_Sample.csproj", "{A431E3A8-471B-4D51-B271-8E614F6E77C6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "At24Cxx", "At24Cxx", "{6BFD3733-D1EF-4AFB-A87E-40BF28076CE7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{671D7B77-DEBE-416D-818D-99411DF479AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.EEPROM.At24Cxx", "Meadow.Foundation.Peripherals\ICs.EEPROM.At24Cxx\Driver\ICs.EEPROM.At24Cxx.csproj", "{8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TftSpi", "TftSpi", "{8CE083A7-B966-4EB5-B139-C3EEF2D53585}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8FB70D12-1111-480B-B64C-B8EB65977F58}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "St7565", "St7565", "{888BC38D-CC4E-4F78-9F4E-488969FD0360}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{94E618B0-5BA2-4436-B1F5-90CE0E0D2293}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.St7565", "Meadow.Foundation.Peripherals\Displays.St7565\Driver\Displays.St7565.csproj", "{7B529C67-B1BF-41A4-8870-42A027ABFBCF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7565_Sample", "Meadow.Foundation.Peripherals\Displays.St7565\Samples\St7565_Sample\St7565_Sample.csproj", "{5574FE78-17B0-4295-9F27-2E4782554102}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ssd130x", "Ssd130x", "{BF341B80-8763-482E-9AF7-5E8DE369ECE1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{FAD4D2B5-D578-413A-B776-5AE1F43D6CFE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pcd8544", "Pcd8544", "{0CD6A482-3CA0-4627-969E-7E27C1AE9352}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6F6FFBD9-7326-4C38-A4A6-C0052212645F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.SevenSegment", "Led.SevenSegment", "{E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6E6E1F6E-8689-4D5C-814F-2A92E63B365F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lcd.CharacterDisplay", "Lcd.CharacterDisplay", "{14A0EE78-5C03-42A4-8BFE-D0FD16764EAF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C4407F01-FE4E-429A-BFF3-F697881F1EEA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CharacterDisplay_Sample", "Meadow.Foundation.Peripherals\Displays.Lcd.CharacterDisplay\Samples\CharacterDisplay_Sample\CharacterDisplay_Sample.csproj", "{45F2287B-5AD9-4E89-8A91-1471AC56005E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ePaper", "ePaper", "{577DDC93-7BC2-4641-AB65-9550EF362682}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{06BFC6F2-9D39-46B2-8E9B-A2204481EED2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.ePaper", "Meadow.Foundation.Peripherals\Displays.ePaper\Driver\Displays.ePaper.csproj", "{5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Radio.Tea5767", "Radio.Tea5767", "{DB7564E3-703D-4358-8CB0-FA80CFB69101}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4242C2C7-8B81-41D4-A716-D717B6424C50}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Mpl3115a2", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Mpl3115a2\Driver\Sensors.Atmospheric.Mpl3115a2.csproj", "{7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpl3115a2_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Mpl3115a2\Samples\Mpl3115a2_Sample\Mpl3115a2_Sample.csproj", "{BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apds9960_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Apds9960\Samples\Apds9960_Sample\Apds9960_Sample.csproj", "{B148426F-25BD-4632-9307-E9EC36063D0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sht31d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht31d\Samples\Sht31d_Sample\Sht31d_Sample.csproj", "{51B930DB-5D89-417E-A78F-4A365CAA17D2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Moisture.Fc28", "Meadow.Foundation.Peripherals\Sensors.Moisture.Fc28\Driver\Sensors.Moisture.Fc28.csproj", "{5B8B4327-8936-4AC1-B77D-1D219A897ECF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stepper.Uln2003", "Stepper.Uln2003", "{33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tm1637", "Tm1637", "{9268BC85-F6BC-46F7-A101-A26920A87DF2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{65A2B794-E5FB-4234-A174-D1CED2DD9E4F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vc0706", "Vc0706", "{8749617F-D55A-4C44-815A-FD55FFDA3891}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{118CB5F4-F864-49B8-B43B-28FBD23AD02F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Max7219", "Max7219", "{E51E4E02-C3B8-456B-917C-E5200E062E4E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8AA8CB22-1E97-463D-863F-484236E1C24C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5DA778E0-E827-4A63-844B-1166BEEB8897}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLed_Onboard_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLed_Onboard_Sample\Leds.PwmLed_Onboard_Sample.csproj", "{62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbPwmLed_Onboard_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbPwmLed_Onboard_Sample\Leds.RgbPwmLed_Onboard_Sample.csproj", "{345A5215-F14F-41AB-844B-9445EE657A1D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.AnalogJoystick_Sample", "Meadow.Foundation.Core.Samples\Sensors.Hid.AnalogJoystick_Sample\Sensors.Hid.AnalogJoystick_Sample.csproj", "{50D09365-81F0-4313-A7AF-F2CD76DE4998}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Lcd.CharacterDisplay", "Meadow.Foundation.Peripherals\Displays.Lcd.CharacterDisplay\Driver\Displays.Lcd.CharacterDisplay.csproj", "{C6178701-C96F-4929-A255-396A7F7F8483}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_External", "_External", "{65C50059-6C22-43E9-88DE-AD73F7F108C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bno055_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Bno055\Samples\Bno055_Sample\Bno055_Sample.csproj", "{20861022-699D-4FA2-A92A-05BC0188D25A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Si1145_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Si1145\Samples\Si1145_Sample\Si1145_Sample.csproj", "{4210A31C-77B0-4550-BEC4-F3D4CE337DCA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Alspt19315C_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Alspt19315C\Samples\Alspt19315C_Sample\Alspt19315C_Sample.csproj", "{6B108EA4-4F81-4A4A-9216-860208940FE5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Alspt19315C", "Meadow.Foundation.Peripherals\Sensors.Light.Alspt19315C\Driver\Sensors.Light.Alspt19315C.csproj", "{F036224F-8ECB-497F-BC49-355BC4C094B0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hih6130_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Hih6130\Samples\Hih6130_Sample\Hih6130_Sample.csproj", "{EF135479-CBF6-4E03-B6EB-55EA850946A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp085", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Driver\Sensors.Atmospheric.Bmp085.csproj", "{728ECF00-EB02-4981-87F9-A72A163DB93C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme280_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Samples\Bme280_Sample\Bme280_Sample.csproj", "{59EED95C-1CA7-466C-853C-BF14E1EF43A9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bme280", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Driver\Sensors.Atmospheric.Bme280.csproj", "{D94618E1-D812-4CFF-B539-54AE9559F827}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9341_Jpg_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9341_Jpg_Sample\Ili9341_Jpg_Sample.csproj", "{A5F4A75B-20F6-4CDF-B986-635081894E43}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9163_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9163_Sample\Ili9163_Sample.csproj", "{514EA28E-1527-4F9E-A0F5-33C3BE3DF417}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9341_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9341_Sample\Ili9341_Sample.csproj", "{E9B8729A-7525-4EB3-86F0-50E88C504AE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1351_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\SSD1351_Sample\SSD1351_Sample.csproj", "{41FF7FB1-FDE1-4229-A307-06C25CF91520}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST7789_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\ST7789_Sample\ST7789_Sample.csproj", "{19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.TftSpi", "Meadow.Foundation.Peripherals\Displays.TftSpi\Driver\Displays.TftSpi.csproj", "{24568129-061F-4A1E-B1CF-81B9F197EE58}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1306_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1306_Sample\Ssd1306_Sample.csproj", "{16CFD509-CEA6-4038-B504-5C026C2A464F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ssd130x", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Driver\Displays.Ssd130x.csproj", "{7F69F8CB-5C1A-461B-90FC-360367CD65CF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pcd8544_Sample", "Meadow.Foundation.Peripherals\Displays.Pcd8544\Samples\Pcd8544_Sample\Pcd8544_Sample.csproj", "{E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Pcd8544", "Meadow.Foundation.Peripherals\Displays.Pcd8544\Driver\Displays.Pcd8544.csproj", "{2F25E1D4-D167-4681-9C27-161FB18A895D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SevenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SevenSegment\Samples\SevenSegment_Sample\SevenSegment_Sample.csproj", "{5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SevenSegment", "Meadow.Foundation.Peripherals\Displays.Led.SevenSegment\Driver\Displays.Led.SevenSegment.csproj", "{18FCBDEA-3530-4D00-A339-D2255DBD6B2E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0373_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0373_Sample\IL0373_Sample.csproj", "{01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.Radio.Tea5767", "Meadow.Foundation.Peripherals\Audio.Radio.Tea5767\Driver\Audio.Radio.Tea5767.csproj", "{A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uln2003_Sample", "Meadow.Foundation.Peripherals\Motors.Stepper.Uln2003\Samples\Uln2003_Sample\Uln2003_Sample.csproj", "{7B874567-3F96-488D-8FC1-B79479CDE7C2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Stepper.Uln2003", "Meadow.Foundation.Peripherals\Motors.Stepper.Uln2003\Driver\Motors.Stepper.Uln2003.csproj", "{4E60FE13-67F0-493A-853A-9A0076499506}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tm1637_Sample", "Meadow.Foundation.Peripherals\Displays.Tm1637\Samples\Tm1637_Sample\Tm1637_Sample.csproj", "{A9FBA69F-9638-4F16-B764-30FE77E3BA6D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Tm1637", "Meadow.Foundation.Peripherals\Displays.Tm1637\Driver\Displays.Tm1637.csproj", "{EDAAD136-DEE3-4318-82C6-5C8193E0414E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.Vc0706", "Meadow.Foundation.Peripherals\Sensors.Camera.Vc0706\Driver\Sensors.Camera.Vc0706.csproj", "{C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_7Segment_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_Sample\Max7219_7Segment_Sample.csproj", "{ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Max7219", "Meadow.Foundation.Peripherals\Displays.Max7219\Driver\Displays.Max7219.csproj", "{F917BD5A-7837-4F57-84D6-5C15816DA8DE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0376F_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0376F_Sample\IL0376F_Sample.csproj", "{0E43828B-2319-4FB1-A7ED-C93081DB5C45}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0398_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0398_Sample\IL0398_Sample.csproj", "{C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL3897_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL3897_Sample\IL3897_Sample.csproj", "{B0C30615-C3E6-446E-9AA2-390C9FE3B209}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL91874_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL91874_Sample\IL91874_Sample.csproj", "{ED38C115-9592-4049-A654-8C575676F17D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL91874V03_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL91874V03_Sample\IL91874V03_Sample.csproj", "{B764CA55-C9A4-4794-967A-051D45D9FDB0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1608_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1608_Sample\SSD1608_Sample.csproj", "{74E97580-8847-45D5-B12B-82409B56E709}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Temt6000", "Temt6000", "{606456FE-9938-47EB-9327-001915575421}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3DAA8F7C-7F99-4515-9467-CC88D1D92145}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Temt6000", "Meadow.Foundation.Peripherals\Sensors.Light.Temt6000\Driver\Sensors.Light.Temt6000.csproj", "{CC00EF84-5144-4FFC-B194-56086D47BFAB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Temt6000_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Temt6000\Samples\Temt6000_Sample\Temt6000_Sample.csproj", "{E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds323x_Sample", "Meadow.Foundation.Peripherals\RTCs.Ds323x\Samples\Ds323x_Sample\Ds323x_Sample.csproj", "{A059BFE2-87FD-482C-B1DC-5C8023C79DA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "At24Cxx_Sample", "Meadow.Foundation.Peripherals\ICs.EEPROM.At24Cxx\Samples\At24Cxx_Sample\At24Cxx_Sample.csproj", "{9AF786F5-B6CA-490B-9926-2CCA9CFF1431}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ms5611", "Ms5611", "{3FF07962-C887-495B-9B0E-EA2313B1F4AE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Ms5611", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ms5611\Driver\Sensors.Atmospheric.Ms5611.csproj", "{8C890579-33B9-4DE8-98B4-52B3E5893F8C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8D88D2E1-5DD8-4C59-AE7A-F269F537AC05}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ms5611_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ms5611\Samples\Ms5611_Sample\Ms5611_Sample.csproj", "{5EC99271-9105-42BF-B347-69EA5376D305}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ags01Db", "Ags01Db", "{0479C1FF-33D0-4315-9846-8031661C6707}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Ags01Db", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ags01Db\Driver\Sensors.Environmental.Ags01Db.csproj", "{1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_8x8x4_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_8x8x4_Sample\Max7219_8x8x4_Sample.csproj", "{AD8951D6-7AF1-40DB-92FE-4517E538E57C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1750", "Bh1750", "{048BE18B-E895-459D-8041-6DADD6FAB130}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Bh1750", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1750\Driver\Sensors.Light.Bh1750.csproj", "{5E7E1C26-2260-4E32-BABB-0083DE286AC4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6252AD84-1611-4B1B-BD3D-2D970D51461A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1750_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1750\Samples\Bh1750_Sample\Bh1750_Sample.csproj", "{8C763585-70E5-4D99-B133-929F9B41645A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1745", "Bh1745", "{1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Bh1745", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1745\Driver\Sensors.Light.Bh1745.csproj", "{FE5C2C05-5CE4-49E1-857F-626A32882D3B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1745_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1745\Samples\Bh1745_Sample\Bh1745_Sample.csproj", "{124BD439-325D-43CA-B829-F39EE332B3F7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp180", "Bmp180", "{E91B1973-3022-4231-879D-D8F9E2ABE14C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5A65EF5B-99A7-415E-928B-14F05BEBD31F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp180", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp180\Driver\Sensors.Atmospheric.Bmp180.csproj", "{54512143-15FA-4A68-B54D-FEFE15AC41D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmp180_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp180\Samples\Bmp180_Sample\Bmp180_Sample.csproj", "{0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmp085_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Samples\Bmp085_Sample\Bmp085_Sample.csproj", "{A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "x74595_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.x74595\Samples\x74595_Sample\x74595_Sample.csproj", "{DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dhtxx", "Dhtxx", "{6C716EDD-C29C-47F5-8366-28FC209E06E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Dhtxx", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Driver\Sensors.Atmospheric.Dhtxx.csproj", "{A50E7383-8111-4516-B76E-E4133242B835}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{109B0BE9-7083-4473-B528-25425CA84E76}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dht12_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Samples\Dht12_Sample\Dht12_Sample.csproj", "{9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hcsens0040", "Hcsens0040", "{75E65F82-D53E-4C41-81DE-57950C05900E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D78EB96C-0105-4D6A-A34D-BD271912617E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Hcsens0040", "Meadow.Foundation.Peripherals\Sensors.Motion.Hcsens0040\Driver\Sensors.Motion.Hcsens0040.csproj", "{D162B2AE-0343-4257-ABF3-E501DB6CB549}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hcsens0040_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hcsens0040\Samples\Hcsens0040_Sample\Hcsens0040_Sample.csproj", "{DA828BA9-E57F-4579-B6B0-55910247408F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ina260", "Ina260", "{18BD90D6-3D88-44A4-A366-134D12F3F823}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Power.Ina260", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Driver\Sensors.Power.Ina260.csproj", "{9B4196EC-9485-43FB-B579-C2E50D0E9A3F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina260_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Samples\Ina260_Sample\Ina260_Sample.csproj", "{22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tsl2591", "Tsl2591", "{C453850E-43AD-4AE5-82F1-76E0168E7260}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{882011AD-05A3-43F9-9B64-2032982948D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Tsl2591", "Meadow.Foundation.Peripherals\Sensors.Light.Tsl2591\Driver\Sensors.Light.Tsl2591.csproj", "{267DBD91-4ABE-4B34-A788-32EC7B34B4FE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tsl2591_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Tsl2591\Samples\Tsl2591_Sample\Tsl2591_Sample.csproj", "{F151BE23-5AB3-488F-B332-FD851BFF4E24}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1309_Game_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1309_Game_Sample\Ssd1309_Game_Sample.csproj", "{F5596859-93D3-41D0-8988-FFA24F4A2152}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hmc5883", "Hmc5883", "{ED862B12-EBF8-49BB-8F2A-01760F6D60E7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Hmc5883", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Driver\Sensors.Motion.Hmc5883.csproj", "{A229CA2F-6218-44ED-A871-BC4033D23025}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D07E813A-1685-444B-8DB1-6FFD71B53E21}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hmc5883_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Samples\Hmc5883_Sample\Hmc5883_Sample.csproj", "{F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Max44009", "Max44009", "{736DBD67-A8CB-4D56-90A7-936F3A62EC2A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Max44009", "Meadow.Foundation.Peripherals\Sensors.Light.Max44009\Driver\Sensors.Light.Max44009.csproj", "{F15B5202-B450-4C93-9EDE-1BC0BB1D780E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3BB43F5A-E05D-4E59-9ACE-053C60608E33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max44009_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Max44009\Samples\Max44009_Sample\Max44009_Sample.csproj", "{466BAAFF-79D5-47D0-8A61-71EED9E94B17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1039_3DCube_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1039_3DCube_Sample\Ssd1039_3DCube_Sample.csproj", "{2B3D4217-C4E9-42C0-853F-0181BC75CE55}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lm75", "Lm75", "{28CDEEE6-8998-4ADE-98D0-863CE249B5CF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Lm75", "Meadow.Foundation.Peripherals\Sensors.Temperature.Lm75\Driver\Sensors.Temperature.Lm75.csproj", "{CBA9FB82-F61D-48ED-9037-293853C1CC29}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{687390CC-01CC-4D86-B21F-F22F262106C1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lm75_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Lm75\Samples\Lm75_Sample\Lm75_Sample.csproj", "{3E532ECC-8E02-4BAE-9606-6A1007DD24B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23x08_Input_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23x08_Input_Sample\Mcp23x08_Input_Sample.csproj", "{1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Veml7700", "Veml7700", "{A7FC5090-631A-4580-8E00-06A658482C23}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{085AE7C1-E8BB-4564-8473-392EBBB835B3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Veml7700", "Meadow.Foundation.Peripherals\Sensors.Light.Veml7700\Driver\Sensors.Light.Veml7700.csproj", "{6035BA5E-4E7E-40FD-8509-70C86798CA56}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Veml7700_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Veml7700\Samples\Veml7700_Sample\Veml7700_Sample.csproj", "{02CE4043-C061-4551-B3F2-E17E6C889814}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_8x8x4x2_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_8x8x4x2_Sample\Max7219_8x8x4x2_Sample.csproj", "{6B7D5CB4-30B3-49BF-B815-C43FECBC6291}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pca9685", "Pca9685", "{2912CE2F-D76A-4F4B-8E11-CA622E6389E6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Pca9685", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Pca9685\Driver\ICs.IOExpanders.Pca9685.csproj", "{081252D3-4986-4559-81B2-F39F9E0C50B1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3A5ED925-1747-4373-9A2A-F1CCB29BB53A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pca9685_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Pca9685\Samples\Pca9685_Sample\Pca9685_Sample.csproj", "{10AD62E8-B3EB-4C38-BA77-C75482EF9082}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.HallEffect_Sample", "Meadow.Foundation.Core.Samples\Sensors.HallEffect_Sample\Sensors.HallEffect_Sample.csproj", "{F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vl53l0x", "Vl53l0x", "{D1DD2BC2-1100-4037-A571-FF8545CFCBAD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.Vl53l0x", "Meadow.Foundation.Peripherals\Sensors.Distance.Vl53l0x\Driver\Sensors.Distance.Vl53l0x.csproj", "{E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{89C8FCEF-B6F5-4B9D-9010-F224262BD28A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vl53l0x_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.Vl53l0x\Samples\Vl53l0x_Sample\Vl53l0x_Sample.csproj", "{FFA23527-1265-4CC8-931D-E0882D76C8C3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rfid.IDxxLA", "Rfid.IDxxLA", "{0C05F31F-FB0F-4CFB-8CCC-665565434936}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{713F4271-0407-4AE0-B982-DE22A0D0857E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Radio.Rfid.IDxxLA", "Meadow.Foundation.Peripherals\Sensors.Radio.Rfid.IDxxLA\Driver\Sensors.Radio.Rfid.IDxxLA.csproj", "{DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Is31fl3731", "Is31fl3731", "{723D465E-39AA-4297-971E-3871EF832398}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Is31fl3731", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Is31fl3731\Driver\ICs.IOExpanders.Is31fl3731.csproj", "{02318A44-AD0C-4656-B601-1EE9575B0E79}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A110CB79-CF10-485F-95DA-678A983A030B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Is31fl3731_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Is31fl3731\Samples\Is31fl3731_Sample\Is31fl3731_Sample.csproj", "{30A8F1D0-BB6C-486C-AC6B-92EC1551983A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7735_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\St7735_Sample\St7735_Sample.csproj", "{7E466C3D-9630-4F98-BABC-43F23716B434}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLedBarGraph_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLedBarGraph_Sample\Leds.PwmLedBarGraph_Sample.csproj", "{3AC2D665-8360-4367-9606-F633CA743C9E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mt3339", "Mt3339", "{F07E7336-995C-465C-9F5F-BC19FE7BD5F5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F5BE2CAF-E124-40A4-8C07-A2023C959B84}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mt3339_Sample", "Meadow.Foundation.Peripherals\Sensors.Gnss.Mt3339\Samples\Mt3339_Sample\Mt3339_Sample.csproj", "{1372483D-0BE9-4A52-9BDC-75A15120279F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Gnss.Mt3339", "Meadow.Foundation.Peripherals\Sensors.Gnss.Mt3339\Driver\Sensors.Gnss.Mt3339.csproj", "{F0970BBA-CC73-4639-BC29-96A571D7BA36}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tmp102_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Tmp102\Samples\Tmp102_Sample\Tmp102_Sample.csproj", "{B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mlx90640", "Mlx90640", "{F76AEAC3-F902-430D-9E6C-52CB6110AA4E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.Mlx90640", "Meadow.Foundation.Peripherals\Sensors.Camera.Mlx90640\Driver\Sensors.Camera.Mlx90640.csproj", "{78A63BD8-D52B-4514-8FEE-9A03C0B74023}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apa102", "Apa102", "{78EABAC3-0248-4802-9C01-5A00E84B85C5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Apa102", "Meadow.Foundation.Peripherals\Leds.Apa102\Driver\Leds.Apa102.csproj", "{04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apa102_Sample", "Meadow.Foundation.Peripherals\Leds.Apa102\Samples\Apa102_Sample\Apa102_Sample.csproj", "{5172C617-0E49-40FD-8579-1DC41AF03EE1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stepper.A4988", "Stepper.A4988", "{2F106C24-1825-4C6F-8581-0B8ED871CD80}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B7DF35D6-7124-40D5-A219-82894CD0ACD3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Stepper.A4988", "Meadow.Foundation.Peripherals\Motors.Stepper.A4988\Driver\Motors.Stepper.A4988.csproj", "{3BA971E2-D89E-41B8-9C29-89F256B7E873}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "A4988_Sample", "Meadow.Foundation.Peripherals\Motors.Stepper.A4988\Samples\A4988_Sample\A4988_Sample.csproj", "{A3935804-D2A7-4195-AF7D-A62A858E7D39}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nau7802", "Nau7802", "{AA8BDD23-315D-4784-93D2-12E7EB577675}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{481EEB00-F764-4ACB-B9EC-0611C6750CCB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.LoadCell.Nau7802", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Nau7802\Driver\Sensors.LoadCell.Nau7802.csproj", "{79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nau7802_Sample", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Nau7802\Samples\Nau7802_Sample\Nau7802_Sample.csproj", "{E1829984-508F-4BED-A11D-E43624064DFD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ky038", "Ky038", "{C1D6A7E4-A0AF-4841-92A0-FA930628E396}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{0507CBD7-CA15-4DFB-8B40-80743C3BF7AE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Sound.Ky038", "Meadow.Foundation.Peripherals\Sensors.Sound.Ky038\Driver\Sensors.Sound.Ky038.csproj", "{F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ky038_Sample", "Meadow.Foundation.Peripherals\Sensors.Sound.Ky038\Samples\Ky038_Sample\Ky038_Sample.csproj", "{E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourDigitSevenSegment", "Led.FourDigitSevenSegment", "{A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{96550752-20E4-475E-80AF-9426C6560D1A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.FourDigitSevenSegment", "Meadow.Foundation.Peripherals\Displays.Led.FourDigitSevenSegment\Driver\Displays.Led.FourDigitSevenSegment.csproj", "{569397A1-B0BA-4B96-9E6A-00D16FF16FBB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FourDigitSevenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.FourDigitSevenSegment\Samples\FourDigitSevenSegment_Sample\FourDigitSevenSegment_Sample.csproj", "{1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hx711", "Hx711", "{14B5E5E4-AD33-48F7-8371-28E91C52EB6C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B108EB73-C0E6-4B16-96C8-29BD619D8717}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.LoadCell.Hx711", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Hx711\Driver\Sensors.LoadCell.Hx711.csproj", "{59184098-467E-47D5-A738-E4792F09079C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx711_Sample", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Hx711\Samples\Hx711_Sample\Hx711_Sample.csproj", "{EA78E753-FAB5-4279-B9D5-2E7324D110F2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpr121", "Mpr121", "{3354B893-1DDF-4E80-BCB9-279A370734D1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B12E28B5-B206-43CC-8597-E0D013EB3889}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Mpr121", "Meadow.Foundation.Peripherals\Sensors.Hid.Mpr121\Driver\Sensors.Hid.Mpr121.csproj", "{F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpr121_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.Mpr121\Samples\Mpr121_Sample\Mpr121_Sample.csproj", "{FF019156-8C03-4D25-9D83-ED668F501321}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{184472CA-143C-4628-BA38-E901C7863E7C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vc0706_Sample", "Meadow.Foundation.Peripherals\Sensors.Camera.Vc0706\Samples\Vc0706_Sample\Vc0706_Sample.csproj", "{A73E7975-989F-4416-B531-C3CC4D25D175}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mp3.Yx5300", "Mp3.Yx5300", "{36D998D7-9685-497E-8B92-2FD429D27B99}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.Mp3.Yx5300", "Meadow.Foundation.Peripherals\Audio.Mp3.Yx5300\Driver\Audio.Mp3.Yx5300.csproj", "{D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CF493B2A-679A-44E9-ABB7-B9CD9AF44450}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yx5300_Sample", "Meadow.Foundation.Peripherals\Audio.Mp3.Yx5300\Samples\Yx5300_Sample\Yx5300_Sample.csproj", "{A447201E-D3E7-47C0-8E87-A919A272FCB1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bme68x", "Bme68x", "{10C3DA72-29FA-4BF7-B2D5-EABF25879E92}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{01926B24-03D6-4ACC-ABB7-FF90E5861557}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bme68x", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Driver\Sensors.Atmospheric.Bme68x.csproj", "{12449481-3CDD-446F-8968-5816E65F62F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme680_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Samples\Bme680_Sample\Bme680_Sample.csproj", "{0C1F063F-1C44-450D-90FC-A9A95AA03B97}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AdafruitMPRLS", "AdafruitMPRLS", "{203EF7C7-F76D-4004-9472-A7AAAA581C6E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4B15C7E3-990E-4427-A7A7-842410E30B86}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.AdafruitMPRLS", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.AdafruitMPRLS\Driver\Sensors.Atmospheric.AdafruitMPRLS.csproj", "{BADF052D-108C-4E33-A96F-B4F8B42B8F5B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ssd1327", "Ssd1327", "{4F04D404-22A8-499F-B22D-6C85D327A5A9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9311C387-6BF3-40AD-8A12-8E2FF66B36CD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ssd1327", "Meadow.Foundation.Peripherals\Displays.Ssd1327\Driver\Displays.Ssd1327.csproj", "{A40738A5-9C8D-4E7C-ADB6-83E9741F958E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1327_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd1327\Samples\Ssd1327_Sample\Ssd1327_Sample.csproj", "{7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx8357d_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Hx8357d_Sample\Hx8357d_Sample.csproj", "{CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx8357b_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Hx8357b_Sample\Hx8357b_Sample.csproj", "{FEF77B5A-1A66-477F-8E52-FB7812F33B84}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mag3110_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mag3110\Samples\Mag3110_Sample\Mag3110_Sample.csproj", "{239BAFE1-CBF5-49B6-AC92-A5B77D846717}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.SensorReading", "DataLoggers.SensorReading", "{C1361C6F-D933-4A99-919D-5644B9E1BC9A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{D47B0BF3-B61F-4F83-BD73-3E749DFD470C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.AdafruitIO", "DataLoggers.AdafruitIO", "{9E466827-2772-47B4-B64D-8ADB1C0DE70B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{1B14DD12-262C-407A-9CCD-09E03DFE08B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.AdafruitIO", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.AdafruitIO\Driver\DataLoggers.AdafruitIO.csproj", "{7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.ThingSpeak", "DataLoggers.ThingSpeak", "{A47BEE72-D1FA-4F02-96E1-84A70D7142B0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{3C7605E8-136C-4282-B773-80C18021F73B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.ThingSpeak", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.ThingSpeak\Driver\DataLoggers.ThingSpeak.csproj", "{7E97BEAE-FC4E-480F-8D7A-A7960A553129}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors.Location.Gnss.NmeaProcessor", "Sensors.Location.Gnss.NmeaProcessor", "{23E4CD22-3FBE-415D-B16A-C661CB784C0D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{23CAD9E3-4913-4CC0-93DF-91494B3CFC44}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{17E22697-CB77-4F38-AB13-BBDBD53B7829}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Graphics.MicroGraphics", "Graphics.MicroGraphics", "{7EDC253C-2B62-4444-B406-CC4786B93C47}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{B9C34E27-85BD-457D-B2CF-CA289979ED6C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{0BB488AA-E23E-4697-BBD9-4A17B21BFCD7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.MicroGraphics", "Meadow.Foundation.Libraries_and_Frameworks\Graphics.MicroGraphics\Driver\Graphics.MicroGraphics.csproj", "{13E39D67-ED46-4B2A-B66E-5B2415B5278C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Displays.TextDisplayMenu", "Displays.TextDisplayMenu", "{A363CC05-9B58-4231-9FB6-188F0FEF6AF0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.TextDisplayMenu", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Driver\Displays.TextDisplayMenu.csproj", "{C962A8DB-8D12-4B36-B22B-9B938565ABF7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextDisplayMenu_GameMenu_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Samples\TextDisplayMenu_GameMenu_Sample\TextDisplayMenu_GameMenu_Sample.csproj", "{F52EFDBF-3467-4068-8BE1-E94643ADE23B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextDisplayMenu_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Samples\TextDisplayMenu_Sample\TextDisplayMenu_Sample.csproj", "{931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tb67h420ftg", "Tb67h420ftg", "{C6103552-7010-4353-9369-F6545D6A4E7B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B59A3D0E-89B2-484E-A2CC-AD7FC433F99A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Tb67h420ftg", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Driver\Motors.Tb67h420ftg.csproj", "{8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindVane", "WindVane", "{D0C77B85-A3C1-41DC-B95B-EEC141CADA00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.WindVane", "Meadow.Foundation.Peripherals\Sensors.Weather.WindVane\Driver\Sensors.Weather.WindVane.csproj", "{6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Foundation.Core", "Meadow.Foundation.Core\Meadow.Foundation.Core.csproj", "{A237BE35-0618-4B9B-A409-A3AC22053B53}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp9808", "Mcp9808", "{B71872DC-C58D-41A7-B24F-78D8136EE49E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{17A4EBF1-A1F8-475F-A304-A9B7F7B58C82}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Mcp9808", "Meadow.Foundation.Peripherals\Sensors.Temperature.Mcp9808\Driver\Sensors.Temperature.Mcp9808.csproj", "{99621A27-6E31-4D71-A395-FEB610337646}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp9808_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Mcp9808\Samples\Mcp9808_Sample\Mcp9808_Sample.csproj", "{F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SwitchingAnemometer", "SwitchingAnemometer", "{4D8E9D80-2108-4564-8B0A-D5DCEB4723C0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{970D9570-A24B-4329-A888-F8DE9199A600}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ElectronicSpeedController", "ElectronicSpeedController", "{36346C46-BCCE-46D5-964F-E2A71EFD9CA2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.ElectronicSpeedController", "Meadow.Foundation.Peripherals\Motors.ElectronicSpeedController\Driver\Motors.ElectronicSpeedController.csproj", "{F3499920-32A2-4E5E-9D9E-4D04B7399C49}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tca9548a", "Tca9548a", "{F0351FC4-759D-4CFE-8995-4C280771E369}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Tca9548a", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Tca9548a\Driver\ICs.IOExpanders.Tca9548a.csproj", "{F6824EF1-9F19-4727-8D35-E63AC59F816F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.SwitchingAnemometer", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingAnemometer\Driver\Sensors.Weather.SwitchingAnemometer.csproj", "{82980954-71E5-48CE-BA13-00B841707B04}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ccs811", "Ccs811", "{8A5A02DE-D320-489F-86D9-278022BDFE00}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Ccs811", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ccs811\Driver\Sensors.Atmospheric.Ccs811.csproj", "{FDA130ED-6502-4357-BB48-A6C080BDB511}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A857BC05-B321-4E1F-8FB9-CAA9BE65118B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ccs811_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ccs811\Samples\Ccs811_Sample\Ccs811_Sample.csproj", "{D4CA169B-7E84-4AE3-BE82-F232277D4CD4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Buttons.PushButton_BasicSample", "Meadow.Foundation.Core.Samples\Sensors.Buttons.PushButton_BasicSample\Sensors.Buttons.PushButton_BasicSample.csproj", "{2FFEB068-12D2-4EF6-B3CE-767F2E223177}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AnalogSolarIntensityGauge", "AnalogSolarIntensityGauge", "{A4871FEF-60ED-4BB1-B03C-C149D297A2D7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.AnalogSolarIntensityGauge", "Meadow.Foundation.Peripherals\Sensors.Light.AnalogSolarIntensityGauge\Driver\Sensors.Light.AnalogSolarIntensityGauge.csproj", "{91D22CEA-4C96-4643-B486-6ED49FA1124D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tca9548a_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Tca9548a\Samples\Tca9548a_Sample\Tca9548a_Sample.csproj", "{223CF15A-83B8-4E43-9645-50D45D9470A5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{40E200ED-D7B8-4FFD-B4FC-753E56DA831E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Adxl3xx", "Adxl3xx", "{4E23D21F-8827-4F6B-BA35-C8FE4457027C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Adxl3xx", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Driver\Sensors.Motion.Adxl3xx.csproj", "{2F78C85C-A670-4795-8435-5B4CAF5C05F2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1681_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1681_Sample\SSD1681_Sample.csproj", "{B7A42999-EA3D-4A03-BFB6-72CBEDD42266}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gc9a01_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Gc9a01_Sample\Gc9a01_Sample.csproj", "{3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9481_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9481_Sample\Ili9481_Sample.csproj", "{CD2D9129-08F4-4B97-91E9-DBA857EAFE63}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9486_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9486_Sample\Ili9486_Sample.csproj", "{D320C6B3-23A8-4D7E-A9EB-75E15E788191}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9488_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9488_Sample\Ili9488_Sample.csproj", "{376F896D-DB61-471D-8911-98609A9D1612}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rm68140_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Rm68140_Sample\Rm68140_Sample.csproj", "{402F9677-CCA1-4ED9-872A-9F09D15BC626}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "S6D02A1_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\S6D02A1_Sample\S6D02A1_Sample.csproj", "{072B7F1E-3207-42F6-A55F-EF004D793304}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1309_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1309_Sample\Ssd1309_Sample.csproj", "{AC2E5FB5-5E60-4D95-9281-29153C3065C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronicSpeedController_Sample", "Meadow.Foundation.Peripherals\Motors.ElectronicSpeedController\Samples\ElectronicSpeedController_Sample\ElectronicSpeedController_Sample.csproj", "{0675BC5E-E2F5-45D8-8484-13D3A0694B31}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tb67h420ftg_Encoder_Sample", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Samples\Tb67h420ftg_Encoder_Sample\Tb67h420ftg_Encoder_Sample.csproj", "{38B25115-B6FF-49EC-BDE8-26C9416CCE5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tb67h420ftg_Sample", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Samples\Tb67h420ftg_Sample\Tb67h420ftg_Sample.csproj", "{2D765C12-335D-4663-A8A3-48C7B45E9F95}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdafruitMPRLS_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.AdafruitMPRLS\Samples\AdafruitMPRLS_Sample\AdafruitMPRLS_Sample.csproj", "{270770CD-BE88-4FFA-98DA-9171B39199C9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Si70xx_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Si70xx\Samples\Si70xx_Sample\Si70xx_Sample.csproj", "{1D874861-3573-4CA1-B61D-5FE9224934ED}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mlx90640_Sample", "Meadow.Foundation.Peripherals\Sensors.Camera.Mlx90640\Samples\Mlx90640_Sample\Mlx90640_Sample.csproj", "{6F2BB265-1CDD-46AB-9128-7CE3BAC71666}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ags01Db_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ags01Db\Samples\Ags01Db_Sample\Ags01Db_Sample.csproj", "{E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwitchingAnemometer_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingAnemometer\Samples\SwitchingAnemometer_Sample\SwitchingAnemometer_Sample.csproj", "{9365F114-A7B5-4F38-A089-EE8DF13C4F9D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WindVane_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.WindVane\Samples\WindVane_Sample\WindVane_Sample.csproj", "{206850DF-E549-4AA4-AF42-F00B762E20FE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl335_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl335_Sample\Adxl335_Sample.csproj", "{CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl337_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl337_Sample\Adxl337_Sample.csproj", "{245DC3F9-953F-41D6-86F9-7945B640A923}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl345_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl345_Sample\Adxl345_Sample.csproj", "{CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl362_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl362_Sample\Adxl362_Sample.csproj", "{FE597532-2349-4851-A399-DBC5D37126BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl377_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl377_Sample\Adxl377_Sample.csproj", "{86291CCC-A5B8-427E-A68C-F75AE14F295A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.AnalogWaterLevel_Sample", "Meadow.Foundation.Core.Samples\Sensors.Environmental.AnalogWaterLevel_Sample\Sensors.Environmental.AnalogWaterLevel_Sample.csproj", "{5224C344-5797-4D05-A4AA-835E576F6B9D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tea5767_Sample", "Meadow.Foundation.Peripherals\Audio.Radio.Tea5767\Samples\Tea5767_Sample\Tea5767_Sample.csproj", "{A231D471-D435-43BE-BDAE-DBC14BC6CCE8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IDxxLA_Sample", "Meadow.Foundation.Peripherals\Sensors.Radio.Rfid.IDxxLA\Samples\IDxxLA_Sample\IDxxLA_Sample.csproj", "{55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnalogSolarIntensityGauge_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.AnalogSolarIntensityGauge\Samples\AnalogSolarIntensityGauge_Sample\AnalogSolarIntensityGauge_Sample.csproj", "{2CD36743-6F9C-41DA-8AA8-68B7E58F2661}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apa102_Display_Sample", "Meadow.Foundation.Peripherals\Leds.Apa102\Samples\Apa102_Display_Sample\Apa102_Display_Sample.csproj", "{64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dht10_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Samples\Dht10_Sample\Dht10_Sample.csproj", "{903369E3-E454-42DB-8939-70C64049D1C2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bbq10Keyboard", "Bbq10Keyboard", "{C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Bbq10Keyboard", "Meadow.Foundation.Peripherals\Sensors.Hid.BBQ10Keyboard\Driver\Sensors.Hid.Bbq10Keyboard.csproj", "{C4BA8BCA-19F8-41F5-8253-03EC1B63694A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bbq10Keyboard_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.BBQ10Keyboard\Samples\Bbq10Keyboard_Sample\Bbq10Keyboard_Sample.csproj", "{CCDF251E-DF74-4623-93F9-301B96F14182}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1331_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ssd1331_Sample\Ssd1331_Sample.csproj", "{6AF2F8E5-423F-4EF7-9AB6-1978792598B7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7796s_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\St7796s_Sample\St7796s_Sample.csproj", "{BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageLoad_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Graphics.MicroGraphics\Samples\ImageLoadSample\ImageLoad_Sample.csproj", "{598D3695-BEB7-4BD7-AE6A-C296F36265E7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tsc2004", "Tsc2004", "{372B055D-2279-47D2-B1A8-AB1E5670202F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Tsc2004", "Meadow.Foundation.Peripherals\Sensors.Hid.Tsc2004\Driver\Sensors.Hid.Tsc2004.csproj", "{8908AAA5-53DD-4526-AAF8-01308F1316EF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B167E0C6-F2D8-4B4F-B814-578B72B083BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tsc2004_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.Tsc2004\Samples\Tsc2004_Sample\Tsc2004_Sample.csproj", "{C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ads1x15", "Ads1x15", "{95590089-FF1E-4909-8E24-ED5FB75B8CFE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.ADC.Ads1x15", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Driver\ICs.ADC.Ads1x15.csproj", "{C122523F-ADF9-4A16-9705-327D7E78F93D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ads1015_Sample", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Samples\Ads1015_Sample\Ads1015_Sample.csproj", "{169CC53A-9160-4A49-ABEF-9E7C3F78E45C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MaxBotix", "MaxBotix", "{0FFE9335-C96D-4A88-96BF-66C03D3EE980}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1D1CA5FF-033A-438C-A706-DFED47844751}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.MaxBotix", "Meadow.Foundation.Peripherals\Sensors.Distance.MaxBotix\Driver\Sensors.Distance.MaxBotix.csproj", "{B0684D65-B983-4BA6-89F2-C4CB24389DFC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaxBotix_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.MaxBotix\Samples\MaxBotix_Sample\MaxBotix_Sample.csproj", "{03B2E5AC-CFAC-47FE-9767-0872C8151CFC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SwitchingRainGauge", "SwitchingRainGauge", "{380520E6-12D0-4DD3-AADF-BD27A6F6702F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A29C80C8-E116-4344-A49F-7E58529DC338}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.SwitchingRainGauge", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingRainGauge\Driver\Sensors.Weather.SwitchingRainGauge.csproj", "{D017E544-F3D7-49DE-913C-CD9D12D23007}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwitchingRainGauge_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingRainGauge\Samples\SwitchingRainGauge_Sample\SwitchingRainGauge_Sample.csproj", "{AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Contracts", "..\..\Meadow.Contracts\Source\Meadow.Contracts\Meadow.Contracts.csproj", "{150569EE-4053-4097-98EE-A455287610B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Units", "..\..\Meadow.Units\Source\Meadow.Units\Meadow.Units.csproj", "{46394970-4495-408F-8A9C-31BEBC47E899}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mma7660fc", "Mma7660fc", "{8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mma7660fc", "Meadow.Foundation.Peripherals\Sensors.Motion.Mma7660fc\Driver\Sensors.Motion.Mma7660fc.csproj", "{4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9D13043C-8A59-461A-9A4D-3735D06CED77}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mma7660fc_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mma7660fc\Samples\Mma7660fc_Sample\Mma7660fc_Sample.csproj", "{A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pca9633", "Pca9633", "{0457B9CA-A2AE-417C-869A-980B19A9FC1A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Pca9633", "Meadow.Foundation.Peripherals\Leds.Pca9633\Driver\Leds.Pca9633.csproj", "{F76C3DC7-8C20-45EC-A321-88BCE88E5070}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{449B5AF2-688B-4E94-96F1-A6599EC17204}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pca9633_Sample", "Meadow.Foundation.Peripherals\Leds.Pca9633\Samples\Pca9633_Sample\Pca9633_Sample.csproj", "{CD6081AC-0E17-46D5-A335-34D6EA497798}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Th02", "Th02", "{CA48F7B8-87CA-495C-86C3-AE5C2D17EB62}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2BDEE5C8-5611-4EA7-BE69-56B1CBC84065}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Th02", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Th02\Driver\Sensors.Atmospheric.Th02.csproj", "{B971549F-B16D-4B0B-AC58-1CE85032E284}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Th02_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Th02\Samples\Th02_Sample\Th02_Sample.csproj", "{B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Htux1d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Driver\Sensors.Atmospheric.Htux1d.csproj", "{F6FE1203-D39F-40DD-BD89-82CFF8AD694E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu21d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu21d_Sample\Htu21d_Sample.csproj", "{35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu31d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu31d_Sample\Htu31d_Sample.csproj", "{BA371CFB-C07A-4D29-B700-EAD37DD30D6F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.SensorReading", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.SensorReading\Driver\DataLoggers.SensorReading.csproj", "{A65353C4-D300-421D-AD04-5D69AF02BD9F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Location.Gnss.NmeaProcessor", "Meadow.Foundation.Libraries_and_Frameworks\Sensors.Location.Gnss.NmeaProcessor\Driver\Sensors.Location.Gnss.NmeaProcessor.csproj", "{77601D70-30C7-48E3-86C1-DF311FFA89C1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NmeaProcessor_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Sensors.Location.Gnss.NmeaProcessor\Samples\NmeaProcessor_Sample\NmeaProcessor_Sample.csproj", "{55025FED-EB56-4875-AF18-C48F30E20991}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Generators.SoftPwmPort_Sample", "Meadow.Foundation.Core.Samples\Generators.SoftPwmPort_Sample\Generators.SoftPwmPort_Sample.csproj", "{07F091E6-76EA-4A01-AB96-BF48EB87412A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WiiExtensionControllers", "WiiExtensionControllers", "{16681455-B8C2-448B-946F-F2053916B2B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.WiiExtensionControllers", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Driver\Sensors.Hid.WiiExtensionControllers.csproj", "{0A83C802-7117-4D78-98A5-C67BD70AF1A6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9E6A4897-5F52-4893-B090-EF5B941AC709}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NesClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\NesClassicController_Sample\NesClassicController_Sample.csproj", "{C2080A10-C700-41EB-98A2-0914F077F04F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SnesClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\SnesClassicController_Sample\SnesClassicController_Sample.csproj", "{F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiClassicController_Sample\WiiClassicController_Sample.csproj", "{7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiClassicControllerPro_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiClassicControllerPro_Sample\WiiClassicControllerPro_Sample.csproj", "{1FA13E27-1A15-4019-9A55-724A992EA964}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiNunchuck_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiNunchuck_Sample\WiiNunchuck_Sample.csproj", "{1E3CB802-08BC-4F4F-9760-DA5D09E0202A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "As5013", "As5013", "{1CE1A084-8585-4C87-939C-281A46EF8B10}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.As5013", "Meadow.Foundation.Peripherals\Sensors.Hid.As5013\Driver\Sensors.Hid.As5013.csproj", "{CB7AB7D6-C0E9-4320-A691-1775D62A4933}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "As5013_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.As5013\Samples\As5013_Sample\As5013_Sample.csproj", "{96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sht4x", "Sht4x", "{23FBF746-20A2-43FF-B248-5EE6C44C39F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sht4x", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht4x\Driver\Sensors.Atmospheric.Sht4x.csproj", "{41DFD1BB-2C66-4548-B43F-2593AE90C36E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4657A98F-6D05-48EB-864D-E3D0DCA658C5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds3502", "Ds3502", "{853477A1-9B58-4893-AFDD-577471C62DB1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C6E0BE66-399B-449A-B3A0-3D594EFFE1A1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ds3502", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ds3502\Driver\ICs.IOExpanders.Ds3502.csproj", "{8EEDC98C-AC87-490C-8C36-846EE82E9D0D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds3502_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ds3502\Samples\Ds3502_Sample\Ds3502_Sample.csproj", "{A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qmc5883_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Samples\Qmc5883_Sample\Qmc5883_Sample.csproj", "{6AF1C69A-3293-4ADC-AB1B-B814A709D15F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1900Nux", "Bh1900Nux", "{6E207804-A991-42DD-BE14-AB8E18940162}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bh1900Nux", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bh1900Nux\Driver\Sensors.Atmospheric.Bh1900Nux.csproj", "{71FE0FFA-F897-4067-8687-A033B5D0BB5D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{494AAADA-7CF7-44A4-AFB2-4AEC664151E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1900Nux_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bh1900Nux\Samples\Bh1900Nux_Sample\Bh1900Nux_Sample.csproj", "{43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sgp40", "Sgp40", "{B98533B9-CA48-4F0D-961B-C95BD5158391}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sgp40", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sgp40\Driver\Sensors.Atmospheric.Sgp40.csproj", "{71EBC24D-5B32-4E76-ADF3-DE0017946108}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sgp40_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sgp40\Samples\Sgp40_Sample\Sgp40_Sample.csproj", "{1ACC6BA0-8108-4BFA-9A75-9063B5E07493}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AnalogMux", "AnalogMux", "{643EF07C-36AD-4796-9748-2F630631CF16}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{27443DF5-9D37-47E8-A350-4AFD103913CC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.AnalogMux", "Meadow.Foundation.Peripherals\ICs.IOExpanders.AnalogMux\Driver\ICs.IOExpanders.AnalogMux.csproj", "{D80EB935-8B49-4D46-8474-F457C5BFB27C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nxp74HC4051_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.AnalogMux\Samples\Nxp74HC4051_Sample\Nxp74HC4051_Sample.csproj", "{212208FF-76E1-4864-ADA4-AAC7AE0F2981}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Audio", "Audio", "{BD86951F-CB52-412C-A765-FA48D704C1DD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Displays", "Displays", "{2B794146-DFEE-475A-B919-7D3ED48587B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ICs", "ICs", "{A1917BD0-881F-4775-88D9-38D42D448CF5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Leds", "Leds", "{5F1D642C-E91E-4894-A3D2-0B92AE7249EC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Motors", "Motors", "{2486B48D-D4A2-4505-BF50-F33B2E15DA97}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RTCs", "RTCs", "{15C7A398-35B0-4035-AE4B-FE84026D0D9E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors", "Sensors", "{9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Atmospheric", "Atmospheric", "{DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cameras", "Cameras", "{91DE515A-DFF9-4B75-809C-F56C51222310}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Distance", "Distance", "{CE93FAED-E50E-4D08-93C6-25FAEBF0260B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Light", "Light", "{C12ECFF4-2767-4764-8B98-85A239B9E756}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Motion", "Motion", "{283E2851-C603-4F0D-A10B-4CDC8CBBE06D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Temperature", "Temperature", "{DBC6C89D-A932-4F99-9382-7405A0045988}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Weather", "Weather", "{10C3B2B1-FE8F-4AC6-A469-51573060A45B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LoadCell", "LoadCell", "{1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hid", "Hid", "{818BF624-10A7-45B2-9BEE-4C411CD9CA06}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Moisture", "Moisture", "{D3548F8A-A066-41AC-BD3D-6AAECE58A242}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Radio", "Radio", "{544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sound", "Sound", "{C7E24134-762D-460C-8882-11341328C707}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Power", "Power", "{C95CDA6C-3968-467E-80ED-5A963BE96215}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gnss", "Gnss", "{F17D89F6-2993-4583-93B6-57B2025859E0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Environmental", "Environmental", "{78E463DA-0FA1-4AAE-A281-D3297C9388C9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IOExpanders", "IOExpanders", "{86B81B21-8C90-4A99-B113-FA71F8A6CD8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eeprom", "Eeprom", "{FAFDCB37-4678-4B8A-884D-F9978161CDF2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ADC", "ADC", "{E97B3C9A-7F99-4482-989D-56146C87055A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.SerialWombat", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Driver\ICs.IOExpanders.SerialWombat.csproj", "{1D73C60C-163D-4537-8B16-246FAE87B80F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SerialWombat", "SerialWombat", "{73286182-0507-4B61-A5BE-67B5C1A5D637}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5F4B9D7E-81B4-4562-BEDC-3499A8DDE648}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_PWM_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_PWM_Sample\Sw18AB_PWM_Sample.csproj", "{71290423-6A82-4263-B592-8266EAB58D9B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_ADC_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_ADC_Sample\Sw18AB_ADC_Sample.csproj", "{E15DD562-8ED5-4311-BE65-DEA0DB592FB2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Ultrasonic_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Ultrasonic_Sample\Sw18AB_Ultrasonic_Sample.csproj", "{B8578827-6DB4-491A-87B0-36D95AE008D3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "As1115", "As1115", "{2A780BB9-6C85-41A9-98F1-8B13B5C54093}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1C955941-ADF9-478A-B17C-24C5F6434E40}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.As1115", "Meadow.Foundation.Peripherals\ICs.IOExpanders.As1115\Driver\ICs.IOExpanders.As1115.csproj", "{0F796184-BC8F-4C32-8EC4-EF13D1229D4A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "As1115_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.As1115\Samples\As1115_Sample\As1115_Sample.csproj", "{6F6C93D0-2FBB-4633-BEDA-4F194625C098}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmi270", "Bmi270", "{7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Bmi270", "Meadow.Foundation.Peripherals\Sensors.Motion.Bmi270\Driver\Sensors.Motion.Bmi270.csproj", "{DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8E1C6F25-B4BA-4652-9B89-A2805F018385}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmi270_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Bmi270\Samples\Bmi270_Sample\Bmi270_Sample.csproj", "{4205BFDF-E03D-4148-844A-A87B72888F68}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme688_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Samples\Bme688_Sample\Bme688_Sample.csproj", "{53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s17_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s17_Sample\Mcp23s17_Sample.csproj", "{D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s08_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s08_Sample\Mcp23s08_Sample.csproj", "{AC604844-C136-4204-B73F-2AD19EF389E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23008_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23008_Sample\Mcp23008_Sample.csproj", "{2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23017_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23017_Sample\Mcp23017_Sample.csproj", "{C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s09_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s09_Sample\Mcp23s09_Sample.csproj", "{97AF0484-5E33-4DF9-802D-6DCA15A93F38}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s18_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s18_Sample\Mcp23s18_Sample.csproj", "{B23C6117-7396-4FDA-A08D-7E329CF453FE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23009_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23009_Sample\Mcp23009_Sample.csproj", "{0F507104-F919-44C6-A940-CAE7EAE4FD3B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23018_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23018_Sample\Mcp23018_Sample.csproj", "{92F2B28F-AD70-47D2-BC9A-437C862908D4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23x17_Input_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23x17_Input_Sample\Mcp23x17_Input_Sample.csproj", "{0C14E200-87E9-4F1D-93D2-4738B0D6F918}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ePaperWaveShare", "ePaperWaveShare", "{8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{7311794D-7D2F-47E8-A5B0-C216CBD64A13}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.ePaperWaveShare", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Driver\Displays.ePaperWaveShare.csproj", "{23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EpdColor_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\EpdColor_Sample\EpdColor_Sample.csproj", "{83957117-1E62-4C20-90C4-0796D210444D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EpdMonochrome_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\EpdMonochrome_Sample\EpdMonochrome_Sample.csproj", "{5AE56DA7-0299-409F-A465-E9B51B293DA9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UC8151C_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\UC8151C_Sample\UC8151C_Sample.csproj", "{26DE539B-517B-489D-BB9C-78D4A7B0BE3A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Servos", "Servos", "{A259504D-1EB9-4B1F-955A-95713EF4733A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ads1115_Sample", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Samples\Ads1115_Sample\Ads1115_Sample.csproj", "{1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FanControllers", "FanControllers", "{7CB0117E-E2DA-45D6-BE69-46CDE6B7A148}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Emc2101", "Emc2101", "{89A7C08F-5956-4C72-88AC-86EB9FADCEC9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{374EE6C8-205D-4416-92CB-AC1CCB279226}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.FanControllers.Emc2101", "Meadow.Foundation.Peripherals\ICs.FanControllers.Emc2101\Driver\ICs.FanControllers.Emc2101.csproj", "{25256C84-8B6B-4ED2-910E-DF0A70834AB6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emc2101_Sample", "Meadow.Foundation.Peripherals\ICs.FanControllers.Emc2101\Samples\Emc2101_Sample\Emc2101_Sample.csproj", "{49345834-BE10-4E23-AF72-A80EF5E82932}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1680_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1680_Sample\SSD1680_Sample.csproj", "{D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Core_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Core_Sample\Sw18AB_Core_Sample.csproj", "{BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Sample\Sw18AB_Sample.csproj", "{3102742F-8C87-4C84-B257-1A49DDB3D6BD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sht4x_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht4x\Samples\Sht4x_Sample\Sht4x_Sample.csproj", "{831C87F3-4925-4311-83A4-C07CE4CD109E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MQTTnet", "..\..\MQTTnet\Source\MQTTnet\MQTTnet.csproj", "{810BF526-53F8-4DFB-A32A-A67CB5FFF785}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.AnalogLightSensor_Sample", "Meadow.Foundation.Core.Samples\Sensors.Light.AnalogLightSensor_Sample\Sensors.Light.AnalogLightSensor_Sample.csproj", "{5A2538C7-D110-4DFB-A77B-C328CDDF7848}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Thermistor", "Thermistor", "{FF251CAE-8D0B-45E2-BAA4-FE2991D527F7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Thermistor", "Meadow.Foundation.Peripherals\Sensors.Temperature.Thermistor\Driver\Sensors.Temperature.Thermistor.csproj", "{CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2637750E-FF22-4AFF-882D-D80C3A6D1D5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thermistor_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Thermistor\Samples\Thermistor_Sample\Thermistor_Sample.csproj", "{5787131C-A3BC-4BB4-BC05-C792AF28A118}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NeoM8", "NeoM8", "{C4995CA0-EC5E-4DE0-8CB2-685888D70C6B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Gnss.NeoM8", "Meadow.Foundation.Peripherals\Sensors.Gnss.NeoM8\Driver\Sensors.Gnss.NeoM8.csproj", "{15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{DC8844DD-3E56-4C6E-8353-85D14004042E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NeoM8_Sample", "Meadow.Foundation.Peripherals\Sensors.Gnss.NeoM8\Samples\NeoM8_Sample\NeoM8_Sample.csproj", "{C08B6F18-0B02-41B7-8070-92E9A1F65B21}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scd4x", "Scd4x", "{B3B151AE-7C26-4313-AA47-61397791BA92}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Scd4x", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Driver\Sensors.Environmental.Scd4x.csproj", "{FAD15B5F-1912-44BF-AF96-1EB496683E87}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{94B3A671-D329-47FF-8635-6A3CF8238DFE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scd40_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Samples\Scd40_Sample\Scd40_Sample.csproj", "{06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scd41_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Samples\Scd41_Sample\Scd41_Sample.csproj", "{54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Core", "..\..\Meadow.Core\source\Meadow.Core\Meadow.Core.csproj", "{72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ens160", "Ens160", "{F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C1728E08-5B75-4146-B836-FD046A1BD741}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Ens160", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ens160\Driver\Sensors.Environmental.Ens160.csproj", "{155C1A41-E529-41AC-B1C1-461ADAC30023}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ens160_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ens160\Samples\Ens160_Sample\Ens160_Sample.csproj", "{EE44BFA9-03F1-4018-A59F-FE7F1523E845}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Logging", "..\..\Meadow.Logging\Source\Meadow.Logging\lib\Meadow.Logging.csproj", "{EB956E43-A4BE-4F79-AF92-D725604DBE76}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mmc5603", "Mmc5603", "{ECA644FF-D647-4CA1-80F0-7C730D57130E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2674E933-02F5-4DBD-B14B-08001D49EDB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mmc5603", "Meadow.Foundation.Peripherals\Sensors.Motion.Mmc5603\Driver\Sensors.Motion.Mmc5603.csproj", "{BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mmc5603_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mmc5603\Samples\Mmc5603_Sample\Mmc5603_Sample.csproj", "{10BD048E-0768-4791-A34B-F94CD9A4D5B0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Y4000", "Y4000", "{718EE625-B05F-4BC9-8CE3-A7659BCA22A4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Y4000", "Meadow.Foundation.Peripherals\Sensors.Environmental.Y4000\Driver\Sensors.Environmental.Y4000.csproj", "{6836D74A-3003-45C5-9DBA-0CE46450A55A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F9B62A9D-4DDC-4646-9B43-06D471E0F82C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Y4000_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Y4000\Samples\Y4000_Sample\Y4000_Sample.csproj", "{E718B06A-FEAF-4E11-9344-E81272E214AA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Modbus", "..\..\Meadow.Modbus\src\Meadow.Modbus\Meadow.Modbus.csproj", "{DD749A41-50A3-4DB4-A84F-4372BDFCB742}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.F7", "..\..\Meadow.Core\source\implementations\f7\Meadow.F7\Meadow.F7.csproj", "{404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ft232h", "Ft232h", "{4E0052C2-559D-4509-9C42-C6451B1F1FFC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ft232h", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Driver\ICs.IOExpanders.Ft232h.csproj", "{BEF5B037-DAB7-43C6-8A5C-EB749573C815}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{67B5150B-2FDE-4EA8-93EE-8BB31D5D7789}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ft232h_Windows_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Samples\Ft232h_Windows_Sample\Ft232h_Windows_Sample.csproj", "{B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinForms", "WinForms", "{BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.WinForms", "Meadow.Foundation.Peripherals\Displays.WinForms\Driver\Displays.WinForms.csproj", "{2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{14ACE12B-5B23-4FF3-B3C2-BFECB21064A6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Gtk", "Meadow.Foundation.Peripherals\Displays.Gtk\Driver\Displays.Gtk.csproj", "{768E2B04-FBE8-4464-B5DE-F5AA010E9D33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Epd5in65f_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\Epd5in65f_Sample\Epd5in65f_Sample.csproj", "{16A387A9-80AA-4080-85F6-10F53D6EC99E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003i", "Pmsa003i", "{AD6DD7B6-B896-44B9-904E-9330C2C842C7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ch1115", "Ch1115", "{753F764D-EA21-43A0-B761-6E9B43D8C90B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ch1115", "Meadow.Foundation.Peripherals\Displays.Ch1115\Driver\Displays.Ch1115.csproj", "{C182D69A-FE45-46BF-8522-76E0BC962FFB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D46CA94B-9A0C-4188-9EE8-8A51E1499B73}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ch1115_Sample", "Meadow.Foundation.Peripherals\Displays.Ch1115\Samples\Ch1115_Sample\Ch1115_Sample.csproj", "{1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sh110x", "Sh110x", "{8D0C58C8-B325-48A1-A500-7E8FDC28C272}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F288D725-B26F-4E32-B870-F391AF4211EB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Sh110x", "Meadow.Foundation.Peripherals\Displays.Sh110x\Driver\Displays.Sh110x.csproj", "{BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1106_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1106_Sample\Sh1106_Sample.csproj", "{F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourteenSegment", "Led.FourteenSegment", "{1D0D2EEC-2637-489F-83C3-7F7CB36E5512}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A7E3CDC-2141-4D74-A8CB-480ED78251B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.FourteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Driver\Displays.Led.FourteenSegment.csproj", "{2E207B06-0C55-44FA-8334-62D791DB6105}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FourteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Samples\FourteenSegment_Sample\FourteenSegment_Sample.csproj", "{B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ht16k33_Character_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Samples\Ht16k33_Character_Sample\Ht16k33_Character_Sample.csproj", "{85EA8B09-1C8D-4E67-9770-C1AD0A550DED}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.SixteenSegment", "Led.SixteenSegment", "{C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{13D97CCB-2CFF-4AB8-A170-701525DA740B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SixteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Driver\Displays.Led.SixteenSegment.csproj", "{70A3BC90-AB6A-4498-BFDE-07AA25823036}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Samples\SixteenSegment_Sample\SixteenSegment_Sample.csproj", "{A470E563-7ADD-4A76-91AE-C1190134D3FA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Pmsa003i", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Sensors.Environmental.Pmsa003i.csproj", "{B935965C-0FFC-4D7B-BDBC-B17C46C785F0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MiniPID2", "MiniPID2", "{38944011-FA3C-4557-9049-B41B6168F6C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.MiniPID2", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Driver\Sensors.Environmental.MiniPID2.csproj", "{00085539-EB03-49CE-8518-13544FD480BB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{59445EBB-78B8-4E83-B05D-C597D0C9AEC0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniPID2_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Samples\MiniPID2_Sample\MiniPID2_Sample.csproj", "{95670172-AB31-4239-8805-346DDD57983F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ANONavigationEncoder", "ANONavigationEncoder", "{E2A8BDCC-626E-450D-918F-785E3777793E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.ANONavigationEncoder", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Driver\Sensors.Hid.ANONavigationEncoder.csproj", "{D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{113D71B4-AE9A-402A-95A0-4D46C28F1EA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ANONavigationEncoder_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Samples\ANONavigationEncoder_Sample\ANONavigationEncoder_Sample.csproj", "{3885F704-2844-4EDD-9706-BD1B0C85A29B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1107_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1107_Sample\Sh1107_Sample.csproj", "{EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Release|Any CPU.Build.0 = Release|Any CPU + {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Release|Any CPU.Build.0 = Release|Any CPU + {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Release|Any CPU.Build.0 = Release|Any CPU + {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Release|Any CPU.Build.0 = Release|Any CPU + {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Release|Any CPU.Build.0 = Release|Any CPU + {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Release|Any CPU.Build.0 = Release|Any CPU + {05896551-6032-48C3-B847-79DEA73D5143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05896551-6032-48C3-B847-79DEA73D5143}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05896551-6032-48C3-B847-79DEA73D5143}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05896551-6032-48C3-B847-79DEA73D5143}.Release|Any CPU.Build.0 = Release|Any CPU + {28967B13-8651-4E28-B1E9-5D99D43DE202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28967B13-8651-4E28-B1E9-5D99D43DE202}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28967B13-8651-4E28-B1E9-5D99D43DE202}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28967B13-8651-4E28-B1E9-5D99D43DE202}.Release|Any CPU.Build.0 = Release|Any CPU + {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Release|Any CPU.Build.0 = Release|Any CPU + {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Release|Any CPU.Build.0 = Release|Any CPU + {26EC0711-624C-48E1-A4A6-A55FD2249139}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26EC0711-624C-48E1-A4A6-A55FD2249139}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26EC0711-624C-48E1-A4A6-A55FD2249139}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26EC0711-624C-48E1-A4A6-A55FD2249139}.Release|Any CPU.Build.0 = Release|Any CPU + {634CA076-F37B-4700-9FC4-58B1BD490627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {634CA076-F37B-4700-9FC4-58B1BD490627}.Debug|Any CPU.Build.0 = Debug|Any CPU + {634CA076-F37B-4700-9FC4-58B1BD490627}.Release|Any CPU.ActiveCfg = Release|Any CPU + {634CA076-F37B-4700-9FC4-58B1BD490627}.Release|Any CPU.Build.0 = Release|Any CPU + {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Release|Any CPU.Build.0 = Release|Any CPU + {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Debug|Any CPU.Build.0 = Debug|Any CPU + {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Release|Any CPU.ActiveCfg = Release|Any CPU + {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Release|Any CPU.Build.0 = Release|Any CPU + {105C53A9-4421-4A54-BF09-533D54BABECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {105C53A9-4421-4A54-BF09-533D54BABECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {105C53A9-4421-4A54-BF09-533D54BABECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {105C53A9-4421-4A54-BF09-533D54BABECC}.Release|Any CPU.Build.0 = Release|Any CPU + {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Release|Any CPU.Build.0 = Release|Any CPU + {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Release|Any CPU.Build.0 = Release|Any CPU + {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Release|Any CPU.Build.0 = Release|Any CPU + {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Release|Any CPU.Build.0 = Release|Any CPU + {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Release|Any CPU.Build.0 = Release|Any CPU + {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Release|Any CPU.Build.0 = Release|Any CPU + {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Release|Any CPU.Build.0 = Release|Any CPU + {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Release|Any CPU.Build.0 = Release|Any CPU + {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Release|Any CPU.Build.0 = Release|Any CPU + {894672CE-285A-40E7-98C7-EEBC530BBF24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {894672CE-285A-40E7-98C7-EEBC530BBF24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {894672CE-285A-40E7-98C7-EEBC530BBF24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {894672CE-285A-40E7-98C7-EEBC530BBF24}.Release|Any CPU.Build.0 = Release|Any CPU + {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Release|Any CPU.Build.0 = Release|Any CPU + {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Release|Any CPU.Build.0 = Release|Any CPU + {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Release|Any CPU.Build.0 = Release|Any CPU + {E77A4923-9FBD-471B-B161-DD9AD138313E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E77A4923-9FBD-471B-B161-DD9AD138313E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E77A4923-9FBD-471B-B161-DD9AD138313E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E77A4923-9FBD-471B-B161-DD9AD138313E}.Release|Any CPU.Build.0 = Release|Any CPU + {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Release|Any CPU.Build.0 = Release|Any CPU + {041FFFB3-926E-471A-9C2B-343311824B30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {041FFFB3-926E-471A-9C2B-343311824B30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {041FFFB3-926E-471A-9C2B-343311824B30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {041FFFB3-926E-471A-9C2B-343311824B30}.Release|Any CPU.Build.0 = Release|Any CPU + {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Release|Any CPU.Build.0 = Release|Any CPU + {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Release|Any CPU.Build.0 = Release|Any CPU + {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Release|Any CPU.Build.0 = Release|Any CPU + {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Release|Any CPU.Build.0 = Release|Any CPU + {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Release|Any CPU.Build.0 = Release|Any CPU + {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Release|Any CPU.Build.0 = Release|Any CPU + {C4E371CD-452B-445D-968A-FA2805A13DEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4E371CD-452B-445D-968A-FA2805A13DEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4E371CD-452B-445D-968A-FA2805A13DEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4E371CD-452B-445D-968A-FA2805A13DEE}.Release|Any CPU.Build.0 = Release|Any CPU + {E5256D16-2D8E-4A38-913C-863AB9819D53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5256D16-2D8E-4A38-913C-863AB9819D53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5256D16-2D8E-4A38-913C-863AB9819D53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5256D16-2D8E-4A38-913C-863AB9819D53}.Release|Any CPU.Build.0 = Release|Any CPU + {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Release|Any CPU.Build.0 = Release|Any CPU + {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Release|Any CPU.Build.0 = Release|Any CPU + {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Release|Any CPU.Build.0 = Release|Any CPU + {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Release|Any CPU.Build.0 = Release|Any CPU + {5574FE78-17B0-4295-9F27-2E4782554102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5574FE78-17B0-4295-9F27-2E4782554102}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5574FE78-17B0-4295-9F27-2E4782554102}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5574FE78-17B0-4295-9F27-2E4782554102}.Release|Any CPU.Build.0 = Release|Any CPU + {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Release|Any CPU.Build.0 = Release|Any CPU + {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Release|Any CPU.Build.0 = Release|Any CPU + {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Release|Any CPU.Build.0 = Release|Any CPU + {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Release|Any CPU.Build.0 = Release|Any CPU + {B148426F-25BD-4632-9307-E9EC36063D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B148426F-25BD-4632-9307-E9EC36063D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B148426F-25BD-4632-9307-E9EC36063D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B148426F-25BD-4632-9307-E9EC36063D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Release|Any CPU.Build.0 = Release|Any CPU + {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Release|Any CPU.Build.0 = Release|Any CPU + {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Release|Any CPU.Build.0 = Release|Any CPU + {345A5215-F14F-41AB-844B-9445EE657A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {345A5215-F14F-41AB-844B-9445EE657A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {345A5215-F14F-41AB-844B-9445EE657A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {345A5215-F14F-41AB-844B-9445EE657A1D}.Release|Any CPU.Build.0 = Release|Any CPU + {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Release|Any CPU.Build.0 = Release|Any CPU + {C6178701-C96F-4929-A255-396A7F7F8483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6178701-C96F-4929-A255-396A7F7F8483}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6178701-C96F-4929-A255-396A7F7F8483}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6178701-C96F-4929-A255-396A7F7F8483}.Release|Any CPU.Build.0 = Release|Any CPU + {20861022-699D-4FA2-A92A-05BC0188D25A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20861022-699D-4FA2-A92A-05BC0188D25A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20861022-699D-4FA2-A92A-05BC0188D25A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20861022-699D-4FA2-A92A-05BC0188D25A}.Release|Any CPU.Build.0 = Release|Any CPU + {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Release|Any CPU.Build.0 = Release|Any CPU + {6B108EA4-4F81-4A4A-9216-860208940FE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B108EA4-4F81-4A4A-9216-860208940FE5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B108EA4-4F81-4A4A-9216-860208940FE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B108EA4-4F81-4A4A-9216-860208940FE5}.Release|Any CPU.Build.0 = Release|Any CPU + {F036224F-8ECB-497F-BC49-355BC4C094B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F036224F-8ECB-497F-BC49-355BC4C094B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F036224F-8ECB-497F-BC49-355BC4C094B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F036224F-8ECB-497F-BC49-355BC4C094B0}.Release|Any CPU.Build.0 = Release|Any CPU + {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Release|Any CPU.Build.0 = Release|Any CPU + {728ECF00-EB02-4981-87F9-A72A163DB93C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {728ECF00-EB02-4981-87F9-A72A163DB93C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {728ECF00-EB02-4981-87F9-A72A163DB93C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {728ECF00-EB02-4981-87F9-A72A163DB93C}.Release|Any CPU.Build.0 = Release|Any CPU + {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Release|Any CPU.Build.0 = Release|Any CPU + {D94618E1-D812-4CFF-B539-54AE9559F827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D94618E1-D812-4CFF-B539-54AE9559F827}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D94618E1-D812-4CFF-B539-54AE9559F827}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D94618E1-D812-4CFF-B539-54AE9559F827}.Release|Any CPU.Build.0 = Release|Any CPU + {A5F4A75B-20F6-4CDF-B986-635081894E43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5F4A75B-20F6-4CDF-B986-635081894E43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5F4A75B-20F6-4CDF-B986-635081894E43}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5F4A75B-20F6-4CDF-B986-635081894E43}.Release|Any CPU.Build.0 = Release|Any CPU + {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Debug|Any CPU.Build.0 = Debug|Any CPU + {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Release|Any CPU.ActiveCfg = Release|Any CPU + {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Release|Any CPU.Build.0 = Release|Any CPU + {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Release|Any CPU.Build.0 = Release|Any CPU + {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Release|Any CPU.Build.0 = Release|Any CPU + {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Release|Any CPU.Build.0 = Release|Any CPU + {24568129-061F-4A1E-B1CF-81B9F197EE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24568129-061F-4A1E-B1CF-81B9F197EE58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24568129-061F-4A1E-B1CF-81B9F197EE58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24568129-061F-4A1E-B1CF-81B9F197EE58}.Release|Any CPU.Build.0 = Release|Any CPU + {16CFD509-CEA6-4038-B504-5C026C2A464F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16CFD509-CEA6-4038-B504-5C026C2A464F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16CFD509-CEA6-4038-B504-5C026C2A464F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16CFD509-CEA6-4038-B504-5C026C2A464F}.Release|Any CPU.Build.0 = Release|Any CPU + {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Release|Any CPU.Build.0 = Release|Any CPU + {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Release|Any CPU.Build.0 = Release|Any CPU + {2F25E1D4-D167-4681-9C27-161FB18A895D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F25E1D4-D167-4681-9C27-161FB18A895D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F25E1D4-D167-4681-9C27-161FB18A895D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F25E1D4-D167-4681-9C27-161FB18A895D}.Release|Any CPU.Build.0 = Release|Any CPU + {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Release|Any CPU.Build.0 = Release|Any CPU + {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Release|Any CPU.Build.0 = Release|Any CPU + {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Release|Any CPU.Build.0 = Release|Any CPU + {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Release|Any CPU.Build.0 = Release|Any CPU + {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Release|Any CPU.Build.0 = Release|Any CPU + {4E60FE13-67F0-493A-853A-9A0076499506}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E60FE13-67F0-493A-853A-9A0076499506}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E60FE13-67F0-493A-853A-9A0076499506}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E60FE13-67F0-493A-853A-9A0076499506}.Release|Any CPU.Build.0 = Release|Any CPU + {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Release|Any CPU.Build.0 = Release|Any CPU + {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Release|Any CPU.Build.0 = Release|Any CPU + {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Release|Any CPU.Build.0 = Release|Any CPU + {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Release|Any CPU.Build.0 = Release|Any CPU + {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Release|Any CPU.Build.0 = Release|Any CPU + {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Release|Any CPU.Build.0 = Release|Any CPU + {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Release|Any CPU.Build.0 = Release|Any CPU + {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Release|Any CPU.Build.0 = Release|Any CPU + {ED38C115-9592-4049-A654-8C575676F17D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED38C115-9592-4049-A654-8C575676F17D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED38C115-9592-4049-A654-8C575676F17D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED38C115-9592-4049-A654-8C575676F17D}.Release|Any CPU.Build.0 = Release|Any CPU + {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Release|Any CPU.Build.0 = Release|Any CPU + {74E97580-8847-45D5-B12B-82409B56E709}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74E97580-8847-45D5-B12B-82409B56E709}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74E97580-8847-45D5-B12B-82409B56E709}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74E97580-8847-45D5-B12B-82409B56E709}.Release|Any CPU.Build.0 = Release|Any CPU + {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Release|Any CPU.Build.0 = Release|Any CPU + {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Release|Any CPU.Build.0 = Release|Any CPU + {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Release|Any CPU.Build.0 = Release|Any CPU + {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Release|Any CPU.Build.0 = Release|Any CPU + {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Release|Any CPU.Build.0 = Release|Any CPU + {5EC99271-9105-42BF-B347-69EA5376D305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5EC99271-9105-42BF-B347-69EA5376D305}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5EC99271-9105-42BF-B347-69EA5376D305}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5EC99271-9105-42BF-B347-69EA5376D305}.Release|Any CPU.Build.0 = Release|Any CPU + {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Release|Any CPU.Build.0 = Release|Any CPU + {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Release|Any CPU.Build.0 = Release|Any CPU + {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Release|Any CPU.Build.0 = Release|Any CPU + {8C763585-70E5-4D99-B133-929F9B41645A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C763585-70E5-4D99-B133-929F9B41645A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C763585-70E5-4D99-B133-929F9B41645A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C763585-70E5-4D99-B133-929F9B41645A}.Release|Any CPU.Build.0 = Release|Any CPU + {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Release|Any CPU.Build.0 = Release|Any CPU + {124BD439-325D-43CA-B829-F39EE332B3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {124BD439-325D-43CA-B829-F39EE332B3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {124BD439-325D-43CA-B829-F39EE332B3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {124BD439-325D-43CA-B829-F39EE332B3F7}.Release|Any CPU.Build.0 = Release|Any CPU + {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Release|Any CPU.Build.0 = Release|Any CPU + {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Release|Any CPU.Build.0 = Release|Any CPU + {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Release|Any CPU.Build.0 = Release|Any CPU + {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Release|Any CPU.Build.0 = Release|Any CPU + {A50E7383-8111-4516-B76E-E4133242B835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A50E7383-8111-4516-B76E-E4133242B835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A50E7383-8111-4516-B76E-E4133242B835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A50E7383-8111-4516-B76E-E4133242B835}.Release|Any CPU.Build.0 = Release|Any CPU + {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Release|Any CPU.Build.0 = Release|Any CPU + {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Release|Any CPU.Build.0 = Release|Any CPU + {DA828BA9-E57F-4579-B6B0-55910247408F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA828BA9-E57F-4579-B6B0-55910247408F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.Build.0 = Release|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Build.0 = Release|Any CPU + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Build.0 = Release|Any CPU + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.Build.0 = Release|Any CPU + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.Build.0 = Release|Any CPU + {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F5596859-93D3-41D0-8988-FFA24F4A2152}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5596859-93D3-41D0-8988-FFA24F4A2152}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5596859-93D3-41D0-8988-FFA24F4A2152}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5596859-93D3-41D0-8988-FFA24F4A2152}.Release|Any CPU.Build.0 = Release|Any CPU + {A229CA2F-6218-44ED-A871-BC4033D23025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A229CA2F-6218-44ED-A871-BC4033D23025}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A229CA2F-6218-44ED-A871-BC4033D23025}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A229CA2F-6218-44ED-A871-BC4033D23025}.Release|Any CPU.Build.0 = Release|Any CPU + {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Release|Any CPU.Build.0 = Release|Any CPU + {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Release|Any CPU.Build.0 = Release|Any CPU + {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Release|Any CPU.Build.0 = Release|Any CPU + {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Release|Any CPU.Build.0 = Release|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.Build.0 = Release|Any CPU + {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.Build.0 = Release|Any CPU + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.Build.0 = Release|Any CPU + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.Build.0 = Release|Any CPU + {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.Deploy.0 = Release|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.Build.0 = Release|Any CPU + {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Release|Any CPU.Build.0 = Release|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.Build.0 = Release|Any CPU + {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.Deploy.0 = Release|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.Build.0 = Release|Any CPU + {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.Build.0 = Release|Any CPU + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.Build.0 = Release|Any CPU + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.Deploy.0 = Release|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.Build.0 = Release|Any CPU + {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.Deploy.0 = Release|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.Build.0 = Release|Any CPU + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.Build.0 = Release|Any CPU + {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.Deploy.0 = Release|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.Build.0 = Release|Any CPU + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.Build.0 = Release|Any CPU + {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.Build.0 = Release|Any CPU + {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1372483D-0BE9-4A52-9BDC-75A15120279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1372483D-0BE9-4A52-9BDC-75A15120279F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1372483D-0BE9-4A52-9BDC-75A15120279F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1372483D-0BE9-4A52-9BDC-75A15120279F}.Release|Any CPU.Build.0 = Release|Any CPU + {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Release|Any CPU.Build.0 = Release|Any CPU + {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Release|Any CPU.Build.0 = Release|Any CPU + {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Release|Any CPU.Build.0 = Release|Any CPU + {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Release|Any CPU.Build.0 = Release|Any CPU + {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Release|Any CPU.Build.0 = Release|Any CPU + {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Release|Any CPU.Build.0 = Release|Any CPU + {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Release|Any CPU.Build.0 = Release|Any CPU + {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Release|Any CPU.Build.0 = Release|Any CPU + {E1829984-508F-4BED-A11D-E43624064DFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1829984-508F-4BED-A11D-E43624064DFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1829984-508F-4BED-A11D-E43624064DFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1829984-508F-4BED-A11D-E43624064DFD}.Release|Any CPU.Build.0 = Release|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.Build.0 = Release|Any CPU + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.Build.0 = Release|Any CPU + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.Build.0 = Release|Any CPU + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.Build.0 = Release|Any CPU + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.Build.0 = Release|Any CPU + {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.Build.0 = Release|Any CPU + {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Release|Any CPU.Build.0 = Release|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.Build.0 = Release|Any CPU + {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.Build.0 = Release|Any CPU + {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Release|Any CPU.Build.0 = Release|Any CPU + {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Release|Any CPU.Build.0 = Release|Any CPU + {12449481-3CDD-446F-8968-5816E65F62F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12449481-3CDD-446F-8968-5816E65F62F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12449481-3CDD-446F-8968-5816E65F62F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12449481-3CDD-446F-8968-5816E65F62F6}.Release|Any CPU.Build.0 = Release|Any CPU + {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Release|Any CPU.Build.0 = Release|Any CPU + {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Release|Any CPU.Build.0 = Release|Any CPU + {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Release|Any CPU.Build.0 = Release|Any CPU + {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Release|Any CPU.Build.0 = Release|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.Build.0 = Release|Any CPU + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.Build.0 = Release|Any CPU + {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.Deploy.0 = Release|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.Build.0 = Debug|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.ActiveCfg = Release|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.Build.0 = Release|Any CPU + {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.Deploy.0 = Release|Any CPU + {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Release|Any CPU.Build.0 = Release|Any CPU + {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Release|Any CPU.Build.0 = Release|Any CPU + {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Release|Any CPU.Build.0 = Release|Any CPU + {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Release|Any CPU.Build.0 = Release|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.Build.0 = Release|Any CPU + {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.Build.0 = Release|Any CPU + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Release|Any CPU.Build.0 = Release|Any CPU + {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Release|Any CPU.Build.0 = Release|Any CPU + {A237BE35-0618-4B9B-A409-A3AC22053B53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A237BE35-0618-4B9B-A409-A3AC22053B53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A237BE35-0618-4B9B-A409-A3AC22053B53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A237BE35-0618-4B9B-A409-A3AC22053B53}.Release|Any CPU.Build.0 = Release|Any CPU + {99621A27-6E31-4D71-A395-FEB610337646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99621A27-6E31-4D71-A395-FEB610337646}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99621A27-6E31-4D71-A395-FEB610337646}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99621A27-6E31-4D71-A395-FEB610337646}.Release|Any CPU.Build.0 = Release|Any CPU + {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Release|Any CPU.Build.0 = Release|Any CPU + {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Release|Any CPU.Build.0 = Release|Any CPU + {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Release|Any CPU.Build.0 = Release|Any CPU + {82980954-71E5-48CE-BA13-00B841707B04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82980954-71E5-48CE-BA13-00B841707B04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82980954-71E5-48CE-BA13-00B841707B04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82980954-71E5-48CE-BA13-00B841707B04}.Release|Any CPU.Build.0 = Release|Any CPU + {FDA130ED-6502-4357-BB48-A6C080BDB511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDA130ED-6502-4357-BB48-A6C080BDB511}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDA130ED-6502-4357-BB48-A6C080BDB511}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDA130ED-6502-4357-BB48-A6C080BDB511}.Release|Any CPU.Build.0 = Release|Any CPU + {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Release|Any CPU.Build.0 = Release|Any CPU + {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Release|Any CPU.Build.0 = Release|Any CPU + {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Release|Any CPU.Build.0 = Release|Any CPU + {223CF15A-83B8-4E43-9645-50D45D9470A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {223CF15A-83B8-4E43-9645-50D45D9470A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {223CF15A-83B8-4E43-9645-50D45D9470A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {223CF15A-83B8-4E43-9645-50D45D9470A5}.Release|Any CPU.Build.0 = Release|Any CPU + {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Release|Any CPU.Build.0 = Release|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.Build.0 = Release|Any CPU + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.Build.0 = Release|Any CPU + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.Build.0 = Release|Any CPU + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.Build.0 = Release|Any CPU + {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.Deploy.0 = Release|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.Build.0 = Debug|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.ActiveCfg = Release|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.Build.0 = Release|Any CPU + {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.Deploy.0 = Release|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.Build.0 = Debug|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.ActiveCfg = Release|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.Build.0 = Release|Any CPU + {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.Deploy.0 = Release|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.Build.0 = Debug|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.ActiveCfg = Release|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.Build.0 = Release|Any CPU + {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.Deploy.0 = Release|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.Build.0 = Release|Any CPU + {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.Build.0 = Release|Any CPU + {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.Deploy.0 = Release|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.Build.0 = Release|Any CPU + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.Build.0 = Release|Any CPU + {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.Deploy.0 = Release|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.Build.0 = Release|Any CPU + {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.Build.0 = Release|Any CPU + {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.Build.0 = Release|Any CPU + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.Build.0 = Release|Any CPU + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.Build.0 = Release|Any CPU + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.Build.0 = Release|Any CPU + {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.Build.0 = Release|Any CPU + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.Build.0 = Debug|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.ActiveCfg = Release|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.Build.0 = Release|Any CPU + {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.Build.0 = Release|Any CPU + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.Build.0 = Release|Any CPU + {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.Deploy.0 = Release|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.Build.0 = Release|Any CPU + {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.Build.0 = Release|Any CPU + {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.Build.0 = Release|Any CPU + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.Deploy.0 = Release|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.Build.0 = Release|Any CPU + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.Build.0 = Release|Any CPU + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.Deploy.0 = Release|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.Build.0 = Release|Any CPU + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.Build.0 = Release|Any CPU + {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.Build.0 = Release|Any CPU + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.Build.0 = Release|Any CPU + {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.Build.0 = Release|Any CPU + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.Build.0 = Release|Any CPU + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.Deploy.0 = Release|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.Build.0 = Release|Any CPU + {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.Deploy.0 = Release|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.Build.0 = Release|Any CPU + {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.Build.0 = Release|Any CPU + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.Build.0 = Release|Any CPU + {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.Build.0 = Release|Any CPU + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.Build.0 = Release|Any CPU + {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.Deploy.0 = Release|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.Build.0 = Release|Any CPU + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.Build.0 = Release|Any CPU + {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.Deploy.0 = Release|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.Build.0 = Release|Any CPU + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.Deploy.0 = Release|Any CPU + {150569EE-4053-4097-98EE-A455287610B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {150569EE-4053-4097-98EE-A455287610B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {150569EE-4053-4097-98EE-A455287610B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {150569EE-4053-4097-98EE-A455287610B5}.Release|Any CPU.Build.0 = Release|Any CPU + {46394970-4495-408F-8A9C-31BEBC47E899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46394970-4495-408F-8A9C-31BEBC47E899}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46394970-4495-408F-8A9C-31BEBC47E899}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46394970-4495-408F-8A9C-31BEBC47E899}.Release|Any CPU.Build.0 = Release|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.Build.0 = Release|Any CPU + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.Build.0 = Release|Any CPU + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.Build.0 = Release|Any CPU + {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.Build.0 = Release|Any CPU + {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.Build.0 = Release|Any CPU + {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.Build.0 = Release|Any CPU + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Build.0 = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Build.0 = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Build.0 = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.Build.0 = Release|Any CPU + {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.Build.0 = Release|Any CPU + {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.Deploy.0 = Release|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.Build.0 = Release|Any CPU + {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.Deploy.0 = Release|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.Build.0 = Release|Any CPU + {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.Build.0 = Release|Any CPU + {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.Build.0 = Release|Any CPU + {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.Build.0 = Release|Any CPU + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.Deploy.0 = Release|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.Build.0 = Release|Any CPU + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.Build.0 = Release|Any CPU + {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.Build.0 = Release|Any CPU + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Release|Any CPU.Build.0 = Release|Any CPU + {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Release|Any CPU.Build.0 = Release|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.Build.0 = Release|Any CPU + {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.Build.0 = Release|Any CPU + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.Build.0 = Release|Any CPU + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.Build.0 = Release|Any CPU + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.Build.0 = Release|Any CPU + {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.Build.0 = Release|Any CPU + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.Deploy.0 = Release|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.Build.0 = Release|Any CPU + {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.Build.0 = Release|Any CPU + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.Build.0 = Release|Any CPU + {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.Build.0 = Debug|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.ActiveCfg = Release|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.Build.0 = Release|Any CPU + {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.Build.0 = Release|Any CPU + {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.Build.0 = Release|Any CPU + {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.Build.0 = Release|Any CPU + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.Build.0 = Release|Any CPU + {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.Build.0 = Release|Any CPU + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.Build.0 = Release|Any CPU + {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.Deploy.0 = Release|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.Build.0 = Release|Any CPU + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.Deploy.0 = Release|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.Build.0 = Release|Any CPU + {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.Deploy.0 = Release|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.Build.0 = Release|Any CPU + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.Build.0 = Release|Any CPU + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.Deploy.0 = Release|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.Build.0 = Release|Any CPU + {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.Build.0 = Release|Any CPU + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.Build.0 = Release|Any CPU + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.Deploy.0 = Release|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.Build.0 = Release|Any CPU + {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.Build.0 = Release|Any CPU + {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.Build.0 = Release|Any CPU + {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.Build.0 = Release|Any CPU + {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.Build.0 = Release|Any CPU + {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.Deploy.0 = Release|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.Build.0 = Release|Any CPU + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.Build.0 = Release|Any CPU + {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.Build.0 = Release|Any CPU + {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.Deploy.0 = Release|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.Build.0 = Release|Any CPU + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.Build.0 = Release|Any CPU + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.Deploy.0 = Release|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.Build.0 = Release|Any CPU + {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.Build.0 = Debug|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.ActiveCfg = Release|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.Build.0 = Release|Any CPU + {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.Build.0 = Release|Any CPU + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.Build.0 = Release|Any CPU + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.Build.0 = Release|Any CPU + {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.Deploy.0 = Release|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.Build.0 = Release|Any CPU + {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Debug|Any CPU.Build.0 = Debug|Any CPU + {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Release|Any CPU.ActiveCfg = Release|Any CPU + {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Release|Any CPU.Build.0 = Release|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.Build.0 = Release|Any CPU + {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.Deploy.0 = Release|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.Build.0 = Release|Any CPU + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.Build.0 = Release|Any CPU + {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.Deploy.0 = Release|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.Build.0 = Release|Any CPU + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.Build.0 = Release|Any CPU + {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.Deploy.0 = Release|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.Build.0 = Release|Any CPU + {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.Deploy.0 = Release|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.Build.0 = Release|Any CPU + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.Deploy.0 = Release|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.Build.0 = Release|Any CPU + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.Build.0 = Release|Any CPU + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.Build.0 = Release|Any CPU + {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.Deploy.0 = Release|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.Build.0 = Release|Any CPU + {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.Deploy.0 = Release|Any CPU + {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Release|Any CPU.Build.0 = Release|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.Build.0 = Release|Any CPU + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.Deploy.0 = Release|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.Build.0 = Release|Any CPU + {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.Build.0 = Release|Any CPU + {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Build.0 = Release|Any CPU + {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Release|Any CPU.Build.0 = Release|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.Build.0 = Release|Any CPU + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Build.0 = Release|Any CPU + {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.Build.0 = Release|Any CPU + {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Release|Any CPU.Build.0 = Release|Any CPU + {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Release|Any CPU.Build.0 = Release|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU + {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Build.0 = Release|Any CPU + {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Build.0 = Release|Any CPU + {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Build.0 = Release|Any CPU + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Build.0 = Release|Any CPU + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Build.0 = Release|Any CPU + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Deploy.0 = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Build.0 = Release|Any CPU + {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Build.0 = Release|Any CPU + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Deploy.0 = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Build.0 = Release|Any CPU + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Deploy.0 = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Build.0 = Release|Any CPU + {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Build.0 = Release|Any CPU + {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Build.0 = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Build.0 = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Build.0 = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Build.0 = Release|Any CPU + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Build.0 = Release|Any CPU + {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Build.0 = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {74F47C15-1293-404A-8C92-0F72A3DE7BA7} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {90A0ADDA-0CC2-491B-9140-DFE086EA66FC} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {20A24104-F8EF-4BDD-99F7-145CA63645B0} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {5C0F8C22-10FB-4D50-B87B-41558A87B30A} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {05896551-6032-48C3-B847-79DEA73D5143} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {28967B13-8651-4E28-B1E9-5D99D43DE202} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {2D4A6B45-101D-49F4-B4BD-8A47B8A98098} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {26EC0711-624C-48E1-A4A6-A55FD2249139} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {634CA076-F37B-4700-9FC4-58B1BD490627} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {FD938FD6-64B5-4B12-AD1B-42D4D401486C} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {091CF87A-BF50-44B5-BA3A-2D4BFB56E111} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {105C53A9-4421-4A54-BF09-533D54BABECC} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} = {A259504D-1EB9-4B1F-955A-95713EF4733A} + {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6} = {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} + {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3} = {C31B4F18-78CB-4DC6-A09A-FD00C0303A80} + {92FF91F9-027A-47AC-8315-64547A80F54C} = {DBC6C89D-A932-4F99-9382-7405A0045988} + {E3A79085-41A4-4F86-90D1-8BC4F53FA625} = {92FF91F9-027A-47AC-8315-64547A80F54C} + {C31B4F18-78CB-4DC6-A09A-FD00C0303A80} = {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} + {D5471726-76C5-46DD-9931-6328C6A3D375} = {92FF91F9-027A-47AC-8315-64547A80F54C} + {35210A0B-2366-490B-A186-F8B9965BB89A} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {1B4327CF-B17A-46C3-A001-D9389E0E391B} = {35210A0B-2366-490B-A186-F8B9965BB89A} + {0141F077-F5B1-4134-B513-F3A6FEA8D53A} = {35210A0B-2366-490B-A186-F8B9965BB89A} + {6711636F-A503-4D2F-AD47-CFB23FBDF484} = {1B4327CF-B17A-46C3-A001-D9389E0E391B} + {D4AF8585-D919-4A4E-A41A-400C8E95031C} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {B80C99F7-CFC0-409B-AFDD-23E2C8775327} = {D4AF8585-D919-4A4E-A41A-400C8E95031C} + {02E56C68-5B09-4331-9E5D-7FD9217594F0} = {D4AF8585-D919-4A4E-A41A-400C8E95031C} + {A4089518-DBDB-4E12-8A31-D916859259F0} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961} = {A4089518-DBDB-4E12-8A31-D916859259F0} + {35BE1129-CB5E-4003-987A-5EE41423EA72} = {A4089518-DBDB-4E12-8A31-D916859259F0} + {7387C800-5C6C-4AA8-87E8-7FF04DF189F2} = {35BE1129-CB5E-4003-987A-5EE41423EA72} + {AAE72992-84CD-4B91-9736-252D49735D24} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {07F59EFA-8D03-489D-BB05-905C3B0A7699} = {AAE72992-84CD-4B91-9736-252D49735D24} + {94A3A79A-3614-426C-A99C-F1F5CCDC4305} = {AAE72992-84CD-4B91-9736-252D49735D24} + {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {D744EA2C-4534-42ED-B7BB-CC511762C509} = {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} + {894672CE-285A-40E7-98C7-EEBC530BBF24} = {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} + {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} = {D3548F8A-A066-41AC-BD3D-6AAECE58A242} + {BDBF448A-E9DA-4629-953C-1FADE3817724} = {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} + {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE} = {BDBF448A-E9DA-4629-953C-1FADE3817724} + {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} = {D3548F8A-A066-41AC-BD3D-6AAECE58A242} + {A545B814-74FD-4A0E-8BF3-9905C42FB315} = {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} + {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9} = {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} + {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17} = {A545B814-74FD-4A0E-8BF3-9905C42FB315} + {46752A8C-7971-41E2-8866-4E962EEDC803} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {B99DE5A0-FF26-4805-BBB2-2739582191C0} = {46752A8C-7971-41E2-8866-4E962EEDC803} + {E77A4923-9FBD-471B-B161-DD9AD138313E} = {46752A8C-7971-41E2-8866-4E962EEDC803} + {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {212F665B-A91A-4DEA-B0CB-E8BA195D8137} = {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} + {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} + {22F9AB41-151C-41EB-A662-1C155E9B067E} = {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} + {BB051C9D-49C5-46C5-B8B1-5E459179C761} = {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} + {041FFFB3-926E-471A-9C2B-343311824B30} = {22F9AB41-151C-41EB-A662-1C155E9B067E} + {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {D9E26608-83A9-4146-8B06-5CF9EF3E4F7A} = {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} + {BEB54F58-AB14-4030-BA81-746F1D3A34B2} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {AEF8B139-CB86-4DB1-944D-2D859C8669DA} = {BEB54F58-AB14-4030-BA81-746F1D3A34B2} + {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7} = {BEB54F58-AB14-4030-BA81-746F1D3A34B2} + {E985E479-23A7-4516-837F-256B40C50BF3} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {6A664586-4544-4427-8FC1-2A8E306BE7A3} = {E985E479-23A7-4516-837F-256B40C50BF3} + {81E6E143-8752-45A9-8BDA-C6F4730A7DF1} = {E985E479-23A7-4516-837F-256B40C50BF3} + {27F8F5B1-F535-4116-BB16-63454D21D13B} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {91CA9079-8D10-4A3B-AE42-CB49781687C0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {6416DC2C-DED8-44E7-8783-24EFB7F9C682} = {91CA9079-8D10-4A3B-AE42-CB49781687C0} + {5542FE52-8D47-4279-A436-67DB6B1E1E12} = {91CA9079-8D10-4A3B-AE42-CB49781687C0} + {C724C5EE-7972-41DA-9FDB-42416980F25C} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {4A2BBDB4-6130-4C9D-9947-12F39309E8E9} = {C724C5EE-7972-41DA-9FDB-42416980F25C} + {449B29BE-7A04-4A6D-858B-77C8E81415DE} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {21C511DD-43DD-486E-86D7-18D8F6810ACD} = {449B29BE-7A04-4A6D-858B-77C8E81415DE} + {D5C58443-E77C-472D-B5A9-FAC05B40334C} = {15C7A398-35B0-4035-AE4B-FE84026D0D9E} + {626AAFA5-97ED-47C3-9303-977B1B17F6A2} = {D5C58443-E77C-472D-B5A9-FAC05B40334C} + {43BE21E0-CA04-4987-A1EE-0E3F5E940C00} = {D5C58443-E77C-472D-B5A9-FAC05B40334C} + {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A} = {626AAFA5-97ED-47C3-9303-977B1B17F6A2} + {A867D092-9D63-4516-89C7-509B161D331A} = {15C7A398-35B0-4035-AE4B-FE84026D0D9E} + {C32CCF68-5D86-4337-BF37-4053C7F01848} = {A867D092-9D63-4516-89C7-509B161D331A} + {225C7669-6CD3-4F24-8F02-5620BF682BF3} = {A867D092-9D63-4516-89C7-509B161D331A} + {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {BA4E26C9-BFF0-48B1-9D53-315F6906AF06} = {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} + {C4E371CD-452B-445D-968A-FA2805A13DEE} = {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} + {240F389E-5109-4266-AE58-04DEAC585F22} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {1A91B800-DC03-4199-AE38-4BD57195416F} = {240F389E-5109-4266-AE58-04DEAC585F22} + {E5256D16-2D8E-4A38-913C-863AB9819D53} = {240F389E-5109-4266-AE58-04DEAC585F22} + {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} = {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} + {15D040E2-2ECC-413B-AA87-6455D7D930A5} = {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} + {A431E3A8-471B-4D51-B271-8E614F6E77C6} = {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} + {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} = {FAFDCB37-4678-4B8A-884D-F9978161CDF2} + {671D7B77-DEBE-416D-818D-99411DF479AC} = {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} + {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134} = {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} + {8CE083A7-B966-4EB5-B139-C3EEF2D53585} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {8FB70D12-1111-480B-B64C-B8EB65977F58} = {8CE083A7-B966-4EB5-B139-C3EEF2D53585} + {888BC38D-CC4E-4F78-9F4E-488969FD0360} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {94E618B0-5BA2-4436-B1F5-90CE0E0D2293} = {888BC38D-CC4E-4F78-9F4E-488969FD0360} + {7B529C67-B1BF-41A4-8870-42A027ABFBCF} = {888BC38D-CC4E-4F78-9F4E-488969FD0360} + {5574FE78-17B0-4295-9F27-2E4782554102} = {94E618B0-5BA2-4436-B1F5-90CE0E0D2293} + {BF341B80-8763-482E-9AF7-5E8DE369ECE1} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} = {BF341B80-8763-482E-9AF7-5E8DE369ECE1} + {0CD6A482-3CA0-4627-969E-7E27C1AE9352} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {6F6FFBD9-7326-4C38-A4A6-C0052212645F} = {0CD6A482-3CA0-4627-969E-7E27C1AE9352} + {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {6E6E1F6E-8689-4D5C-814F-2A92E63B365F} = {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} + {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {C4407F01-FE4E-429A-BFF3-F697881F1EEA} = {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} + {45F2287B-5AD9-4E89-8A91-1471AC56005E} = {C4407F01-FE4E-429A-BFF3-F697881F1EEA} + {577DDC93-7BC2-4641-AB65-9550EF362682} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} = {577DDC93-7BC2-4641-AB65-9550EF362682} + {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6} = {577DDC93-7BC2-4641-AB65-9550EF362682} + {DB7564E3-703D-4358-8CB0-FA80CFB69101} = {BD86951F-CB52-412C-A765-FA48D704C1DD} + {4242C2C7-8B81-41D4-A716-D717B6424C50} = {DB7564E3-703D-4358-8CB0-FA80CFB69101} + {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA} = {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} + {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0} = {D9E26608-83A9-4146-8B06-5CF9EF3E4F7A} + {B148426F-25BD-4632-9307-E9EC36063D0E} = {D744EA2C-4534-42ED-B7BB-CC511762C509} + {51B930DB-5D89-417E-A78F-4A365CAA17D2} = {6A664586-4544-4427-8FC1-2A8E306BE7A3} + {5B8B4327-8936-4AC1-B77D-1D219A897ECF} = {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} + {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} + {9268BC85-F6BC-46F7-A101-A26920A87DF2} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {65A2B794-E5FB-4234-A174-D1CED2DD9E4F} = {9268BC85-F6BC-46F7-A101-A26920A87DF2} + {8749617F-D55A-4C44-815A-FD55FFDA3891} = {91DE515A-DFF9-4B75-809C-F56C51222310} + {118CB5F4-F864-49B8-B43B-28FBD23AD02F} = {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} + {E51E4E02-C3B8-456B-917C-E5200E062E4E} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {8AA8CB22-1E97-463D-863F-484236E1C24C} = {E51E4E02-C3B8-456B-917C-E5200E062E4E} + {5DA778E0-E827-4A63-844B-1166BEEB8897} = {27F8F5B1-F535-4116-BB16-63454D21D13B} + {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {345A5215-F14F-41AB-844B-9445EE657A1D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {50D09365-81F0-4313-A7AF-F2CD76DE4998} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {C6178701-C96F-4929-A255-396A7F7F8483} = {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} + {20861022-699D-4FA2-A92A-05BC0188D25A} = {07F59EFA-8D03-489D-BB05-905C3B0A7699} + {4210A31C-77B0-4550-BEC4-F3D4CE337DCA} = {B99DE5A0-FF26-4805-BBB2-2739582191C0} + {6B108EA4-4F81-4A4A-9216-860208940FE5} = {212F665B-A91A-4DEA-B0CB-E8BA195D8137} + {F036224F-8ECB-497F-BC49-355BC4C094B0} = {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} + {EF135479-CBF6-4E03-B6EB-55EA850946A3} = {6416DC2C-DED8-44E7-8783-24EFB7F9C682} + {728ECF00-EB02-4981-87F9-A72A163DB93C} = {C724C5EE-7972-41DA-9FDB-42416980F25C} + {59EED95C-1CA7-466C-853C-BF14E1EF43A9} = {21C511DD-43DD-486E-86D7-18D8F6810ACD} + {D94618E1-D812-4CFF-B539-54AE9559F827} = {449B29BE-7A04-4A6D-858B-77C8E81415DE} + {A5F4A75B-20F6-4CDF-B986-635081894E43} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {514EA28E-1527-4F9E-A0F5-33C3BE3DF417} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {E9B8729A-7525-4EB3-86F0-50E88C504AE6} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {41FF7FB1-FDE1-4229-A307-06C25CF91520} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {24568129-061F-4A1E-B1CF-81B9F197EE58} = {8CE083A7-B966-4EB5-B139-C3EEF2D53585} + {16CFD509-CEA6-4038-B504-5C026C2A464F} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} + {7F69F8CB-5C1A-461B-90FC-360367CD65CF} = {BF341B80-8763-482E-9AF7-5E8DE369ECE1} + {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F} = {6F6FFBD9-7326-4C38-A4A6-C0052212645F} + {2F25E1D4-D167-4681-9C27-161FB18A895D} = {0CD6A482-3CA0-4627-969E-7E27C1AE9352} + {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF} = {6E6E1F6E-8689-4D5C-814F-2A92E63B365F} + {18FCBDEA-3530-4D00-A339-D2255DBD6B2E} = {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} + {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8} = {DB7564E3-703D-4358-8CB0-FA80CFB69101} + {7B874567-3F96-488D-8FC1-B79479CDE7C2} = {118CB5F4-F864-49B8-B43B-28FBD23AD02F} + {4E60FE13-67F0-493A-853A-9A0076499506} = {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} + {A9FBA69F-9638-4F16-B764-30FE77E3BA6D} = {65A2B794-E5FB-4234-A174-D1CED2DD9E4F} + {EDAAD136-DEE3-4318-82C6-5C8193E0414E} = {9268BC85-F6BC-46F7-A101-A26920A87DF2} + {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D} = {8749617F-D55A-4C44-815A-FD55FFDA3891} + {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB} = {8AA8CB22-1E97-463D-863F-484236E1C24C} + {F917BD5A-7837-4F57-84D6-5C15816DA8DE} = {E51E4E02-C3B8-456B-917C-E5200E062E4E} + {0E43828B-2319-4FB1-A7ED-C93081DB5C45} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {B0C30615-C3E6-446E-9AA2-390C9FE3B209} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {ED38C115-9592-4049-A654-8C575676F17D} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {B764CA55-C9A4-4794-967A-051D45D9FDB0} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {74E97580-8847-45D5-B12B-82409B56E709} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {606456FE-9938-47EB-9327-001915575421} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {3DAA8F7C-7F99-4515-9467-CC88D1D92145} = {606456FE-9938-47EB-9327-001915575421} + {CC00EF84-5144-4FFC-B194-56086D47BFAB} = {606456FE-9938-47EB-9327-001915575421} + {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B} = {3DAA8F7C-7F99-4515-9467-CC88D1D92145} + {A059BFE2-87FD-482C-B1DC-5C8023C79DA0} = {C32CCF68-5D86-4337-BF37-4053C7F01848} + {9AF786F5-B6CA-490B-9926-2CCA9CFF1431} = {671D7B77-DEBE-416D-818D-99411DF479AC} + {3FF07962-C887-495B-9B0E-EA2313B1F4AE} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {8C890579-33B9-4DE8-98B4-52B3E5893F8C} = {3FF07962-C887-495B-9B0E-EA2313B1F4AE} + {8D88D2E1-5DD8-4C59-AE7A-F269F537AC05} = {3FF07962-C887-495B-9B0E-EA2313B1F4AE} + {5EC99271-9105-42BF-B347-69EA5376D305} = {8D88D2E1-5DD8-4C59-AE7A-F269F537AC05} + {0479C1FF-33D0-4315-9846-8031661C6707} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC} = {0479C1FF-33D0-4315-9846-8031661C6707} + {EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5} = {0479C1FF-33D0-4315-9846-8031661C6707} + {AD8951D6-7AF1-40DB-92FE-4517E538E57C} = {8AA8CB22-1E97-463D-863F-484236E1C24C} + {048BE18B-E895-459D-8041-6DADD6FAB130} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {5E7E1C26-2260-4E32-BABB-0083DE286AC4} = {048BE18B-E895-459D-8041-6DADD6FAB130} + {6252AD84-1611-4B1B-BD3D-2D970D51461A} = {048BE18B-E895-459D-8041-6DADD6FAB130} + {8C763585-70E5-4D99-B133-929F9B41645A} = {6252AD84-1611-4B1B-BD3D-2D970D51461A} + {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E} = {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} + {FE5C2C05-5CE4-49E1-857F-626A32882D3B} = {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} + {124BD439-325D-43CA-B829-F39EE332B3F7} = {CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E} + {E91B1973-3022-4231-879D-D8F9E2ABE14C} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {5A65EF5B-99A7-415E-928B-14F05BEBD31F} = {E91B1973-3022-4231-879D-D8F9E2ABE14C} + {54512143-15FA-4A68-B54D-FEFE15AC41D6} = {E91B1973-3022-4231-879D-D8F9E2ABE14C} + {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488} = {5A65EF5B-99A7-415E-928B-14F05BEBD31F} + {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81} = {4A2BBDB4-6130-4C9D-9947-12F39309E8E9} + {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60} = {BA4E26C9-BFF0-48B1-9D53-315F6906AF06} + {6C716EDD-C29C-47F5-8366-28FC209E06E0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {A50E7383-8111-4516-B76E-E4133242B835} = {6C716EDD-C29C-47F5-8366-28FC209E06E0} + {109B0BE9-7083-4473-B528-25425CA84E76} = {6C716EDD-C29C-47F5-8366-28FC209E06E0} + {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B} = {109B0BE9-7083-4473-B528-25425CA84E76} + {75E65F82-D53E-4C41-81DE-57950C05900E} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {D78EB96C-0105-4D6A-A34D-BD271912617E} = {75E65F82-D53E-4C41-81DE-57950C05900E} + {D162B2AE-0343-4257-ABF3-E501DB6CB549} = {75E65F82-D53E-4C41-81DE-57950C05900E} + {DA828BA9-E57F-4579-B6B0-55910247408F} = {D78EB96C-0105-4D6A-A34D-BD271912617E} + {18BD90D6-3D88-44A4-A366-134D12F3F823} = {C95CDA6C-3968-467E-80ED-5A963BE96215} + {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} + {9B4196EC-9485-43FB-B579-C2E50D0E9A3F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} + {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} + {C453850E-43AD-4AE5-82F1-76E0168E7260} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {882011AD-05A3-43F9-9B64-2032982948D6} = {C453850E-43AD-4AE5-82F1-76E0168E7260} + {267DBD91-4ABE-4B34-A788-32EC7B34B4FE} = {C453850E-43AD-4AE5-82F1-76E0168E7260} + {F151BE23-5AB3-488F-B332-FD851BFF4E24} = {882011AD-05A3-43F9-9B64-2032982948D6} + {F5596859-93D3-41D0-8988-FFA24F4A2152} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} + {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {A229CA2F-6218-44ED-A871-BC4033D23025} = {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} + {D07E813A-1685-444B-8DB1-6FFD71B53E21} = {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} + {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F} = {D07E813A-1685-444B-8DB1-6FFD71B53E21} + {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {F15B5202-B450-4C93-9EDE-1BC0BB1D780E} = {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} + {3BB43F5A-E05D-4E59-9ACE-053C60608E33} = {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} + {466BAAFF-79D5-47D0-8A61-71EED9E94B17} = {3BB43F5A-E05D-4E59-9ACE-053C60608E33} + {2B3D4217-C4E9-42C0-853F-0181BC75CE55} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} + {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} = {DBC6C89D-A932-4F99-9382-7405A0045988} + {CBA9FB82-F61D-48ED-9037-293853C1CC29} = {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} + {687390CC-01CC-4D86-B21F-F22F262106C1} = {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} + {3E532ECC-8E02-4BAE-9606-6A1007DD24B1} = {687390CC-01CC-4D86-B21F-F22F262106C1} + {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {A7FC5090-631A-4580-8E00-06A658482C23} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {085AE7C1-E8BB-4564-8473-392EBBB835B3} = {A7FC5090-631A-4580-8E00-06A658482C23} + {6035BA5E-4E7E-40FD-8509-70C86798CA56} = {A7FC5090-631A-4580-8E00-06A658482C23} + {02CE4043-C061-4551-B3F2-E17E6C889814} = {085AE7C1-E8BB-4564-8473-392EBBB835B3} + {6B7D5CB4-30B3-49BF-B815-C43FECBC6291} = {8AA8CB22-1E97-463D-863F-484236E1C24C} + {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {081252D3-4986-4559-81B2-F39F9E0C50B1} = {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} + {3A5ED925-1747-4373-9A2A-F1CCB29BB53A} = {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} + {10AD62E8-B3EB-4C38-BA77-C75482EF9082} = {3A5ED925-1747-4373-9A2A-F1CCB29BB53A} + {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} + {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1} = {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} + {89C8FCEF-B6F5-4B9D-9010-F224262BD28A} = {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} + {FFA23527-1265-4CC8-931D-E0882D76C8C3} = {89C8FCEF-B6F5-4B9D-9010-F224262BD28A} + {0C05F31F-FB0F-4CFB-8CCC-665565434936} = {544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E} + {713F4271-0407-4AE0-B982-DE22A0D0857E} = {0C05F31F-FB0F-4CFB-8CCC-665565434936} + {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0} = {0C05F31F-FB0F-4CFB-8CCC-665565434936} + {723D465E-39AA-4297-971E-3871EF832398} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {02318A44-AD0C-4656-B601-1EE9575B0E79} = {723D465E-39AA-4297-971E-3871EF832398} + {A110CB79-CF10-485F-95DA-678A983A030B} = {723D465E-39AA-4297-971E-3871EF832398} + {30A8F1D0-BB6C-486C-AC6B-92EC1551983A} = {A110CB79-CF10-485F-95DA-678A983A030B} + {7E466C3D-9630-4F98-BABC-43F23716B434} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {3AC2D665-8360-4367-9606-F633CA743C9E} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} = {F17D89F6-2993-4583-93B6-57B2025859E0} + {F5BE2CAF-E124-40A4-8C07-A2023C959B84} = {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} + {1372483D-0BE9-4A52-9BDC-75A15120279F} = {F5BE2CAF-E124-40A4-8C07-A2023C959B84} + {F0970BBA-CC73-4639-BC29-96A571D7BA36} = {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} + {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA} = {D5471726-76C5-46DD-9931-6328C6A3D375} + {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} = {91DE515A-DFF9-4B75-809C-F56C51222310} + {1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A} = {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} + {78A63BD8-D52B-4514-8FEE-9A03C0B74023} = {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} + {78EABAC3-0248-4802-9C01-5A00E84B85C5} = {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} + {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} = {78EABAC3-0248-4802-9C01-5A00E84B85C5} + {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E} = {78EABAC3-0248-4802-9C01-5A00E84B85C5} + {5172C617-0E49-40FD-8579-1DC41AF03EE1} = {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} + {2F106C24-1825-4C6F-8581-0B8ED871CD80} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} + {B7DF35D6-7124-40D5-A219-82894CD0ACD3} = {2F106C24-1825-4C6F-8581-0B8ED871CD80} + {3BA971E2-D89E-41B8-9C29-89F256B7E873} = {2F106C24-1825-4C6F-8581-0B8ED871CD80} + {A3935804-D2A7-4195-AF7D-A62A858E7D39} = {B7DF35D6-7124-40D5-A219-82894CD0ACD3} + {AA8BDD23-315D-4784-93D2-12E7EB577675} = {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} + {481EEB00-F764-4ACB-B9EC-0611C6750CCB} = {AA8BDD23-315D-4784-93D2-12E7EB577675} + {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A} = {AA8BDD23-315D-4784-93D2-12E7EB577675} + {E1829984-508F-4BED-A11D-E43624064DFD} = {481EEB00-F764-4ACB-B9EC-0611C6750CCB} + {C1D6A7E4-A0AF-4841-92A0-FA930628E396} = {C7E24134-762D-460C-8882-11341328C707} + {0507CBD7-CA15-4DFB-8B40-80743C3BF7AE} = {C1D6A7E4-A0AF-4841-92A0-FA930628E396} + {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC} = {C1D6A7E4-A0AF-4841-92A0-FA930628E396} + {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C} = {0507CBD7-CA15-4DFB-8B40-80743C3BF7AE} + {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {96550752-20E4-475E-80AF-9426C6560D1A} = {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} + {569397A1-B0BA-4B96-9E6A-00D16FF16FBB} = {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} + {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E} = {96550752-20E4-475E-80AF-9426C6560D1A} + {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} = {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} + {B108EB73-C0E6-4B16-96C8-29BD619D8717} = {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} + {59184098-467E-47D5-A738-E4792F09079C} = {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} + {EA78E753-FAB5-4279-B9D5-2E7324D110F2} = {B108EB73-C0E6-4B16-96C8-29BD619D8717} + {3354B893-1DDF-4E80-BCB9-279A370734D1} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {B12E28B5-B206-43CC-8597-E0D013EB3889} = {3354B893-1DDF-4E80-BCB9-279A370734D1} + {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D} = {3354B893-1DDF-4E80-BCB9-279A370734D1} + {FF019156-8C03-4D25-9D83-ED668F501321} = {B12E28B5-B206-43CC-8597-E0D013EB3889} + {184472CA-143C-4628-BA38-E901C7863E7C} = {8749617F-D55A-4C44-815A-FD55FFDA3891} + {A73E7975-989F-4416-B531-C3CC4D25D175} = {184472CA-143C-4628-BA38-E901C7863E7C} + {36D998D7-9685-497E-8B92-2FD429D27B99} = {BD86951F-CB52-412C-A765-FA48D704C1DD} + {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B} = {36D998D7-9685-497E-8B92-2FD429D27B99} + {CF493B2A-679A-44E9-ABB7-B9CD9AF44450} = {36D998D7-9685-497E-8B92-2FD429D27B99} + {A447201E-D3E7-47C0-8E87-A919A272FCB1} = {CF493B2A-679A-44E9-ABB7-B9CD9AF44450} + {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {01926B24-03D6-4ACC-ABB7-FF90E5861557} = {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} + {12449481-3CDD-446F-8968-5816E65F62F6} = {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} + {0C1F063F-1C44-450D-90FC-A9A95AA03B97} = {01926B24-03D6-4ACC-ABB7-FF90E5861557} + {203EF7C7-F76D-4004-9472-A7AAAA581C6E} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {4B15C7E3-990E-4427-A7A7-842410E30B86} = {203EF7C7-F76D-4004-9472-A7AAAA581C6E} + {BADF052D-108C-4E33-A96F-B4F8B42B8F5B} = {203EF7C7-F76D-4004-9472-A7AAAA581C6E} + {4F04D404-22A8-499F-B22D-6C85D327A5A9} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {9311C387-6BF3-40AD-8A12-8E2FF66B36CD} = {4F04D404-22A8-499F-B22D-6C85D327A5A9} + {A40738A5-9C8D-4E7C-ADB6-83E9741F958E} = {4F04D404-22A8-499F-B22D-6C85D327A5A9} + {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984} = {9311C387-6BF3-40AD-8A12-8E2FF66B36CD} + {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {FEF77B5A-1A66-477F-8E52-FB7812F33B84} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {239BAFE1-CBF5-49B6-AC92-A5B77D846717} = {B80C99F7-CFC0-409B-AFDD-23E2C8775327} + {C1361C6F-D933-4A99-919D-5644B9E1BC9A} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {D47B0BF3-B61F-4F83-BD73-3E749DFD470C} = {C1361C6F-D933-4A99-919D-5644B9E1BC9A} + {9E466827-2772-47B4-B64D-8ADB1C0DE70B} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {1B14DD12-262C-407A-9CCD-09E03DFE08B5} = {9E466827-2772-47B4-B64D-8ADB1C0DE70B} + {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03} = {1B14DD12-262C-407A-9CCD-09E03DFE08B5} + {A47BEE72-D1FA-4F02-96E1-84A70D7142B0} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {3C7605E8-136C-4282-B773-80C18021F73B} = {A47BEE72-D1FA-4F02-96E1-84A70D7142B0} + {7E97BEAE-FC4E-480F-8D7A-A7960A553129} = {3C7605E8-136C-4282-B773-80C18021F73B} + {23E4CD22-3FBE-415D-B16A-C661CB784C0D} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {23CAD9E3-4913-4CC0-93DF-91494B3CFC44} = {23E4CD22-3FBE-415D-B16A-C661CB784C0D} + {17E22697-CB77-4F38-AB13-BBDBD53B7829} = {23E4CD22-3FBE-415D-B16A-C661CB784C0D} + {7EDC253C-2B62-4444-B406-CC4786B93C47} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {B9C34E27-85BD-457D-B2CF-CA289979ED6C} = {7EDC253C-2B62-4444-B406-CC4786B93C47} + {0BB488AA-E23E-4697-BBD9-4A17B21BFCD7} = {7EDC253C-2B62-4444-B406-CC4786B93C47} + {13E39D67-ED46-4B2A-B66E-5B2415B5278C} = {B9C34E27-85BD-457D-B2CF-CA289979ED6C} + {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} + {B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1} = {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} + {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} = {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} + {C962A8DB-8D12-4B36-B22B-9B938565ABF7} = {B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1} + {F52EFDBF-3467-4068-8BE1-E94643ADE23B} = {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} + {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B} = {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} + {C6103552-7010-4353-9369-F6545D6A4E7B} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} + {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} = {C6103552-7010-4353-9369-F6545D6A4E7B} + {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9} = {C6103552-7010-4353-9369-F6545D6A4E7B} + {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} + {4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16} = {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} + {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B} = {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} + {B71872DC-C58D-41A7-B24F-78D8136EE49E} = {DBC6C89D-A932-4F99-9382-7405A0045988} + {17A4EBF1-A1F8-475F-A304-A9B7F7B58C82} = {B71872DC-C58D-41A7-B24F-78D8136EE49E} + {99621A27-6E31-4D71-A395-FEB610337646} = {B71872DC-C58D-41A7-B24F-78D8136EE49E} + {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A} = {17A4EBF1-A1F8-475F-A304-A9B7F7B58C82} + {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} + {970D9570-A24B-4329-A888-F8DE9199A600} = {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} + {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} + {D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA} = {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} + {F3499920-32A2-4E5E-9D9E-4D04B7399C49} = {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} + {F0351FC4-759D-4CFE-8995-4C280771E369} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {F6824EF1-9F19-4727-8D35-E63AC59F816F} = {F0351FC4-759D-4CFE-8995-4C280771E369} + {9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA} = {F0351FC4-759D-4CFE-8995-4C280771E369} + {82980954-71E5-48CE-BA13-00B841707B04} = {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} + {8A5A02DE-D320-489F-86D9-278022BDFE00} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {FDA130ED-6502-4357-BB48-A6C080BDB511} = {8A5A02DE-D320-489F-86D9-278022BDFE00} + {A857BC05-B321-4E1F-8FB9-CAA9BE65118B} = {8A5A02DE-D320-489F-86D9-278022BDFE00} + {D4CA169B-7E84-4AE3-BE82-F232277D4CD4} = {A857BC05-B321-4E1F-8FB9-CAA9BE65118B} + {2FFEB068-12D2-4EF6-B3CE-767F2E223177} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} = {C12ECFF4-2767-4764-8B98-85A239B9E756} + {91D22CEA-4C96-4643-B486-6ED49FA1124D} = {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} + {223CF15A-83B8-4E43-9645-50D45D9470A5} = {9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA} + {40E200ED-D7B8-4FFD-B4FC-753E56DA831E} = {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} + {4E23D21F-8827-4F6B-BA35-C8FE4457027C} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} = {4E23D21F-8827-4F6B-BA35-C8FE4457027C} + {2F78C85C-A670-4795-8435-5B4CAF5C05F2} = {4E23D21F-8827-4F6B-BA35-C8FE4457027C} + {B7A42999-EA3D-4A03-BFB6-72CBEDD42266} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {CD2D9129-08F4-4B97-91E9-DBA857EAFE63} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {D320C6B3-23A8-4D7E-A9EB-75E15E788191} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {376F896D-DB61-471D-8911-98609A9D1612} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {402F9677-CCA1-4ED9-872A-9F09D15BC626} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {072B7F1E-3207-42F6-A55F-EF004D793304} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {AC2E5FB5-5E60-4D95-9281-29153C3065C0} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} + {0675BC5E-E2F5-45D8-8484-13D3A0694B31} = {D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA} + {38B25115-B6FF-49EC-BDE8-26C9416CCE5B} = {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} + {2D765C12-335D-4663-A8A3-48C7B45E9F95} = {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} + {270770CD-BE88-4FFA-98DA-9171B39199C9} = {4B15C7E3-990E-4427-A7A7-842410E30B86} + {1D874861-3573-4CA1-B61D-5FE9224934ED} = {AEF8B139-CB86-4DB1-944D-2D859C8669DA} + {6F2BB265-1CDD-46AB-9128-7CE3BAC71666} = {1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A} + {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA} = {EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5} + {9365F114-A7B5-4F38-A089-EE8DF13C4F9D} = {970D9570-A24B-4329-A888-F8DE9199A600} + {206850DF-E549-4AA4-AF42-F00B762E20FE} = {4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16} + {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} + {245DC3F9-953F-41D6-86F9-7945B640A923} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} + {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} + {FE597532-2349-4851-A399-DBC5D37126BC} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} + {86291CCC-A5B8-427E-A68C-F75AE14F295A} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} + {5224C344-5797-4D05-A4AA-835E576F6B9D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {A231D471-D435-43BE-BDAE-DBC14BC6CCE8} = {4242C2C7-8B81-41D4-A716-D717B6424C50} + {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9} = {713F4271-0407-4AE0-B982-DE22A0D0857E} + {2CD36743-6F9C-41DA-8AA8-68B7E58F2661} = {40E200ED-D7B8-4FFD-B4FC-753E56DA831E} + {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF} = {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} + {903369E3-E454-42DB-8939-70C64049D1C2} = {109B0BE9-7083-4473-B528-25425CA84E76} + {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {C4BA8BCA-19F8-41F5-8253-03EC1B63694A} = {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} + {30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A} = {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} + {CCDF251E-DF74-4623-93F9-301B96F14182} = {30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A} + {6AF2F8E5-423F-4EF7-9AB6-1978792598B7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} + {598D3695-BEB7-4BD7-AE6A-C296F36265E7} = {0BB488AA-E23E-4697-BBD9-4A17B21BFCD7} + {372B055D-2279-47D2-B1A8-AB1E5670202F} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {8908AAA5-53DD-4526-AAF8-01308F1316EF} = {372B055D-2279-47D2-B1A8-AB1E5670202F} + {B167E0C6-F2D8-4B4F-B814-578B72B083BE} = {372B055D-2279-47D2-B1A8-AB1E5670202F} + {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4} = {B167E0C6-F2D8-4B4F-B814-578B72B083BE} + {95590089-FF1E-4909-8E24-ED5FB75B8CFE} = {E97B3C9A-7F99-4482-989D-56146C87055A} + {C122523F-ADF9-4A16-9705-327D7E78F93D} = {95590089-FF1E-4909-8E24-ED5FB75B8CFE} + {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} = {95590089-FF1E-4909-8E24-ED5FB75B8CFE} + {169CC53A-9160-4A49-ABEF-9E7C3F78E45C} = {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} + {0FFE9335-C96D-4A88-96BF-66C03D3EE980} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} + {1D1CA5FF-033A-438C-A706-DFED47844751} = {0FFE9335-C96D-4A88-96BF-66C03D3EE980} + {B0684D65-B983-4BA6-89F2-C4CB24389DFC} = {0FFE9335-C96D-4A88-96BF-66C03D3EE980} + {03B2E5AC-CFAC-47FE-9767-0872C8151CFC} = {1D1CA5FF-033A-438C-A706-DFED47844751} + {380520E6-12D0-4DD3-AADF-BD27A6F6702F} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} + {A29C80C8-E116-4344-A49F-7E58529DC338} = {380520E6-12D0-4DD3-AADF-BD27A6F6702F} + {D017E544-F3D7-49DE-913C-CD9D12D23007} = {380520E6-12D0-4DD3-AADF-BD27A6F6702F} + {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78} = {A29C80C8-E116-4344-A49F-7E58529DC338} + {150569EE-4053-4097-98EE-A455287610B5} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {46394970-4495-408F-8A9C-31BEBC47E899} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9} = {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} + {9D13043C-8A59-461A-9A4D-3735D06CED77} = {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} + {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED} = {9D13043C-8A59-461A-9A4D-3735D06CED77} + {0457B9CA-A2AE-417C-869A-980B19A9FC1A} = {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} + {F76C3DC7-8C20-45EC-A321-88BCE88E5070} = {0457B9CA-A2AE-417C-869A-980B19A9FC1A} + {449B5AF2-688B-4E94-96F1-A6599EC17204} = {0457B9CA-A2AE-417C-869A-980B19A9FC1A} + {CD6081AC-0E17-46D5-A335-34D6EA497798} = {449B5AF2-688B-4E94-96F1-A6599EC17204} + {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {2BDEE5C8-5611-4EA7-BE69-56B1CBC84065} = {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} + {B971549F-B16D-4B0B-AC58-1CE85032E284} = {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} + {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE} = {2BDEE5C8-5611-4EA7-BE69-56B1CBC84065} + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E} = {27F8F5B1-F535-4116-BB16-63454D21D13B} + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B} = {5DA778E0-E827-4A63-844B-1166BEEB8897} + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F} = {5DA778E0-E827-4A63-844B-1166BEEB8897} + {A65353C4-D300-421D-AD04-5D69AF02BD9F} = {D47B0BF3-B61F-4F83-BD73-3E749DFD470C} + {77601D70-30C7-48E3-86C1-DF311FFA89C1} = {23CAD9E3-4913-4CC0-93DF-91494B3CFC44} + {55025FED-EB56-4875-AF18-C48F30E20991} = {17E22697-CB77-4F38-AB13-BBDBD53B7829} + {07F091E6-76EA-4A01-AB96-BF48EB87412A} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {16681455-B8C2-448B-946F-F2053916B2B5} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {0A83C802-7117-4D78-98A5-C67BD70AF1A6} = {16681455-B8C2-448B-946F-F2053916B2B5} + {9E6A4897-5F52-4893-B090-EF5B941AC709} = {16681455-B8C2-448B-946F-F2053916B2B5} + {C2080A10-C700-41EB-98A2-0914F077F04F} = {9E6A4897-5F52-4893-B090-EF5B941AC709} + {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3} = {9E6A4897-5F52-4893-B090-EF5B941AC709} + {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB} = {9E6A4897-5F52-4893-B090-EF5B941AC709} + {1FA13E27-1A15-4019-9A55-724A992EA964} = {9E6A4897-5F52-4893-B090-EF5B941AC709} + {1E3CB802-08BC-4F4F-9760-DA5D09E0202A} = {9E6A4897-5F52-4893-B090-EF5B941AC709} + {1CE1A084-8585-4C87-939C-281A46EF8B10} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC} = {1CE1A084-8585-4C87-939C-281A46EF8B10} + {CB7AB7D6-C0E9-4320-A691-1775D62A4933} = {1CE1A084-8585-4C87-939C-281A46EF8B10} + {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD} = {FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC} + {23FBF746-20A2-43FF-B248-5EE6C44C39F0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {41DFD1BB-2C66-4548-B43F-2593AE90C36E} = {23FBF746-20A2-43FF-B248-5EE6C44C39F0} + {4657A98F-6D05-48EB-864D-E3D0DCA658C5} = {23FBF746-20A2-43FF-B248-5EE6C44C39F0} + {853477A1-9B58-4893-AFDD-577471C62DB1} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {C6E0BE66-399B-449A-B3A0-3D594EFFE1A1} = {853477A1-9B58-4893-AFDD-577471C62DB1} + {8EEDC98C-AC87-490C-8C36-846EE82E9D0D} = {853477A1-9B58-4893-AFDD-577471C62DB1} + {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF} = {C6E0BE66-399B-449A-B3A0-3D594EFFE1A1} + {6AF1C69A-3293-4ADC-AB1B-B814A709D15F} = {D07E813A-1685-444B-8DB1-6FFD71B53E21} + {6E207804-A991-42DD-BE14-AB8E18940162} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {71FE0FFA-F897-4067-8687-A033B5D0BB5D} = {6E207804-A991-42DD-BE14-AB8E18940162} + {494AAADA-7CF7-44A4-AFB2-4AEC664151E3} = {6E207804-A991-42DD-BE14-AB8E18940162} + {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3} = {494AAADA-7CF7-44A4-AFB2-4AEC664151E3} + {B98533B9-CA48-4F0D-961B-C95BD5158391} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} + {F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5} = {B98533B9-CA48-4F0D-961B-C95BD5158391} + {71EBC24D-5B32-4E76-ADF3-DE0017946108} = {B98533B9-CA48-4F0D-961B-C95BD5158391} + {1ACC6BA0-8108-4BFA-9A75-9063B5E07493} = {F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5} + {643EF07C-36AD-4796-9748-2F630631CF16} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {27443DF5-9D37-47E8-A350-4AFD103913CC} = {643EF07C-36AD-4796-9748-2F630631CF16} + {D80EB935-8B49-4D46-8474-F457C5BFB27C} = {643EF07C-36AD-4796-9748-2F630631CF16} + {212208FF-76E1-4864-ADA4-AAC7AE0F2981} = {27443DF5-9D37-47E8-A350-4AFD103913CC} + {BD86951F-CB52-412C-A765-FA48D704C1DD} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {2B794146-DFEE-475A-B919-7D3ED48587B8} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {A1917BD0-881F-4775-88D9-38D42D448CF5} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {2486B48D-D4A2-4505-BF50-F33B2E15DA97} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {15C7A398-35B0-4035-AE4B-FE84026D0D9E} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {91DE515A-DFF9-4B75-809C-F56C51222310} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {C12ECFF4-2767-4764-8B98-85A239B9E756} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {DBC6C89D-A932-4F99-9382-7405A0045988} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {10C3B2B1-FE8F-4AC6-A469-51573060A45B} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {818BF624-10A7-45B2-9BEE-4C411CD9CA06} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {D3548F8A-A066-41AC-BD3D-6AAECE58A242} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {C7E24134-762D-460C-8882-11341328C707} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {C95CDA6C-3968-467E-80ED-5A963BE96215} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {F17D89F6-2993-4583-93B6-57B2025859E0} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {78E463DA-0FA1-4AAE-A281-D3297C9388C9} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} + {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} = {A1917BD0-881F-4775-88D9-38D42D448CF5} + {FAFDCB37-4678-4B8A-884D-F9978161CDF2} = {A1917BD0-881F-4775-88D9-38D42D448CF5} + {E97B3C9A-7F99-4482-989D-56146C87055A} = {A1917BD0-881F-4775-88D9-38D42D448CF5} + {1D73C60C-163D-4537-8B16-246FAE87B80F} = {73286182-0507-4B61-A5BE-67B5C1A5D637} + {73286182-0507-4B61-A5BE-67B5C1A5D637} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} = {73286182-0507-4B61-A5BE-67B5C1A5D637} + {71290423-6A82-4263-B592-8266EAB58D9B} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} + {E15DD562-8ED5-4311-BE65-DEA0DB592FB2} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} + {B8578827-6DB4-491A-87B0-36D95AE008D3} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} + {2A780BB9-6C85-41A9-98F1-8B13B5C54093} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {1C955941-ADF9-478A-B17C-24C5F6434E40} = {2A780BB9-6C85-41A9-98F1-8B13B5C54093} + {0F796184-BC8F-4C32-8EC4-EF13D1229D4A} = {2A780BB9-6C85-41A9-98F1-8B13B5C54093} + {6F6C93D0-2FBB-4633-BEDA-4F194625C098} = {1C955941-ADF9-478A-B17C-24C5F6434E40} + {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79} = {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} + {8E1C6F25-B4BA-4652-9B89-A2805F018385} = {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} + {4205BFDF-E03D-4148-844A-A87B72888F68} = {8E1C6F25-B4BA-4652-9B89-A2805F018385} + {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD} = {01926B24-03D6-4ACC-ABB7-FF90E5861557} + {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {AC604844-C136-4204-B73F-2AD19EF389E0} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {97AF0484-5E33-4DF9-802D-6DCA15A93F38} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {B23C6117-7396-4FDA-A08D-7E329CF453FE} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {0F507104-F919-44C6-A940-CAE7EAE4FD3B} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {92F2B28F-AD70-47D2-BC9A-437C862908D4} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {0C14E200-87E9-4F1D-93D2-4738B0D6F918} = {1A91B800-DC03-4199-AE38-4BD57195416F} + {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {7311794D-7D2F-47E8-A5B0-C216CBD64A13} = {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} + {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA} = {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} + {83957117-1E62-4C20-90C4-0796D210444D} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} + {5AE56DA7-0299-409F-A465-E9B51B293DA9} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} + {26DE539B-517B-489D-BB9C-78D4A7B0BE3A} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {A259504D-1EB9-4B1F-955A-95713EF4733A} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} + {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8} = {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} + {7CB0117E-E2DA-45D6-BE69-46CDE6B7A148} = {A1917BD0-881F-4775-88D9-38D42D448CF5} + {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} = {7CB0117E-E2DA-45D6-BE69-46CDE6B7A148} + {374EE6C8-205D-4416-92CB-AC1CCB279226} = {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} + {25256C84-8B6B-4ED2-910E-DF0A70834AB6} = {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} + {49345834-BE10-4E23-AF72-A80EF5E82932} = {374EE6C8-205D-4416-92CB-AC1CCB279226} + {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} + {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} + {3102742F-8C87-4C84-B257-1A49DDB3D6BD} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} + {831C87F3-4925-4311-83A4-C07CE4CD109E} = {4657A98F-6D05-48EB-864D-E3D0DCA658C5} + {810BF526-53F8-4DFB-A32A-A67CB5FFF785} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {5A2538C7-D110-4DFB-A77B-C328CDDF7848} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} + {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} = {DBC6C89D-A932-4F99-9382-7405A0045988} + {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6} = {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} + {2637750E-FF22-4AFF-882D-D80C3A6D1D5B} = {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} + {5787131C-A3BC-4BB4-BC05-C792AF28A118} = {2637750E-FF22-4AFF-882D-D80C3A6D1D5B} + {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} = {F17D89F6-2993-4583-93B6-57B2025859E0} + {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0} = {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} + {DC8844DD-3E56-4C6E-8353-85D14004042E} = {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} + {C08B6F18-0B02-41B7-8070-92E9A1F65B21} = {DC8844DD-3E56-4C6E-8353-85D14004042E} + {B3B151AE-7C26-4313-AA47-61397791BA92} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {FAD15B5F-1912-44BF-AF96-1EB496683E87} = {B3B151AE-7C26-4313-AA47-61397791BA92} + {94B3A671-D329-47FF-8635-6A3CF8238DFE} = {B3B151AE-7C26-4313-AA47-61397791BA92} + {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68} = {94B3A671-D329-47FF-8635-6A3CF8238DFE} + {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA} = {94B3A671-D329-47FF-8635-6A3CF8238DFE} + {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {C1728E08-5B75-4146-B836-FD046A1BD741} = {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} + {155C1A41-E529-41AC-B1C1-461ADAC30023} = {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} + {EE44BFA9-03F1-4018-A59F-FE7F1523E845} = {C1728E08-5B75-4146-B836-FD046A1BD741} + {EB956E43-A4BE-4F79-AF92-D725604DBE76} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {ECA644FF-D647-4CA1-80F0-7C730D57130E} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} + {2674E933-02F5-4DBD-B14B-08001D49EDB4} = {ECA644FF-D647-4CA1-80F0-7C730D57130E} + {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF} = {ECA644FF-D647-4CA1-80F0-7C730D57130E} + {10BD048E-0768-4791-A34B-F94CD9A4D5B0} = {2674E933-02F5-4DBD-B14B-08001D49EDB4} + {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {6836D74A-3003-45C5-9DBA-0CE46450A55A} = {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} + {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} = {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} + {E718B06A-FEAF-4E11-9344-E81272E214AA} = {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} + {DD749A41-50A3-4DB4-A84F-4372BDFCB742} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} + {4E0052C2-559D-4509-9C42-C6451B1F1FFC} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} + {BEF5B037-DAB7-43C6-8A5C-EB749573C815} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} + {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} + {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9} = {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} + {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2} = {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} + {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {768E2B04-FBE8-4464-B5DE-F5AA010E9D33} = {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} + {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} + {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} + {B2910299-B232-4CAB-AA13-591ABDDC0ED4} = {A3F37EFB-9686-4074-9962-5F731C52D919} + {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} + {753F764D-EA21-43A0-B761-6E9B43D8C90B} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {C182D69A-FE45-46BF-8522-76E0BC962FFB} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} + {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} + {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B} = {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} + {8D0C58C8-B325-48A1-A500-7E8FDC28C272} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {F288D725-B26F-4E32-B870-F391AF4211EB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} + {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} + {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2} = {F288D725-B26F-4E32-B870-F391AF4211EB} + {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} + {2E207B06-0C55-44FA-8334-62D791DB6105} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} + {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6} = {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} + {85EA8B09-1C8D-4E67-9770-C1AD0A550DED} = {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} + {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} = {2B794146-DFEE-475A-B919-7D3ED48587B8} + {13D97CCB-2CFF-4AB8-A170-701525DA740B} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} + {70A3BC90-AB6A-4498-BFDE-07AA25823036} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} + {A470E563-7ADD-4A76-91AE-C1190134D3FA} = {13D97CCB-2CFF-4AB8-A170-701525DA740B} + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} + {38944011-FA3C-4557-9049-B41B6168F6C0} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {00085539-EB03-49CE-8518-13544FD480BB} = {38944011-FA3C-4557-9049-B41B6168F6C0} + {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} = {38944011-FA3C-4557-9049-B41B6168F6C0} + {95670172-AB31-4239-8805-346DDD57983F} = {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} + {E2A8BDCC-626E-450D-918F-785E3777793E} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} + {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4} = {E2A8BDCC-626E-450D-918F-785E3777793E} + {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} = {E2A8BDCC-626E-450D-918F-785E3777793E} + {3885F704-2844-4EDD-9706-BD1B0C85A29B} = {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D} = {F288D725-B26F-4E32-B870-F391AF4211EB} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} + EndGlobalSection +EndGlobal diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Datasheet/SH1106-SINOWEALTH.pdf b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Datasheet/SH1106-SINOWEALTH.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Datasheet/SH1106-SINOWEALTH.pdf rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Datasheet/SH1106-SINOWEALTH.pdf diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Datasheet/SH1107.pdf b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Datasheet/SH1107.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9c472f309c3a7cabb2e5e05c77b2a02da3c09266 GIT binary patch literal 508404 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

      c>zdEfIy9ew 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%0Acixu-& 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

      +4ijQ}N{}oMd9Tj1b`- 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 literal 0 HcmV?d00001 diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj similarity index 77% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj index d456daa683..721a5726e4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Displays.Sh1106.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Displays.Sh110x.csproj @@ -1,19 +1,19 @@ - + true icon.png Wilderness Labs, Inc netstandard2.1 Library - Sh1106 + Sh110x Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Displays.Sh1106 https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Displays, LCD, Sh1106 + Meadow,Meadow.Foundation,Displays,LCD,Sh1106,SH1107,oled,monochrome 0.1.0 true - Sh1106 SPI monochrome OLED display + S1106 and SH1107 SPI and I2C monochrome OLED displays diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1106.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1106.cs new file mode 100644 index 0000000000..0a4d33f390 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1106.cs @@ -0,0 +1,92 @@ +using Meadow.Hardware; +using System.Threading; + +namespace Meadow.Foundation.Displays +{ + ///

      + /// Represents the Sh1106 family of displays + /// + public class Sh1106 : Sh110x + { + /// + /// Create a new Sh1106 object + /// + /// I2C bus connected to display + /// I2C address + /// Display width in pixels + /// Display height in pixels + public Sh1106(II2cBus i2cBus, byte address, int width, int height) + : base(i2cBus, address, width, height) + { } + + /// + /// Create a new Sh1106 object + /// + /// SPI bus connected to display + /// Chip select pin + /// Data command pin + /// Reset pin + /// Display width in pixels + /// Display height in pixels + public Sh1106(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin, int width = 128, int height = 64) + : base(spiBus, chipSelectPin, dcPin, resetPin, width, height) + { } + + /// + /// Create a new Sh1106 display object + /// + /// SPI bus connected to display + /// Chip select output port + /// Data command output port + /// Reset output port + /// Display width in pixels + /// Display height in pixels + public Sh1106(ISpiBus spiBus, + IDigitalOutputPort chipSelectPort, + IDigitalOutputPort dataCommandPort, + IDigitalOutputPort resetPort, + int width = 128, int height = 64) + : base(spiBus, chipSelectPort, dataCommandPort, resetPort, width, height) + { } + + /// + /// Initialize the Sh1106 + /// + protected override void Initialize() + { + Reset(); + + SendCommand(DisplayCommand.DisplayOff); + SendCommand(DisplayCommand.SetDisplayClockDiv); + SendCommand(0x80); + + SendCommand(DisplayCommand.MultiplexModeSet); + SendCommand(DisplayCommand.MultiplexDataSet); + + SendCommand(DisplayCommand.SetDisplayOffset); + SendCommand((byte)0); + + SendCommand(DisplayCommand.DisplayStartLine); + + SendCommand(DisplayCommand.SegInvNormal); + SendCommand(0xC0); + + SendCommand(DisplayCommand.SetComPins); + SendCommand(0x12); + + SendCommand(DisplayCommand.SetContrast); + SendCommand(0x0F); + + SendCommand(0x30); + SendCommand(DisplayCommand.DisplayOnResume); + + SendCommand(DisplayCommand.SetDisplayClockDiv); + SendCommand(0xF0); + + SendCommand(DisplayCommand.DisplayVideoNormal); + + Thread.Sleep(100); + SendCommand(DisplayCommand.DisplayOn); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs new file mode 100644 index 0000000000..b7fdd2b937 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs @@ -0,0 +1,105 @@ +using Meadow.Hardware; +using System.Threading; + +namespace Meadow.Foundation.Displays +{ + /// + /// Represents the Sh1107 family of displays + /// + public class Sh1107 : Sh110x + { + /// + /// Create a new Sh1107 object + /// + /// I2C bus connected to display + /// I2C address + /// Display width in pixels + /// Display height in pixels + public Sh1107(II2cBus i2cBus, byte address, int width = 128, int height = 128) + : base(i2cBus, address, width, height) + { } + + /// + /// Create a new Sh1107 object + /// + /// SPI bus connected to display + /// Chip select pin + /// Data command pin + /// Reset pin + /// Display width in pixels + /// Display height in pixels + public Sh1107(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin, int width = 128, int height = 128) + : base(spiBus, chipSelectPin, dcPin, resetPin, width, height) + { } + + /// + /// Create a new Sh1107 display object + /// + /// SPI bus connected to display + /// Chip select output port + /// Data command output port + /// Reset output port + /// Display width in pixels + /// Display height in pixels + public Sh1107(ISpiBus spiBus, + IDigitalOutputPort chipSelectPort, + IDigitalOutputPort dataCommandPort, + IDigitalOutputPort resetPort, + int width = 128, int height = 128) + : base(spiBus, chipSelectPort, dataCommandPort, resetPort, width, height) + { } + + /// + /// Initialize the Sh1107 + /// + protected override void Initialize() + { + SendCommand(DisplayCommand.DisplayOff); + SendCommand(DisplayCommand.SetDisplayClockDiv); + SendCommand(0x51); + + SendCommand(DisplayCommand.SetContrast); + SendCommand(0x4F); + + SendCommand(DisplayCommand.DCDC); + SendCommand(0x8A); + + SendCommand(DisplayCommand.SetSegmentRemap); + SendCommand(DisplayCommand.ComScanInc); + + SendCommand(DisplayCommand.DisplayStartLine); + SendCommand((byte)0); + + SendCommand(DisplayCommand.SegInvNormal); + SendCommand(0xC0); + + SendCommand(DisplayCommand.SetPrecharge); + SendCommand(0x22); + + SendCommand(DisplayCommand.SetVComDetect); + SendCommand(0x35); + + SendCommand(DisplayCommand.DisplayOnResume); + SendCommand(DisplayCommand.DisplayVideoNormal); + + if (Width == 128 && Height == 128) + { + SendCommand(DisplayCommand.SetDisplayOffset); + SendCommand(0x40); + SendCommand(DisplayCommand.MultiplexModeSet); + SendCommand(0x07F); + } + else + { + SendCommand(DisplayCommand.SetDisplayOffset); + SendCommand(0x60); + SendCommand(DisplayCommand.MultiplexModeSet); + SendCommand(DisplayCommand.MultiplexDataSet); + } + + Thread.Sleep(100); + + SendCommand(DisplayCommand.DisplayOn); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs similarity index 61% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.Enums.cs rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs index 09599643ec..343c145196 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs @@ -1,9 +1,6 @@ namespace Meadow.Foundation.Displays { - /// - /// Provide an interface to the Sh1106 family of displays - /// - public partial class Sh1106 + public partial class Sh110x { ///
      /// Allow the programmer to set the scroll direction @@ -28,17 +25,17 @@ public enum ScrollDirection LeftAndVertical } - enum DisplayCommand : byte + internal enum DisplayCommand : byte { + DCDC = 0xAD, DisplayOff = 0xAE, DisplayOn = 0xAF, DisplayOnResume = 0xA4, DisplayStartLine = 0x40, - PageAddress = 0xB0, + SetPageAddress = 0xB0, ColumnAddressHigh = 0x10, ColumnAddressLow = 0x02, - SetPageAddress = 0xB0, - ColumnAddress = 0x21, + DisplayVideoNormal = 0xA6, DisplayVideoReverse = 0xA7, AllPixelsOn = 0xA5, @@ -47,6 +44,8 @@ enum DisplayCommand : byte SetDisplayOffset = 0xD3, OutputFollowsRam = 0xA4, MemoryMode = 0x20, + ColumnAddress = 0x21, + PageAddress = 0x22, MultiplexModeSet = 0xA8, MultiplexDataSet = 0x3F, @@ -54,7 +53,7 @@ enum DisplayCommand : byte SetChargePump = 0x8D, SetPrecharge = 0xD9, SetComPins = 0xDA, - SetComDetect = 0xDB, + SetVComDetect = 0xDB, ComScanInc = 0xC0, ComScanDec = 0xC8, @@ -63,5 +62,40 @@ enum DisplayCommand : byte SetSegmentRemap = 0xA1, } + + /// + /// Valid I2C addresses for the display + /// + public enum Addresses : byte + { + /// + /// Bus address 0x3C + /// Commonly used with 128x32 displays + /// + Address_0x3C = 0x3C, + /// + /// Bus address 0x3D + /// + Address_0x3D = 0x3D, + /// + /// Default bus address + /// + Default = Address_0x3D + } + + /// + /// The display connection type + /// + public enum ConnectionType + { + /// + /// SPI + /// + SPI, + /// + /// I2C + /// + I2C, + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs similarity index 65% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.cs rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index cf57b60bd3..765ae6a1c1 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Driver/Sh1106.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -7,9 +7,9 @@ namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the Sh1106 family of displays + /// Provide an interface to the Sh110x family of displays /// - public partial class Sh1106 : IGraphicsDisplay + public abstract partial class Sh110x : IGraphicsDisplay { /// /// The display color mode - 1 bit per pixel monochrome @@ -24,12 +24,17 @@ public partial class Sh1106 : IGraphicsDisplay /// /// The display width in pixels /// - public int Width => 128; + public int Width { get; protected set; } = 128; /// /// The display height in pixels /// - public int Height => 64; + public int Height { get; protected set; } = 64; + + /// + /// The connection type (I2C or SPI) + /// + protected ConnectionType connectionType; /// /// The buffer the holds the pixel data for the display @@ -37,55 +42,113 @@ public partial class Sh1106 : IGraphicsDisplay public IPixelBuffer PixelBuffer => imageBuffer; /// - /// SPI peripheral object + /// I2C peripheral object for I2C displays + /// + protected II2cPeripheral i2cPeripheral; + + /// + /// SPI peripheral object for SPI displays /// - ISpiPeripheral spiPerihperal; + readonly ISpiPeripheral spiPeripheral; - IDigitalOutputPort dataCommandPort; - IDigitalOutputPort resetPort; + readonly IDigitalOutputPort dataCommandPort; + readonly IDigitalOutputPort resetPort; + + const int StartColumnOffset = 0; + int PAGE_SIZE; const bool Data = true; const bool Command = false; - Buffer1bpp imageBuffer; - byte[] pageBuffer; + readonly Buffer1bpp imageBuffer; + readonly byte[] pageBuffer; + + /// + /// Display command buffer + /// + protected Memory commandBuffer; + + /// + /// Create a new Sh110x object + /// + /// I2C bus connected to display + /// I2C address + /// Display width in pixels + /// Display height in pixels + public Sh110x(II2cBus i2cBus, byte address, int width, int height) + { + i2cPeripheral = new I2cPeripheral(i2cBus, address); + + Width = width; + Height = height; + + connectionType = ConnectionType.I2C; + commandBuffer = new byte[2]; + + imageBuffer = new Buffer1bpp(Width, Height); + PAGE_SIZE = Width; + pageBuffer = new byte[PAGE_SIZE + 1]; + + Initialize(); + } /// - /// Create a new Sh1106 object + /// Create a new Sh110x object /// /// SPI bus connected to display /// Chip select pin /// Data command pin /// Reset pin - public Sh1106(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin) : + /// Display width in pixels + /// Display height in pixels + public Sh110x(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin, int width, int height) : this(spiBus, chipSelectPin?.CreateDigitalOutputPort(), dcPin.CreateDigitalOutputPort(), - resetPin.CreateDigitalOutputPort()) + resetPin.CreateDigitalOutputPort(), width, height) { } /// - /// Create a new Sh1106 display object + /// Create a new Sh110x display object /// /// SPI bus connected to display /// Chip select output port /// Data command output port /// Reset output port - public Sh1106(ISpiBus spiBus, + /// Display width in pixels + /// Display height in pixels + public Sh110x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalOutputPort dataCommandPort, - IDigitalOutputPort resetPort) + IDigitalOutputPort resetPort, + int width, int height) { + connectionType = ConnectionType.SPI; + this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPerihperal = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + + Width = width; + Height = height; imageBuffer = new Buffer1bpp(Width, Height); - pageBuffer = new byte[PageSize]; + pageBuffer = new byte[Width]; Initialize(); } + /// + /// This varies between manufactures + /// If the display is misaligned, try 0 and 0x40 + /// + /// + public void SetDisplayOffset(byte offset) + { + SendCommand(DisplayCommand.SetDisplayOffset); + SendCommand(offset); + } + /// /// Invert the entire display (true) or return to normal mode (false) /// @@ -110,12 +173,10 @@ public void PowerSaveMode() SendCommand(DisplayCommand.AllPixelsOn); } - void SendCommand(DisplayCommand command) - { - SendCommand((byte)command); - } - - void Reset() + /// + /// Reset the display + /// + protected void Reset() { resetPort.State = true; Thread.Sleep(10); @@ -125,40 +186,7 @@ void Reset() Thread.Sleep(100); } - private void Initialize() - { - Reset(); - - SendCommand(DisplayCommand.DisplayOff); - SendCommand(DisplayCommand.SetDisplayClockDiv); - //128x64 init commands - SendCommand(0x80); - - SendCommand(DisplayCommand.MultiplexModeSet); - SendCommand(DisplayCommand.MultiplexDataSet); - - SendCommand(DisplayCommand.SetDisplayOffset); - SendCommand((byte)0); - - SendCommand(DisplayCommand.DisplayStartLine); - - SendCommand(DisplayCommand.SegInvNormal); - SendCommand(0xC0); - - SendCommand(DisplayCommand.SetComPins); - SendCommand(0x12); - - SendCommand(DisplayCommand.SetContrast); - SendCommand(0x0F); - - SendCommand(0x30); - SendCommand(0xA4); - - SendCommand(DisplayCommand.SetDisplayClockDiv); - SendCommand(0xF0); - - SendCommand(DisplayCommand.DisplayOn); - } + protected abstract void Initialize(); /// /// Set the display contrast @@ -174,46 +202,86 @@ public void SetContrast(byte contrast) /// Send a command to the display /// /// Command byte to send to the display - private void SendCommand(byte command) + internal void SendCommand(byte command) { - dataCommandPort.State = Command; - spiPerihperal.Write(command); + if (connectionType == ConnectionType.SPI) + { + dataCommandPort.State = Command; + spiPeripheral.Write(command); + } + else + { + commandBuffer.Span[0] = 0x00; + commandBuffer.Span[1] = command; + i2cPeripheral.Write(commandBuffer.Span); + } + } + + /// + /// Send a command to the display + /// + /// Command byte to send to the display + internal void SendCommand(DisplayCommand command) + { + SendCommand((byte)command); } /// /// Send a sequence of commands to the display /// /// List of commands to send - private void SendCommands(byte[] commands) + internal void SendCommands(byte[] commands) { - var data = new byte[commands.Length + 1]; - data[0] = 0x00; - Array.Copy(commands, 0, data, 1, commands.Length); - - dataCommandPort.State = Command; - spiPerihperal.Write(commands); + if (connectionType == ConnectionType.SPI) + { + dataCommandPort.State = Command; + spiPeripheral.Write(commands); + } + else + { + Span data = new byte[commands.Length + 1]; + data[0] = 0x00; + commands.CopyTo(data.Slice(1, commands.Length)); + i2cPeripheral.Write(data); + } } - const int StartColumnOffset = 0; - const int PageSize = 128; - /// /// Send the internal pixel buffer to display /// public void Show() { - for (int page = 0; page < 8; page++) + if (connectionType == ConnectionType.SPI) { - SendCommand(DisplayCommand.ColumnAddressLow); - SendCommand(DisplayCommand.ColumnAddressHigh); - SendCommand((byte)((byte)DisplayCommand.PageAddress | page)); + int count = (Height + 7) / 8;//+7 to round up + for (int page = 0; page < count; page++) + { + { + SendCommand(DisplayCommand.ColumnAddressLow); + SendCommand(DisplayCommand.ColumnAddressHigh); + SendCommand((byte)((byte)DisplayCommand.SetPageAddress | page)); - dataCommandPort.State = Data; + dataCommandPort.State = Data; - Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PAGE_SIZE); + spiPeripheral.Write(pageBuffer); + } + } + } + else //I2C + { + pageBuffer[0] = 0x40; + int count = (Height + 7) / 8;//+7 to round up + for (int page = 0; page < count; page++) + { + SendCommand((byte)0); + SendCommand((byte)((byte)DisplayCommand.SetPageAddress | page)); + SendCommand(0x10 >> 4); + SendCommand((byte)(0x10 & 0xF)); - dataCommandPort.State = Command; + Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 1, PAGE_SIZE); + i2cPeripheral.Write(pageBuffer); + } } } @@ -237,14 +305,14 @@ public void Show(int left, int top, int right, int bottom) continue; } - SendCommand((byte)((int)DisplayCommand.PageAddress | page)); + SendCommand((byte)((int)DisplayCommand.SetPageAddress | page)); SendCommand((DisplayCommand.ColumnAddressLow) | (StartColumnOffset & 0x0F)); SendCommand((int)DisplayCommand.ColumnAddressHigh | 0); dataCommandPort.State = Data; - Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PAGE_SIZE); + spiPeripheral.Write(pageBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs new file mode 100644 index 0000000000..7ad862910f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs @@ -0,0 +1,48 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Displays; +using Meadow.Foundation.Graphics; +using System.Threading.Tasks; + +namespace Displays.Sh1106_Sample +{ + public class MeadowApp : App + { + // + + MicroGraphics graphics; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + var sh1106 = new Sh1106 + ( + spiBus: Device.CreateSpiBus(), + chipSelectPin: Device.Pins.D02, + dcPin: Device.Pins.D01, + resetPin: Device.Pins.D00 + ); + + graphics = new MicroGraphics(sh1106); + graphics.CurrentFont = new Font8x8(); + graphics.Rotation = RotationType._180Degrees; + + return base.Initialize(); + } + + public override Task Run() + { + graphics.Clear(); + graphics.DrawRectangle(0, 0, 128, 64, false); + graphics.DrawTriangle(10, 10, 50, 50, 10, 50, false); + graphics.DrawRectangle(20, 15, 40, 20, true); + graphics.DrawText(5, 5, "SH1106"); + graphics.Show(); + + return base.Run(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj similarity index 92% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj index 9de266f8ef..6f8db894fd 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/Sh1106_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/Sh1106_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/meadow.config.yaml similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/meadow.config.yaml rename to Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs new file mode 100644 index 0000000000..f27143115d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs @@ -0,0 +1,53 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Displays; +using Meadow.Foundation.Graphics; +using System.Threading.Tasks; +using static Meadow.Foundation.Displays.Sh110x; + +namespace Displays.Sh1107_Sample +{ + public class MeadowApp : App + { + // + + MicroGraphics graphics; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + var sh1107 = new Sh1107 + ( + i2cBus: Device.CreateI2cBus(), + address: (byte)Addresses.Address_0x3C, + width: 128, + height: 128 + ); + + sh1107.SetDisplayOffset(0); + + graphics = new MicroGraphics(sh1107) + { + CurrentFont = new Font8x8(), + Rotation = RotationType._180Degrees + }; + + return base.Initialize(); + } + + public override Task Run() + { + graphics.Clear(); + graphics.DrawRectangle(0, 0, graphics.Width, graphics.Height, false); + graphics.DrawTriangle(10, 10, 50, 50, 10, 50, false); + graphics.DrawRectangle(20, 15, 40, 20, true); + graphics.DrawText(5, 5, "SH1107"); + graphics.Show(); + + return base.Run(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj new file mode 100644 index 0000000000..6f8db894fd --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/Sh1107_Sample.csproj @@ -0,0 +1,20 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index cccb671c36..f139762fb5 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -4,7 +4,7 @@ namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the SSD1306 family of OLED displays + /// Represents the SSD1306 family of OLED displays /// public partial class Ssd1306 : Ssd130xBase { @@ -17,7 +17,7 @@ public partial class Ssd1306 : Ssd130xBase /// Reset pin /// Type of SSD1306 display (default = 128x64 pixel display) public Ssd1306(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin, - DisplayType displayType = DisplayType.OLED128x64): + DisplayType displayType = DisplayType.OLED128x64) : this(spiBus, chipSelectPin?.CreateDigitalOutputPort(false), dcPin.CreateDigitalOutputPort(true), resetPin.CreateDigitalOutputPort(false), displayType) { } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs index 7bb8a9dc88..da8d4a1402 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs @@ -4,7 +4,7 @@ namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the SSD1309 family of OLED displays + /// Represents the SSD1309 family of OLED displays /// public class Ssd1309 : Ssd1306 { @@ -47,7 +47,7 @@ public Ssd1309(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalOutput /// /// I2cBus connected to display /// Address of the bus on the I2C display. - public Ssd1309(II2cBus i2cBus, byte address = (byte)Addresses.Default) : + public Ssd1309(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, DisplayType.OLED128x64) { } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs index 9e26717a08..61e5002b9b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs @@ -1,12 +1,9 @@ namespace Meadow.Foundation.Displays { - /// - /// Provide an interface to the SSD1306 family of OLED displays - /// public abstract partial class Ssd130xBase { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the display /// public enum Addresses : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index 0496e5b64b..68e413c66a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -1,12 +1,12 @@ -using System; -using Meadow.Hardware; +using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; -using Meadow.Foundation.Graphics; +using Meadow.Hardware; +using System; namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the SSD130x family of OLED displays + /// Represents the SSD130x family of OLED displays /// public abstract partial class Ssd130xBase : IGraphicsDisplay { diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index 61f4446b64..08f0b2e2d4 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1155,13 +1155,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D46C EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ch1115_Sample", "Meadow.Foundation.Peripherals\Displays.Ch1115\Samples\Ch1115_Sample\Ch1115_Sample.csproj", "{1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sh1106", "Sh1106", "{8D0C58C8-B325-48A1-A500-7E8FDC28C272}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sh110x", "Sh110x", "{8D0C58C8-B325-48A1-A500-7E8FDC28C272}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F288D725-B26F-4E32-B870-F391AF4211EB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Sh1106", "Meadow.Foundation.Peripherals\Displays.Sh1106\Driver\Displays.Sh1106.csproj", "{BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Sh110x", "Meadow.Foundation.Peripherals\Displays.Sh110x\Driver\Displays.Sh110x.csproj", "{BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1106_Sample", "Meadow.Foundation.Peripherals\Displays.Sh1106\Samples\Sh1106_Sample\Sh1106_Sample.csproj", "{F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1106_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1106_Sample\Sh1106_Sample.csproj", "{F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourteenSegment", "Led.FourteenSegment", "{1D0D2EEC-2637-489F-83C3-7F7CB36E5512}" EndProject @@ -1199,6 +1199,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{113D EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ANONavigationEncoder_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Samples\ANONavigationEncoder_Sample\ANONavigationEncoder_Sample.csproj", "{3885F704-2844-4EDD-9706-BD1B0C85A29B}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1107_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1107_Sample\Sh1107_Sample.csproj", "{EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2841,6 +2843,12 @@ Global {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.ActiveCfg = Release|Any CPU {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Build.0 = Release|Any CPU {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Build.0 = Release|Any CPU + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3439,6 +3447,7 @@ Global {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4} = {E2A8BDCC-626E-450D-918F-785E3777793E} {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} = {E2A8BDCC-626E-450D-918F-785E3777793E} {3885F704-2844-4EDD-9706-BD1B0C85A29B} = {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} + {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D} = {F288D725-B26F-4E32-B870-F391AF4211EB} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From dbfaccd3981be2895f459cc9c99038eebffdccf6 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 9 Apr 2023 20:59:23 -0700 Subject: [PATCH 034/141] Minor cleanup --- .../Communications/I2cPeripheral.cs | 30 +++++++++++++------ .../Displays.Sh110x/Driver/Drivers/Sh1107.cs | 2 +- .../Displays.Sh110x/Driver/Sh110x.cs | 7 +++-- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs b/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs index e95e797965..303155f794 100644 --- a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs +++ b/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; namespace Meadow.Hardware { @@ -10,7 +8,14 @@ namespace Meadow.Hardware /// public class I2cPeripheral : II2cPeripheral { + /// + /// The I2C address + /// public byte Address { get; protected set; } + + /// + /// The I2C bus + /// public II2cBus Bus { get; protected set; } /// @@ -77,9 +82,12 @@ public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.Lit { WriteBuffer.Span[0] = address; Bus.Exchange(this.Address, WriteBuffer[0..1].Span, ReadBuffer[0..2].Span); - if (order == ByteOrder.LittleEndian) { + if (order == ByteOrder.LittleEndian) + { return (ushort)(ReadBuffer.Span[0] | (ReadBuffer.Span[1] << 8)); - } else { + } + else + { return (ushort)(ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]); } } @@ -167,7 +175,8 @@ public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian) { - if (WriteBuffer.Length < writeBuffer.Length + 1) { + if (WriteBuffer.Length < writeBuffer.Length + 1) + { throw new ArgumentException("Data to write is too large for the write buffer. " + "Must be less than WriteBuffer.Length + 1 (to allow for address). " + "Instantiate this class with a larger WriteBuffer, or send a smaller" + @@ -179,21 +188,24 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order // stuff the bytes into the write buffer (starting at `1` index, // because `0` is the register address. - switch (order) { + switch (order) + { case ByteOrder.LittleEndian: - for (int i = 0; i < writeBuffer.Length; i++) { + for (int i = 0; i < writeBuffer.Length; i++) + { WriteBuffer.Span[i + 1] = writeBuffer[i]; } break; case ByteOrder.BigEndian: - for (int i = 0; i < writeBuffer.Length; i++) { + for (int i = 0; i < writeBuffer.Length; i++) + { // stuff them backwards WriteBuffer.Span[i + 1] = writeBuffer[writeBuffer.Length - (i + 1)]; } break; } // write it - this.Bus.Write(this.Address, WriteBuffer.Span[0..(writeBuffer.Length + 1)]); + this.Bus.Write(Address, WriteBuffer.Span[0..(writeBuffer.Length + 1)]); } public void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs index b7fdd2b937..f81537e592 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Drivers/Sh1107.cs @@ -85,7 +85,7 @@ protected override void Initialize() if (Width == 128 && Height == 128) { SendCommand(DisplayCommand.SetDisplayOffset); - SendCommand(0x40); + SendCommand((byte)0x00); SendCommand(DisplayCommand.MultiplexModeSet); SendCommand(0x07F); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 765ae6a1c1..3a4973b547 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -55,7 +55,7 @@ public abstract partial class Sh110x : IGraphicsDisplay readonly IDigitalOutputPort resetPort; const int StartColumnOffset = 0; - int PAGE_SIZE; + readonly int PAGE_SIZE; const bool Data = true; const bool Command = false; @@ -174,7 +174,7 @@ public void PowerSaveMode() } /// - /// Reset the display + /// Reset for SPI displays /// protected void Reset() { @@ -186,6 +186,9 @@ protected void Reset() Thread.Sleep(100); } + /// + /// Initialize the display + /// protected abstract void Initialize(); /// From f8c73e064c74a420e09d09d6732adbe129744a9f Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 9 Apr 2023 21:02:23 -0700 Subject: [PATCH 035/141] SH110x sample cleanup --- .../Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs | 2 +- .../Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs index 7ad862910f..9e0de1b3c8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1106_Sample/MeadowApp.cs @@ -6,7 +6,7 @@ namespace Displays.Sh1106_Sample { - public class MeadowApp : App + public class MeadowApp : App { // diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs index f27143115d..ae107cdbc0 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs @@ -7,7 +7,7 @@ namespace Displays.Sh1107_Sample { - public class MeadowApp : App + public class MeadowApp : App { // @@ -25,11 +25,9 @@ public override Task Initialize() height: 128 ); - sh1107.SetDisplayOffset(0); - graphics = new MicroGraphics(sh1107) { - CurrentFont = new Font8x8(), + CurrentFont = new Font12x16(), Rotation = RotationType._180Degrees }; From 71860a94b9e0dec8a2691514e9b85e84ed950a15 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 9 Apr 2023 21:36:26 -0700 Subject: [PATCH 036/141] Delete backup sln file --- Meadow.Foundation.sln | 3455 ----------------------------------------- 1 file changed, 3455 deletions(-) delete mode 100644 Meadow.Foundation.sln diff --git a/Meadow.Foundation.sln b/Meadow.Foundation.sln deleted file mode 100644 index 08f0b2e2d4..0000000000 --- a/Meadow.Foundation.sln +++ /dev/null @@ -1,3455 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32901.215 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Core.Samples", "Meadow.Foundation.Core.Samples", "{7EBB4434-F29C-4316-BEDC-F28F07CE4AC8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Libraries_and_Frameworks", "Meadow.Foundation.Libraries_and_Frameworks", "{E0384B86-37FC-403C-B1F7-AA5D1B869EB1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Meadow.Foundation.Peripherals", "Meadow.Foundation.Peripherals", "{64623FCA-6086-4F0A-A59D-2BF372EA38AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.PiezoSpeaker_Sample", "Meadow.Foundation.Core.Samples\Audio.PiezoSpeaker_Sample\Audio.PiezoSpeaker_Sample.csproj", "{74F47C15-1293-404A-8C92-0F72A3DE7BA7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Led_Sample", "Meadow.Foundation.Core.Samples\Leds.Led_Sample\Leds.Led_Sample.csproj", "{87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.LedBarGraph_Sample", "Meadow.Foundation.Core.Samples\Leds.LedBarGraph_Sample\Leds.LedBarGraph_Sample.csproj", "{3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLed_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLed_Sample\Leds.PwmLed_Sample.csproj", "{90A0ADDA-0CC2-491B-9140-DFE086EA66FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbLed_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbLed_Sample\Leds.RgbLed_Sample.csproj", "{20A24104-F8EF-4BDD-99F7-145CA63645B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbPwmLed_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbPwmLed_Sample\Leds.RgbPwmLed_Sample.csproj", "{5C0F8C22-10FB-4D50-B87B-41558A87B30A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motor.HBridgeMotor_Sample", "Meadow.Foundation.Core.Samples\Motor.HBridgeMotor_Sample\Motor.HBridgeMotor_Sample.csproj", "{05896551-6032-48C3-B847-79DEA73D5143}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Relays.Relay_Sample", "Meadow.Foundation.Core.Samples\Relays.Relay_Sample\Relays.Relay_Sample.csproj", "{28967B13-8651-4E28-B1E9-5D99D43DE202}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Buttons.PushButton_Sample", "Meadow.Foundation.Core.Samples\Sensors.Buttons.PushButton_Sample\Sensors.Buttons.PushButton_Sample.csproj", "{2D4A6B45-101D-49F4-B4BD-8A47B8A98098}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Rotary.RotaryEncoder_Sample", "Meadow.Foundation.Core.Samples\Sensors.Rotary.RotaryEncoder_Sample\Sensors.Rotary.RotaryEncoder_Sample.csproj", "{5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Rotary.RotaryEncoderWithButton_Sample", "Meadow.Foundation.Core.Samples\Sensors.Rotary.RotaryEncoderWithButton_Sample\Sensors.Rotary.RotaryEncoderWithButton_Sample.csproj", "{26EC0711-624C-48E1-A4A6-A55FD2249139}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.DipSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.DipSwitch_Sample\Sensors.Switches.DipSwitch_Sample.csproj", "{634CA076-F37B-4700-9FC4-58B1BD490627}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.SpdtSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.SpdtSwitch_Sample\Sensors.Switches.SpdtSwitch_Sample.csproj", "{FD938FD6-64B5-4B12-AD1B-42D4D401486C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Switches.SpstSwitch_Sample", "Meadow.Foundation.Core.Samples\Sensors.Switches.SpstSwitch_Sample\Sensors.Switches.SpstSwitch_Sample.csproj", "{091CF87A-BF50-44B5-BA3A-2D4BFB56E111}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.AnalogTemperature_Sample", "Meadow.Foundation.Core.Samples\Sensors.Temperature.AnalogTemperature_Sample\Sensors.Temperature.AnalogTemperature_Sample.csproj", "{105C53A9-4421-4A54-BF09-533D54BABECC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServoCore", "ServoCore", "{60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Servos.ServoCore", "Meadow.Foundation.Peripherals\Servos.ServoCore\Driver\Servos.ServoCore.csproj", "{FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServoCore_Sample", "Meadow.Foundation.Peripherals\Servos.ServoCore\Samples\ServoCore_Sample\ServoCore_Sample.csproj", "{1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tmp102", "Tmp102", "{92FF91F9-027A-47AC-8315-64547A80F54C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Tmp102", "Meadow.Foundation.Peripherals\Sensors.Temperature.Tmp102\Driver\Sensors.Temperature.Tmp102.csproj", "{E3A79085-41A4-4F86-90D1-8BC4F53FA625}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C31B4F18-78CB-4DC6-A09A-FD00C0303A80}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D5471726-76C5-46DD-9931-6328C6A3D375}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ParallaxPir", "ParallaxPir", "{35210A0B-2366-490B-A186-F8B9965BB89A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1B4327CF-B17A-46C3-A001-D9389E0E391B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.ParallaxPir", "Meadow.Foundation.Peripherals\Sensors.Motion.ParallaxPir\Driver\Sensors.Motion.ParallaxPir.csproj", "{0141F077-F5B1-4134-B513-F3A6FEA8D53A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParallaxPir_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.ParallaxPir\Samples\ParallaxPir_Sample\ParallaxPir_Sample.csproj", "{6711636F-A503-4D2F-AD47-CFB23FBDF484}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mag3110", "Mag3110", "{D4AF8585-D919-4A4E-A41A-400C8E95031C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B80C99F7-CFC0-409B-AFDD-23E2C8775327}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mag3110", "Meadow.Foundation.Peripherals\Sensors.Motion.Mag3110\Driver\Sensors.Motion.Mag3110.csproj", "{02E56C68-5B09-4331-9E5D-7FD9217594F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpu6050", "Mpu6050", "{A4089518-DBDB-4E12-8A31-D916859259F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mpu6050", "Meadow.Foundation.Peripherals\Sensors.Motion.Mpu6050\Driver\Sensors.Motion.Mpu6050.csproj", "{8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{35BE1129-CB5E-4003-987A-5EE41423EA72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpu6050_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mpu6050\Samples\Mpu6050_Sample\Mpu6050_Sample.csproj", "{7387C800-5C6C-4AA8-87E8-7FF04DF189F2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bno055", "Bno055", "{AAE72992-84CD-4B91-9736-252D49735D24}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{07F59EFA-8D03-489D-BB05-905C3B0A7699}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Bno055", "Meadow.Foundation.Peripherals\Sensors.Motion.Bno055\Driver\Sensors.Motion.Bno055.csproj", "{94A3A79A-3614-426C-A99C-F1F5CCDC4305}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apds9960", "Apds9960", "{58CE81BF-8BBD-4840-A8D0-DC5C19E23100}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D744EA2C-4534-42ED-B7BB-CC511762C509}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Apds9960", "Meadow.Foundation.Peripherals\Sensors.Motion.Apds9960\Driver\Sensors.Motion.Apds9960.csproj", "{894672CE-285A-40E7-98C7-EEBC530BBF24}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Fc28", "Fc28", "{52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BDBF448A-E9DA-4629-953C-1FADE3817724}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Fc28_Sample", "Meadow.Foundation.Peripherals\Sensors.Moisture.Fc28\Samples\Fc28_Sample\Fc28_Sample.csproj", "{C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Capacitive", "Capacitive", "{A9CD1742-A2D0-4346-9007-809FA6EC6F8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A545B814-74FD-4A0E-8BF3-9905C42FB315}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Moisture.Capacitive", "Meadow.Foundation.Peripherals\Sensors.Moisture.Capacitive\Driver\Sensors.Moisture.Capacitive.csproj", "{DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Capacitive_Sample", "Meadow.Foundation.Peripherals\Sensors.Moisture.Capacitive\Samples\Capacitive_Sample\Capacitive_Sample.csproj", "{5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Si1145", "Si1145", "{46752A8C-7971-41E2-8866-4E962EEDC803}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B99DE5A0-FF26-4805-BBB2-2739582191C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Si1145", "Meadow.Foundation.Peripherals\Sensors.Light.Si1145\Driver\Sensors.Light.Si1145.csproj", "{E77A4923-9FBD-471B-B161-DD9AD138313E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Alspt19315C", "Alspt19315C", "{BE6B35AA-5AD4-4D1F-B699-7752FF425A38}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{212F665B-A91A-4DEA-B0CB-E8BA195D8137}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hcsr04", "Hcsr04", "{FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{22F9AB41-151C-41EB-A662-1C155E9B067E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.Hcsr04", "Meadow.Foundation.Peripherals\Sensors.Distance.Hcsr04\Driver\Sensors.Distance.Hcsr04.csproj", "{BB051C9D-49C5-46C5-B8B1-5E459179C761}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hcsr04_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.Hcsr04\Samples\Hcsr04_Sample\Hcsr04_Sample.csproj", "{041FFFB3-926E-471A-9C2B-343311824B30}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpl3115a2", "Mpl3115a2", "{50A0527F-7CFF-40E3-B8C5-1BB915139BA5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D9E26608-83A9-4146-8B06-5CF9EF3E4F7A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Si70xx", "Si70xx", "{BEB54F58-AB14-4030-BA81-746F1D3A34B2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{AEF8B139-CB86-4DB1-944D-2D859C8669DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Si70xx", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Si70xx\Driver\Sensors.Atmospheric.Si70xx.csproj", "{2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sht31d", "Sht31d", "{E985E479-23A7-4516-837F-256B40C50BF3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6A664586-4544-4427-8FC1-2A8E306BE7A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sht31d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht31D\Driver\Sensors.Atmospheric.Sht31d.csproj", "{81E6E143-8752-45A9-8BDA-C6F4730A7DF1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Htux1d", "Htux1d", "{27F8F5B1-F535-4116-BB16-63454D21D13B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hih6130", "Hih6130", "{91CA9079-8D10-4A3B-AE42-CB49781687C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6416DC2C-DED8-44E7-8783-24EFB7F9C682}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Hih6130", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Hih6130\Driver\Sensors.Atmospheric.Hih6130.csproj", "{5542FE52-8D47-4279-A436-67DB6B1E1E12}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp085", "Bmp085", "{C724C5EE-7972-41DA-9FDB-42416980F25C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A2BBDB4-6130-4C9D-9947-12F39309E8E9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bme280", "Bme280", "{449B29BE-7A04-4A6D-858B-77C8E81415DE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{21C511DD-43DD-486E-86D7-18D8F6810ACD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds1307", "Ds1307", "{D5C58443-E77C-472D-B5A9-FAC05B40334C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{626AAFA5-97ED-47C3-9303-977B1B17F6A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RTCs.Ds1307", "Meadow.Foundation.Peripherals\RTCs.Ds1307\Driver\RTCs.Ds1307.csproj", "{43BE21E0-CA04-4987-A1EE-0E3F5E940C00}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds1307_Sample", "Meadow.Foundation.Peripherals\RTCs.Ds1307\Samples\Ds1307_Sample\Ds1307_Sample.csproj", "{CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds323x", "Ds323x", "{A867D092-9D63-4516-89C7-509B161D331A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C32CCF68-5D86-4337-BF37-4053C7F01848}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RTCs.Ds323x", "Meadow.Foundation.Peripherals\RTCs.Ds323x\Driver\RTCs.Ds323x.csproj", "{225C7669-6CD3-4F24-8F02-5620BF682BF3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "x74595", "x74595", "{371BBDB4-E337-4A66-A132-86C6DA3E4EB4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{BA4E26C9-BFF0-48B1-9D53-315F6906AF06}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.x74595", "Meadow.Foundation.Peripherals\ICs.IOExpanders.x74595\Driver\ICs.IOExpanders.x74595.csproj", "{C4E371CD-452B-445D-968A-FA2805A13DEE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp23xxx", "Mcp23xxx", "{240F389E-5109-4266-AE58-04DEAC585F22}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1A91B800-DC03-4199-AE38-4BD57195416F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Mcp23xxx", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Driver\ICs.IOExpanders.Mcp23xxx.csproj", "{E5256D16-2D8E-4A38-913C-863AB9819D53}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ht16k33", "Ht16k33", "{E95B5F1B-244F-4B45-AC8E-B2483DB0C980}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1EB7CD8B-7293-4C4A-9C58-160456BCCB1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ht16k33", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Driver\ICs.IOExpanders.Ht16k33.csproj", "{15D040E2-2ECC-413B-AA87-6455D7D930A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ht16k33_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Samples\Ht16k33_Sample\Ht16k33_Sample.csproj", "{A431E3A8-471B-4D51-B271-8E614F6E77C6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "At24Cxx", "At24Cxx", "{6BFD3733-D1EF-4AFB-A87E-40BF28076CE7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{671D7B77-DEBE-416D-818D-99411DF479AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.EEPROM.At24Cxx", "Meadow.Foundation.Peripherals\ICs.EEPROM.At24Cxx\Driver\ICs.EEPROM.At24Cxx.csproj", "{8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TftSpi", "TftSpi", "{8CE083A7-B966-4EB5-B139-C3EEF2D53585}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8FB70D12-1111-480B-B64C-B8EB65977F58}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "St7565", "St7565", "{888BC38D-CC4E-4F78-9F4E-488969FD0360}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{94E618B0-5BA2-4436-B1F5-90CE0E0D2293}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.St7565", "Meadow.Foundation.Peripherals\Displays.St7565\Driver\Displays.St7565.csproj", "{7B529C67-B1BF-41A4-8870-42A027ABFBCF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7565_Sample", "Meadow.Foundation.Peripherals\Displays.St7565\Samples\St7565_Sample\St7565_Sample.csproj", "{5574FE78-17B0-4295-9F27-2E4782554102}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ssd130x", "Ssd130x", "{BF341B80-8763-482E-9AF7-5E8DE369ECE1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{FAD4D2B5-D578-413A-B776-5AE1F43D6CFE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pcd8544", "Pcd8544", "{0CD6A482-3CA0-4627-969E-7E27C1AE9352}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6F6FFBD9-7326-4C38-A4A6-C0052212645F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.SevenSegment", "Led.SevenSegment", "{E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6E6E1F6E-8689-4D5C-814F-2A92E63B365F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lcd.CharacterDisplay", "Lcd.CharacterDisplay", "{14A0EE78-5C03-42A4-8BFE-D0FD16764EAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C4407F01-FE4E-429A-BFF3-F697881F1EEA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CharacterDisplay_Sample", "Meadow.Foundation.Peripherals\Displays.Lcd.CharacterDisplay\Samples\CharacterDisplay_Sample\CharacterDisplay_Sample.csproj", "{45F2287B-5AD9-4E89-8A91-1471AC56005E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ePaper", "ePaper", "{577DDC93-7BC2-4641-AB65-9550EF362682}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{06BFC6F2-9D39-46B2-8E9B-A2204481EED2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.ePaper", "Meadow.Foundation.Peripherals\Displays.ePaper\Driver\Displays.ePaper.csproj", "{5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Radio.Tea5767", "Radio.Tea5767", "{DB7564E3-703D-4358-8CB0-FA80CFB69101}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4242C2C7-8B81-41D4-A716-D717B6424C50}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Mpl3115a2", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Mpl3115a2\Driver\Sensors.Atmospheric.Mpl3115a2.csproj", "{7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpl3115a2_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Mpl3115a2\Samples\Mpl3115a2_Sample\Mpl3115a2_Sample.csproj", "{BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apds9960_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Apds9960\Samples\Apds9960_Sample\Apds9960_Sample.csproj", "{B148426F-25BD-4632-9307-E9EC36063D0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sht31d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht31d\Samples\Sht31d_Sample\Sht31d_Sample.csproj", "{51B930DB-5D89-417E-A78F-4A365CAA17D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Moisture.Fc28", "Meadow.Foundation.Peripherals\Sensors.Moisture.Fc28\Driver\Sensors.Moisture.Fc28.csproj", "{5B8B4327-8936-4AC1-B77D-1D219A897ECF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stepper.Uln2003", "Stepper.Uln2003", "{33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tm1637", "Tm1637", "{9268BC85-F6BC-46F7-A101-A26920A87DF2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{65A2B794-E5FB-4234-A174-D1CED2DD9E4F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vc0706", "Vc0706", "{8749617F-D55A-4C44-815A-FD55FFDA3891}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{118CB5F4-F864-49B8-B43B-28FBD23AD02F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Max7219", "Max7219", "{E51E4E02-C3B8-456B-917C-E5200E062E4E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8AA8CB22-1E97-463D-863F-484236E1C24C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5DA778E0-E827-4A63-844B-1166BEEB8897}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLed_Onboard_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLed_Onboard_Sample\Leds.PwmLed_Onboard_Sample.csproj", "{62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.RgbPwmLed_Onboard_Sample", "Meadow.Foundation.Core.Samples\Leds.RgbPwmLed_Onboard_Sample\Leds.RgbPwmLed_Onboard_Sample.csproj", "{345A5215-F14F-41AB-844B-9445EE657A1D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.AnalogJoystick_Sample", "Meadow.Foundation.Core.Samples\Sensors.Hid.AnalogJoystick_Sample\Sensors.Hid.AnalogJoystick_Sample.csproj", "{50D09365-81F0-4313-A7AF-F2CD76DE4998}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Lcd.CharacterDisplay", "Meadow.Foundation.Peripherals\Displays.Lcd.CharacterDisplay\Driver\Displays.Lcd.CharacterDisplay.csproj", "{C6178701-C96F-4929-A255-396A7F7F8483}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_External", "_External", "{65C50059-6C22-43E9-88DE-AD73F7F108C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bno055_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Bno055\Samples\Bno055_Sample\Bno055_Sample.csproj", "{20861022-699D-4FA2-A92A-05BC0188D25A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Si1145_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Si1145\Samples\Si1145_Sample\Si1145_Sample.csproj", "{4210A31C-77B0-4550-BEC4-F3D4CE337DCA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Alspt19315C_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Alspt19315C\Samples\Alspt19315C_Sample\Alspt19315C_Sample.csproj", "{6B108EA4-4F81-4A4A-9216-860208940FE5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Alspt19315C", "Meadow.Foundation.Peripherals\Sensors.Light.Alspt19315C\Driver\Sensors.Light.Alspt19315C.csproj", "{F036224F-8ECB-497F-BC49-355BC4C094B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hih6130_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Hih6130\Samples\Hih6130_Sample\Hih6130_Sample.csproj", "{EF135479-CBF6-4E03-B6EB-55EA850946A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp085", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Driver\Sensors.Atmospheric.Bmp085.csproj", "{728ECF00-EB02-4981-87F9-A72A163DB93C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme280_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Samples\Bme280_Sample\Bme280_Sample.csproj", "{59EED95C-1CA7-466C-853C-BF14E1EF43A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bme280", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme280\Driver\Sensors.Atmospheric.Bme280.csproj", "{D94618E1-D812-4CFF-B539-54AE9559F827}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9341_Jpg_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9341_Jpg_Sample\Ili9341_Jpg_Sample.csproj", "{A5F4A75B-20F6-4CDF-B986-635081894E43}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9163_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9163_Sample\Ili9163_Sample.csproj", "{514EA28E-1527-4F9E-A0F5-33C3BE3DF417}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9341_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9341_Sample\Ili9341_Sample.csproj", "{E9B8729A-7525-4EB3-86F0-50E88C504AE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1351_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\SSD1351_Sample\SSD1351_Sample.csproj", "{41FF7FB1-FDE1-4229-A307-06C25CF91520}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST7789_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\ST7789_Sample\ST7789_Sample.csproj", "{19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.TftSpi", "Meadow.Foundation.Peripherals\Displays.TftSpi\Driver\Displays.TftSpi.csproj", "{24568129-061F-4A1E-B1CF-81B9F197EE58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1306_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1306_Sample\Ssd1306_Sample.csproj", "{16CFD509-CEA6-4038-B504-5C026C2A464F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ssd130x", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Driver\Displays.Ssd130x.csproj", "{7F69F8CB-5C1A-461B-90FC-360367CD65CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pcd8544_Sample", "Meadow.Foundation.Peripherals\Displays.Pcd8544\Samples\Pcd8544_Sample\Pcd8544_Sample.csproj", "{E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Pcd8544", "Meadow.Foundation.Peripherals\Displays.Pcd8544\Driver\Displays.Pcd8544.csproj", "{2F25E1D4-D167-4681-9C27-161FB18A895D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SevenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SevenSegment\Samples\SevenSegment_Sample\SevenSegment_Sample.csproj", "{5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SevenSegment", "Meadow.Foundation.Peripherals\Displays.Led.SevenSegment\Driver\Displays.Led.SevenSegment.csproj", "{18FCBDEA-3530-4D00-A339-D2255DBD6B2E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0373_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0373_Sample\IL0373_Sample.csproj", "{01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.Radio.Tea5767", "Meadow.Foundation.Peripherals\Audio.Radio.Tea5767\Driver\Audio.Radio.Tea5767.csproj", "{A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Uln2003_Sample", "Meadow.Foundation.Peripherals\Motors.Stepper.Uln2003\Samples\Uln2003_Sample\Uln2003_Sample.csproj", "{7B874567-3F96-488D-8FC1-B79479CDE7C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Stepper.Uln2003", "Meadow.Foundation.Peripherals\Motors.Stepper.Uln2003\Driver\Motors.Stepper.Uln2003.csproj", "{4E60FE13-67F0-493A-853A-9A0076499506}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tm1637_Sample", "Meadow.Foundation.Peripherals\Displays.Tm1637\Samples\Tm1637_Sample\Tm1637_Sample.csproj", "{A9FBA69F-9638-4F16-B764-30FE77E3BA6D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Tm1637", "Meadow.Foundation.Peripherals\Displays.Tm1637\Driver\Displays.Tm1637.csproj", "{EDAAD136-DEE3-4318-82C6-5C8193E0414E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.Vc0706", "Meadow.Foundation.Peripherals\Sensors.Camera.Vc0706\Driver\Sensors.Camera.Vc0706.csproj", "{C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_7Segment_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_Sample\Max7219_7Segment_Sample.csproj", "{ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Max7219", "Meadow.Foundation.Peripherals\Displays.Max7219\Driver\Displays.Max7219.csproj", "{F917BD5A-7837-4F57-84D6-5C15816DA8DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0376F_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0376F_Sample\IL0376F_Sample.csproj", "{0E43828B-2319-4FB1-A7ED-C93081DB5C45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL0398_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL0398_Sample\IL0398_Sample.csproj", "{C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL3897_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL3897_Sample\IL3897_Sample.csproj", "{B0C30615-C3E6-446E-9AA2-390C9FE3B209}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL91874_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL91874_Sample\IL91874_Sample.csproj", "{ED38C115-9592-4049-A654-8C575676F17D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IL91874V03_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\IL91874V03_Sample\IL91874V03_Sample.csproj", "{B764CA55-C9A4-4794-967A-051D45D9FDB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1608_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1608_Sample\SSD1608_Sample.csproj", "{74E97580-8847-45D5-B12B-82409B56E709}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Temt6000", "Temt6000", "{606456FE-9938-47EB-9327-001915575421}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3DAA8F7C-7F99-4515-9467-CC88D1D92145}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Temt6000", "Meadow.Foundation.Peripherals\Sensors.Light.Temt6000\Driver\Sensors.Light.Temt6000.csproj", "{CC00EF84-5144-4FFC-B194-56086D47BFAB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Temt6000_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Temt6000\Samples\Temt6000_Sample\Temt6000_Sample.csproj", "{E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds323x_Sample", "Meadow.Foundation.Peripherals\RTCs.Ds323x\Samples\Ds323x_Sample\Ds323x_Sample.csproj", "{A059BFE2-87FD-482C-B1DC-5C8023C79DA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "At24Cxx_Sample", "Meadow.Foundation.Peripherals\ICs.EEPROM.At24Cxx\Samples\At24Cxx_Sample\At24Cxx_Sample.csproj", "{9AF786F5-B6CA-490B-9926-2CCA9CFF1431}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ms5611", "Ms5611", "{3FF07962-C887-495B-9B0E-EA2313B1F4AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Ms5611", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ms5611\Driver\Sensors.Atmospheric.Ms5611.csproj", "{8C890579-33B9-4DE8-98B4-52B3E5893F8C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8D88D2E1-5DD8-4C59-AE7A-F269F537AC05}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ms5611_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ms5611\Samples\Ms5611_Sample\Ms5611_Sample.csproj", "{5EC99271-9105-42BF-B347-69EA5376D305}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ags01Db", "Ags01Db", "{0479C1FF-33D0-4315-9846-8031661C6707}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Ags01Db", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ags01Db\Driver\Sensors.Environmental.Ags01Db.csproj", "{1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_8x8x4_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_8x8x4_Sample\Max7219_8x8x4_Sample.csproj", "{AD8951D6-7AF1-40DB-92FE-4517E538E57C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1750", "Bh1750", "{048BE18B-E895-459D-8041-6DADD6FAB130}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Bh1750", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1750\Driver\Sensors.Light.Bh1750.csproj", "{5E7E1C26-2260-4E32-BABB-0083DE286AC4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6252AD84-1611-4B1B-BD3D-2D970D51461A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1750_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1750\Samples\Bh1750_Sample\Bh1750_Sample.csproj", "{8C763585-70E5-4D99-B133-929F9B41645A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1745", "Bh1745", "{1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Bh1745", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1745\Driver\Sensors.Light.Bh1745.csproj", "{FE5C2C05-5CE4-49E1-857F-626A32882D3B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1745_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Bh1745\Samples\Bh1745_Sample\Bh1745_Sample.csproj", "{124BD439-325D-43CA-B829-F39EE332B3F7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp180", "Bmp180", "{E91B1973-3022-4231-879D-D8F9E2ABE14C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5A65EF5B-99A7-415E-928B-14F05BEBD31F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp180", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp180\Driver\Sensors.Atmospheric.Bmp180.csproj", "{54512143-15FA-4A68-B54D-FEFE15AC41D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmp180_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp180\Samples\Bmp180_Sample\Bmp180_Sample.csproj", "{0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmp085_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Samples\Bmp085_Sample\Bmp085_Sample.csproj", "{A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "x74595_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.x74595\Samples\x74595_Sample\x74595_Sample.csproj", "{DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dhtxx", "Dhtxx", "{6C716EDD-C29C-47F5-8366-28FC209E06E0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Dhtxx", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Driver\Sensors.Atmospheric.Dhtxx.csproj", "{A50E7383-8111-4516-B76E-E4133242B835}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{109B0BE9-7083-4473-B528-25425CA84E76}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dht12_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Samples\Dht12_Sample\Dht12_Sample.csproj", "{9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hcsens0040", "Hcsens0040", "{75E65F82-D53E-4C41-81DE-57950C05900E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D78EB96C-0105-4D6A-A34D-BD271912617E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Hcsens0040", "Meadow.Foundation.Peripherals\Sensors.Motion.Hcsens0040\Driver\Sensors.Motion.Hcsens0040.csproj", "{D162B2AE-0343-4257-ABF3-E501DB6CB549}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hcsens0040_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hcsens0040\Samples\Hcsens0040_Sample\Hcsens0040_Sample.csproj", "{DA828BA9-E57F-4579-B6B0-55910247408F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ina260", "Ina260", "{18BD90D6-3D88-44A4-A366-134D12F3F823}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Power.Ina260", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Driver\Sensors.Power.Ina260.csproj", "{9B4196EC-9485-43FB-B579-C2E50D0E9A3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ina260_Sample", "Meadow.Foundation.Peripherals\Sensors.Power.Ina260\Samples\Ina260_Sample\Ina260_Sample.csproj", "{22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tsl2591", "Tsl2591", "{C453850E-43AD-4AE5-82F1-76E0168E7260}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{882011AD-05A3-43F9-9B64-2032982948D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Tsl2591", "Meadow.Foundation.Peripherals\Sensors.Light.Tsl2591\Driver\Sensors.Light.Tsl2591.csproj", "{267DBD91-4ABE-4B34-A788-32EC7B34B4FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tsl2591_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Tsl2591\Samples\Tsl2591_Sample\Tsl2591_Sample.csproj", "{F151BE23-5AB3-488F-B332-FD851BFF4E24}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1309_Game_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1309_Game_Sample\Ssd1309_Game_Sample.csproj", "{F5596859-93D3-41D0-8988-FFA24F4A2152}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hmc5883", "Hmc5883", "{ED862B12-EBF8-49BB-8F2A-01760F6D60E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Hmc5883", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Driver\Sensors.Motion.Hmc5883.csproj", "{A229CA2F-6218-44ED-A871-BC4033D23025}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D07E813A-1685-444B-8DB1-6FFD71B53E21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hmc5883_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Samples\Hmc5883_Sample\Hmc5883_Sample.csproj", "{F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Max44009", "Max44009", "{736DBD67-A8CB-4D56-90A7-936F3A62EC2A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Max44009", "Meadow.Foundation.Peripherals\Sensors.Light.Max44009\Driver\Sensors.Light.Max44009.csproj", "{F15B5202-B450-4C93-9EDE-1BC0BB1D780E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3BB43F5A-E05D-4E59-9ACE-053C60608E33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max44009_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Max44009\Samples\Max44009_Sample\Max44009_Sample.csproj", "{466BAAFF-79D5-47D0-8A61-71EED9E94B17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1039_3DCube_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1039_3DCube_Sample\Ssd1039_3DCube_Sample.csproj", "{2B3D4217-C4E9-42C0-853F-0181BC75CE55}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lm75", "Lm75", "{28CDEEE6-8998-4ADE-98D0-863CE249B5CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Lm75", "Meadow.Foundation.Peripherals\Sensors.Temperature.Lm75\Driver\Sensors.Temperature.Lm75.csproj", "{CBA9FB82-F61D-48ED-9037-293853C1CC29}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{687390CC-01CC-4D86-B21F-F22F262106C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lm75_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Lm75\Samples\Lm75_Sample\Lm75_Sample.csproj", "{3E532ECC-8E02-4BAE-9606-6A1007DD24B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23x08_Input_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23x08_Input_Sample\Mcp23x08_Input_Sample.csproj", "{1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Veml7700", "Veml7700", "{A7FC5090-631A-4580-8E00-06A658482C23}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{085AE7C1-E8BB-4564-8473-392EBBB835B3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.Veml7700", "Meadow.Foundation.Peripherals\Sensors.Light.Veml7700\Driver\Sensors.Light.Veml7700.csproj", "{6035BA5E-4E7E-40FD-8509-70C86798CA56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Veml7700_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.Veml7700\Samples\Veml7700_Sample\Veml7700_Sample.csproj", "{02CE4043-C061-4551-B3F2-E17E6C889814}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Max7219_8x8x4x2_Sample", "Meadow.Foundation.Peripherals\Displays.Max7219\Samples\Max7219_8x8x4x2_Sample\Max7219_8x8x4x2_Sample.csproj", "{6B7D5CB4-30B3-49BF-B815-C43FECBC6291}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pca9685", "Pca9685", "{2912CE2F-D76A-4F4B-8E11-CA622E6389E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Pca9685", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Pca9685\Driver\ICs.IOExpanders.Pca9685.csproj", "{081252D3-4986-4559-81B2-F39F9E0C50B1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3A5ED925-1747-4373-9A2A-F1CCB29BB53A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pca9685_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Pca9685\Samples\Pca9685_Sample\Pca9685_Sample.csproj", "{10AD62E8-B3EB-4C38-BA77-C75482EF9082}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.HallEffect_Sample", "Meadow.Foundation.Core.Samples\Sensors.HallEffect_Sample\Sensors.HallEffect_Sample.csproj", "{F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vl53l0x", "Vl53l0x", "{D1DD2BC2-1100-4037-A571-FF8545CFCBAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.Vl53l0x", "Meadow.Foundation.Peripherals\Sensors.Distance.Vl53l0x\Driver\Sensors.Distance.Vl53l0x.csproj", "{E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{89C8FCEF-B6F5-4B9D-9010-F224262BD28A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vl53l0x_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.Vl53l0x\Samples\Vl53l0x_Sample\Vl53l0x_Sample.csproj", "{FFA23527-1265-4CC8-931D-E0882D76C8C3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rfid.IDxxLA", "Rfid.IDxxLA", "{0C05F31F-FB0F-4CFB-8CCC-665565434936}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{713F4271-0407-4AE0-B982-DE22A0D0857E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Radio.Rfid.IDxxLA", "Meadow.Foundation.Peripherals\Sensors.Radio.Rfid.IDxxLA\Driver\Sensors.Radio.Rfid.IDxxLA.csproj", "{DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Is31fl3731", "Is31fl3731", "{723D465E-39AA-4297-971E-3871EF832398}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Is31fl3731", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Is31fl3731\Driver\ICs.IOExpanders.Is31fl3731.csproj", "{02318A44-AD0C-4656-B601-1EE9575B0E79}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A110CB79-CF10-485F-95DA-678A983A030B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Is31fl3731_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Is31fl3731\Samples\Is31fl3731_Sample\Is31fl3731_Sample.csproj", "{30A8F1D0-BB6C-486C-AC6B-92EC1551983A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7735_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\St7735_Sample\St7735_Sample.csproj", "{7E466C3D-9630-4F98-BABC-43F23716B434}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.PwmLedBarGraph_Sample", "Meadow.Foundation.Core.Samples\Leds.PwmLedBarGraph_Sample\Leds.PwmLedBarGraph_Sample.csproj", "{3AC2D665-8360-4367-9606-F633CA743C9E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mt3339", "Mt3339", "{F07E7336-995C-465C-9F5F-BC19FE7BD5F5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F5BE2CAF-E124-40A4-8C07-A2023C959B84}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mt3339_Sample", "Meadow.Foundation.Peripherals\Sensors.Gnss.Mt3339\Samples\Mt3339_Sample\Mt3339_Sample.csproj", "{1372483D-0BE9-4A52-9BDC-75A15120279F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Gnss.Mt3339", "Meadow.Foundation.Peripherals\Sensors.Gnss.Mt3339\Driver\Sensors.Gnss.Mt3339.csproj", "{F0970BBA-CC73-4639-BC29-96A571D7BA36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tmp102_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Tmp102\Samples\Tmp102_Sample\Tmp102_Sample.csproj", "{B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mlx90640", "Mlx90640", "{F76AEAC3-F902-430D-9E6C-52CB6110AA4E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Camera.Mlx90640", "Meadow.Foundation.Peripherals\Sensors.Camera.Mlx90640\Driver\Sensors.Camera.Mlx90640.csproj", "{78A63BD8-D52B-4514-8FEE-9A03C0B74023}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apa102", "Apa102", "{78EABAC3-0248-4802-9C01-5A00E84B85C5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Apa102", "Meadow.Foundation.Peripherals\Leds.Apa102\Driver\Leds.Apa102.csproj", "{04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apa102_Sample", "Meadow.Foundation.Peripherals\Leds.Apa102\Samples\Apa102_Sample\Apa102_Sample.csproj", "{5172C617-0E49-40FD-8579-1DC41AF03EE1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stepper.A4988", "Stepper.A4988", "{2F106C24-1825-4C6F-8581-0B8ED871CD80}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B7DF35D6-7124-40D5-A219-82894CD0ACD3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Stepper.A4988", "Meadow.Foundation.Peripherals\Motors.Stepper.A4988\Driver\Motors.Stepper.A4988.csproj", "{3BA971E2-D89E-41B8-9C29-89F256B7E873}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "A4988_Sample", "Meadow.Foundation.Peripherals\Motors.Stepper.A4988\Samples\A4988_Sample\A4988_Sample.csproj", "{A3935804-D2A7-4195-AF7D-A62A858E7D39}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nau7802", "Nau7802", "{AA8BDD23-315D-4784-93D2-12E7EB577675}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{481EEB00-F764-4ACB-B9EC-0611C6750CCB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.LoadCell.Nau7802", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Nau7802\Driver\Sensors.LoadCell.Nau7802.csproj", "{79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nau7802_Sample", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Nau7802\Samples\Nau7802_Sample\Nau7802_Sample.csproj", "{E1829984-508F-4BED-A11D-E43624064DFD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ky038", "Ky038", "{C1D6A7E4-A0AF-4841-92A0-FA930628E396}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{0507CBD7-CA15-4DFB-8B40-80743C3BF7AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Sound.Ky038", "Meadow.Foundation.Peripherals\Sensors.Sound.Ky038\Driver\Sensors.Sound.Ky038.csproj", "{F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ky038_Sample", "Meadow.Foundation.Peripherals\Sensors.Sound.Ky038\Samples\Ky038_Sample\Ky038_Sample.csproj", "{E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourDigitSevenSegment", "Led.FourDigitSevenSegment", "{A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{96550752-20E4-475E-80AF-9426C6560D1A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.FourDigitSevenSegment", "Meadow.Foundation.Peripherals\Displays.Led.FourDigitSevenSegment\Driver\Displays.Led.FourDigitSevenSegment.csproj", "{569397A1-B0BA-4B96-9E6A-00D16FF16FBB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FourDigitSevenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.FourDigitSevenSegment\Samples\FourDigitSevenSegment_Sample\FourDigitSevenSegment_Sample.csproj", "{1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hx711", "Hx711", "{14B5E5E4-AD33-48F7-8371-28E91C52EB6C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B108EB73-C0E6-4B16-96C8-29BD619D8717}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.LoadCell.Hx711", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Hx711\Driver\Sensors.LoadCell.Hx711.csproj", "{59184098-467E-47D5-A738-E4792F09079C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx711_Sample", "Meadow.Foundation.Peripherals\Sensors.LoadCell.Hx711\Samples\Hx711_Sample\Hx711_Sample.csproj", "{EA78E753-FAB5-4279-B9D5-2E7324D110F2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mpr121", "Mpr121", "{3354B893-1DDF-4E80-BCB9-279A370734D1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B12E28B5-B206-43CC-8597-E0D013EB3889}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Mpr121", "Meadow.Foundation.Peripherals\Sensors.Hid.Mpr121\Driver\Sensors.Hid.Mpr121.csproj", "{F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpr121_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.Mpr121\Samples\Mpr121_Sample\Mpr121_Sample.csproj", "{FF019156-8C03-4D25-9D83-ED668F501321}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{184472CA-143C-4628-BA38-E901C7863E7C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vc0706_Sample", "Meadow.Foundation.Peripherals\Sensors.Camera.Vc0706\Samples\Vc0706_Sample\Vc0706_Sample.csproj", "{A73E7975-989F-4416-B531-C3CC4D25D175}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mp3.Yx5300", "Mp3.Yx5300", "{36D998D7-9685-497E-8B92-2FD429D27B99}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Audio.Mp3.Yx5300", "Meadow.Foundation.Peripherals\Audio.Mp3.Yx5300\Driver\Audio.Mp3.Yx5300.csproj", "{D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{CF493B2A-679A-44E9-ABB7-B9CD9AF44450}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yx5300_Sample", "Meadow.Foundation.Peripherals\Audio.Mp3.Yx5300\Samples\Yx5300_Sample\Yx5300_Sample.csproj", "{A447201E-D3E7-47C0-8E87-A919A272FCB1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bme68x", "Bme68x", "{10C3DA72-29FA-4BF7-B2D5-EABF25879E92}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{01926B24-03D6-4ACC-ABB7-FF90E5861557}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bme68x", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Driver\Sensors.Atmospheric.Bme68x.csproj", "{12449481-3CDD-446F-8968-5816E65F62F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme680_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Samples\Bme680_Sample\Bme680_Sample.csproj", "{0C1F063F-1C44-450D-90FC-A9A95AA03B97}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AdafruitMPRLS", "AdafruitMPRLS", "{203EF7C7-F76D-4004-9472-A7AAAA581C6E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4B15C7E3-990E-4427-A7A7-842410E30B86}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.AdafruitMPRLS", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.AdafruitMPRLS\Driver\Sensors.Atmospheric.AdafruitMPRLS.csproj", "{BADF052D-108C-4E33-A96F-B4F8B42B8F5B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ssd1327", "Ssd1327", "{4F04D404-22A8-499F-B22D-6C85D327A5A9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9311C387-6BF3-40AD-8A12-8E2FF66B36CD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ssd1327", "Meadow.Foundation.Peripherals\Displays.Ssd1327\Driver\Displays.Ssd1327.csproj", "{A40738A5-9C8D-4E7C-ADB6-83E9741F958E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1327_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd1327\Samples\Ssd1327_Sample\Ssd1327_Sample.csproj", "{7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx8357d_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Hx8357d_Sample\Hx8357d_Sample.csproj", "{CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hx8357b_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Hx8357b_Sample\Hx8357b_Sample.csproj", "{FEF77B5A-1A66-477F-8E52-FB7812F33B84}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mag3110_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mag3110\Samples\Mag3110_Sample\Mag3110_Sample.csproj", "{239BAFE1-CBF5-49B6-AC92-A5B77D846717}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.SensorReading", "DataLoggers.SensorReading", "{C1361C6F-D933-4A99-919D-5644B9E1BC9A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{D47B0BF3-B61F-4F83-BD73-3E749DFD470C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.AdafruitIO", "DataLoggers.AdafruitIO", "{9E466827-2772-47B4-B64D-8ADB1C0DE70B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{1B14DD12-262C-407A-9CCD-09E03DFE08B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.AdafruitIO", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.AdafruitIO\Driver\DataLoggers.AdafruitIO.csproj", "{7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataLoggers.ThingSpeak", "DataLoggers.ThingSpeak", "{A47BEE72-D1FA-4F02-96E1-84A70D7142B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{3C7605E8-136C-4282-B773-80C18021F73B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.ThingSpeak", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.ThingSpeak\Driver\DataLoggers.ThingSpeak.csproj", "{7E97BEAE-FC4E-480F-8D7A-A7960A553129}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors.Location.Gnss.NmeaProcessor", "Sensors.Location.Gnss.NmeaProcessor", "{23E4CD22-3FBE-415D-B16A-C661CB784C0D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{23CAD9E3-4913-4CC0-93DF-91494B3CFC44}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{17E22697-CB77-4F38-AB13-BBDBD53B7829}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Graphics.MicroGraphics", "Graphics.MicroGraphics", "{7EDC253C-2B62-4444-B406-CC4786B93C47}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{B9C34E27-85BD-457D-B2CF-CA289979ED6C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{0BB488AA-E23E-4697-BBD9-4A17B21BFCD7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics.MicroGraphics", "Meadow.Foundation.Libraries_and_Frameworks\Graphics.MicroGraphics\Driver\Graphics.MicroGraphics.csproj", "{13E39D67-ED46-4B2A-B66E-5B2415B5278C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Displays.TextDisplayMenu", "Displays.TextDisplayMenu", "{A363CC05-9B58-4231-9FB6-188F0FEF6AF0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.TextDisplayMenu", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Driver\Displays.TextDisplayMenu.csproj", "{C962A8DB-8D12-4B36-B22B-9B938565ABF7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextDisplayMenu_GameMenu_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Samples\TextDisplayMenu_GameMenu_Sample\TextDisplayMenu_GameMenu_Sample.csproj", "{F52EFDBF-3467-4068-8BE1-E94643ADE23B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TextDisplayMenu_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Displays.TextDisplayMenu\Samples\TextDisplayMenu_Sample\TextDisplayMenu_Sample.csproj", "{931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tb67h420ftg", "Tb67h420ftg", "{C6103552-7010-4353-9369-F6545D6A4E7B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B59A3D0E-89B2-484E-A2CC-AD7FC433F99A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.Tb67h420ftg", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Driver\Motors.Tb67h420ftg.csproj", "{8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindVane", "WindVane", "{D0C77B85-A3C1-41DC-B95B-EEC141CADA00}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.WindVane", "Meadow.Foundation.Peripherals\Sensors.Weather.WindVane\Driver\Sensors.Weather.WindVane.csproj", "{6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Foundation.Core", "Meadow.Foundation.Core\Meadow.Foundation.Core.csproj", "{A237BE35-0618-4B9B-A409-A3AC22053B53}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp9808", "Mcp9808", "{B71872DC-C58D-41A7-B24F-78D8136EE49E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{17A4EBF1-A1F8-475F-A304-A9B7F7B58C82}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Mcp9808", "Meadow.Foundation.Peripherals\Sensors.Temperature.Mcp9808\Driver\Sensors.Temperature.Mcp9808.csproj", "{99621A27-6E31-4D71-A395-FEB610337646}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp9808_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Mcp9808\Samples\Mcp9808_Sample\Mcp9808_Sample.csproj", "{F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SwitchingAnemometer", "SwitchingAnemometer", "{4D8E9D80-2108-4564-8B0A-D5DCEB4723C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{970D9570-A24B-4329-A888-F8DE9199A600}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ElectronicSpeedController", "ElectronicSpeedController", "{36346C46-BCCE-46D5-964F-E2A71EFD9CA2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Motors.ElectronicSpeedController", "Meadow.Foundation.Peripherals\Motors.ElectronicSpeedController\Driver\Motors.ElectronicSpeedController.csproj", "{F3499920-32A2-4E5E-9D9E-4D04B7399C49}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tca9548a", "Tca9548a", "{F0351FC4-759D-4CFE-8995-4C280771E369}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Tca9548a", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Tca9548a\Driver\ICs.IOExpanders.Tca9548a.csproj", "{F6824EF1-9F19-4727-8D35-E63AC59F816F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.SwitchingAnemometer", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingAnemometer\Driver\Sensors.Weather.SwitchingAnemometer.csproj", "{82980954-71E5-48CE-BA13-00B841707B04}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ccs811", "Ccs811", "{8A5A02DE-D320-489F-86D9-278022BDFE00}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Ccs811", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ccs811\Driver\Sensors.Atmospheric.Ccs811.csproj", "{FDA130ED-6502-4357-BB48-A6C080BDB511}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A857BC05-B321-4E1F-8FB9-CAA9BE65118B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ccs811_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Ccs811\Samples\Ccs811_Sample\Ccs811_Sample.csproj", "{D4CA169B-7E84-4AE3-BE82-F232277D4CD4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Buttons.PushButton_BasicSample", "Meadow.Foundation.Core.Samples\Sensors.Buttons.PushButton_BasicSample\Sensors.Buttons.PushButton_BasicSample.csproj", "{2FFEB068-12D2-4EF6-B3CE-767F2E223177}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AnalogSolarIntensityGauge", "AnalogSolarIntensityGauge", "{A4871FEF-60ED-4BB1-B03C-C149D297A2D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.AnalogSolarIntensityGauge", "Meadow.Foundation.Peripherals\Sensors.Light.AnalogSolarIntensityGauge\Driver\Sensors.Light.AnalogSolarIntensityGauge.csproj", "{91D22CEA-4C96-4643-B486-6ED49FA1124D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tca9548a_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Tca9548a\Samples\Tca9548a_Sample\Tca9548a_Sample.csproj", "{223CF15A-83B8-4E43-9645-50D45D9470A5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{40E200ED-D7B8-4FFD-B4FC-753E56DA831E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Adxl3xx", "Adxl3xx", "{4E23D21F-8827-4F6B-BA35-C8FE4457027C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Adxl3xx", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Driver\Sensors.Motion.Adxl3xx.csproj", "{2F78C85C-A670-4795-8435-5B4CAF5C05F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1681_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1681_Sample\SSD1681_Sample.csproj", "{B7A42999-EA3D-4A03-BFB6-72CBEDD42266}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gc9a01_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Gc9a01_Sample\Gc9a01_Sample.csproj", "{3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9481_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9481_Sample\Ili9481_Sample.csproj", "{CD2D9129-08F4-4B97-91E9-DBA857EAFE63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9486_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9486_Sample\Ili9486_Sample.csproj", "{D320C6B3-23A8-4D7E-A9EB-75E15E788191}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ili9488_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ili9488_Sample\Ili9488_Sample.csproj", "{376F896D-DB61-471D-8911-98609A9D1612}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rm68140_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Rm68140_Sample\Rm68140_Sample.csproj", "{402F9677-CCA1-4ED9-872A-9F09D15BC626}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "S6D02A1_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\S6D02A1_Sample\S6D02A1_Sample.csproj", "{072B7F1E-3207-42F6-A55F-EF004D793304}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1309_Sample", "Meadow.Foundation.Peripherals\Displays.Ssd130x\Samples\Ssd1309_Sample\Ssd1309_Sample.csproj", "{AC2E5FB5-5E60-4D95-9281-29153C3065C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronicSpeedController_Sample", "Meadow.Foundation.Peripherals\Motors.ElectronicSpeedController\Samples\ElectronicSpeedController_Sample\ElectronicSpeedController_Sample.csproj", "{0675BC5E-E2F5-45D8-8484-13D3A0694B31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tb67h420ftg_Encoder_Sample", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Samples\Tb67h420ftg_Encoder_Sample\Tb67h420ftg_Encoder_Sample.csproj", "{38B25115-B6FF-49EC-BDE8-26C9416CCE5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tb67h420ftg_Sample", "Meadow.Foundation.Peripherals\Motors.Tb67h420ftg\Samples\Tb67h420ftg_Sample\Tb67h420ftg_Sample.csproj", "{2D765C12-335D-4663-A8A3-48C7B45E9F95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdafruitMPRLS_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.AdafruitMPRLS\Samples\AdafruitMPRLS_Sample\AdafruitMPRLS_Sample.csproj", "{270770CD-BE88-4FFA-98DA-9171B39199C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Si70xx_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Si70xx\Samples\Si70xx_Sample\Si70xx_Sample.csproj", "{1D874861-3573-4CA1-B61D-5FE9224934ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mlx90640_Sample", "Meadow.Foundation.Peripherals\Sensors.Camera.Mlx90640\Samples\Mlx90640_Sample\Mlx90640_Sample.csproj", "{6F2BB265-1CDD-46AB-9128-7CE3BAC71666}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ags01Db_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ags01Db\Samples\Ags01Db_Sample\Ags01Db_Sample.csproj", "{E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwitchingAnemometer_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingAnemometer\Samples\SwitchingAnemometer_Sample\SwitchingAnemometer_Sample.csproj", "{9365F114-A7B5-4F38-A089-EE8DF13C4F9D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WindVane_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.WindVane\Samples\WindVane_Sample\WindVane_Sample.csproj", "{206850DF-E549-4AA4-AF42-F00B762E20FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl335_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl335_Sample\Adxl335_Sample.csproj", "{CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl337_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl337_Sample\Adxl337_Sample.csproj", "{245DC3F9-953F-41D6-86F9-7945B640A923}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl345_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl345_Sample\Adxl345_Sample.csproj", "{CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl362_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl362_Sample\Adxl362_Sample.csproj", "{FE597532-2349-4851-A399-DBC5D37126BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Adxl377_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Adxl3xx\Samples\Adxl377_Sample\Adxl377_Sample.csproj", "{86291CCC-A5B8-427E-A68C-F75AE14F295A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.AnalogWaterLevel_Sample", "Meadow.Foundation.Core.Samples\Sensors.Environmental.AnalogWaterLevel_Sample\Sensors.Environmental.AnalogWaterLevel_Sample.csproj", "{5224C344-5797-4D05-A4AA-835E576F6B9D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tea5767_Sample", "Meadow.Foundation.Peripherals\Audio.Radio.Tea5767\Samples\Tea5767_Sample\Tea5767_Sample.csproj", "{A231D471-D435-43BE-BDAE-DBC14BC6CCE8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IDxxLA_Sample", "Meadow.Foundation.Peripherals\Sensors.Radio.Rfid.IDxxLA\Samples\IDxxLA_Sample\IDxxLA_Sample.csproj", "{55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnalogSolarIntensityGauge_Sample", "Meadow.Foundation.Peripherals\Sensors.Light.AnalogSolarIntensityGauge\Samples\AnalogSolarIntensityGauge_Sample\AnalogSolarIntensityGauge_Sample.csproj", "{2CD36743-6F9C-41DA-8AA8-68B7E58F2661}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Apa102_Display_Sample", "Meadow.Foundation.Peripherals\Leds.Apa102\Samples\Apa102_Display_Sample\Apa102_Display_Sample.csproj", "{64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dht10_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Dhtxx\Samples\Dht10_Sample\Dht10_Sample.csproj", "{903369E3-E454-42DB-8939-70C64049D1C2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bbq10Keyboard", "Bbq10Keyboard", "{C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Bbq10Keyboard", "Meadow.Foundation.Peripherals\Sensors.Hid.BBQ10Keyboard\Driver\Sensors.Hid.Bbq10Keyboard.csproj", "{C4BA8BCA-19F8-41F5-8253-03EC1B63694A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bbq10Keyboard_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.BBQ10Keyboard\Samples\Bbq10Keyboard_Sample\Bbq10Keyboard_Sample.csproj", "{CCDF251E-DF74-4623-93F9-301B96F14182}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ssd1331_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\Ssd1331_Sample\Ssd1331_Sample.csproj", "{6AF2F8E5-423F-4EF7-9AB6-1978792598B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "St7796s_Sample", "Meadow.Foundation.Peripherals\Displays.TftSpi\Samples\St7796s_Sample\St7796s_Sample.csproj", "{BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageLoad_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Graphics.MicroGraphics\Samples\ImageLoadSample\ImageLoad_Sample.csproj", "{598D3695-BEB7-4BD7-AE6A-C296F36265E7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tsc2004", "Tsc2004", "{372B055D-2279-47D2-B1A8-AB1E5670202F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.Tsc2004", "Meadow.Foundation.Peripherals\Sensors.Hid.Tsc2004\Driver\Sensors.Hid.Tsc2004.csproj", "{8908AAA5-53DD-4526-AAF8-01308F1316EF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B167E0C6-F2D8-4B4F-B814-578B72B083BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tsc2004_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.Tsc2004\Samples\Tsc2004_Sample\Tsc2004_Sample.csproj", "{C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ads1x15", "Ads1x15", "{95590089-FF1E-4909-8E24-ED5FB75B8CFE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.ADC.Ads1x15", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Driver\ICs.ADC.Ads1x15.csproj", "{C122523F-ADF9-4A16-9705-327D7E78F93D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ads1015_Sample", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Samples\Ads1015_Sample\Ads1015_Sample.csproj", "{169CC53A-9160-4A49-ABEF-9E7C3F78E45C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MaxBotix", "MaxBotix", "{0FFE9335-C96D-4A88-96BF-66C03D3EE980}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1D1CA5FF-033A-438C-A706-DFED47844751}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.MaxBotix", "Meadow.Foundation.Peripherals\Sensors.Distance.MaxBotix\Driver\Sensors.Distance.MaxBotix.csproj", "{B0684D65-B983-4BA6-89F2-C4CB24389DFC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MaxBotix_Sample", "Meadow.Foundation.Peripherals\Sensors.Distance.MaxBotix\Samples\MaxBotix_Sample\MaxBotix_Sample.csproj", "{03B2E5AC-CFAC-47FE-9767-0872C8151CFC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SwitchingRainGauge", "SwitchingRainGauge", "{380520E6-12D0-4DD3-AADF-BD27A6F6702F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A29C80C8-E116-4344-A49F-7E58529DC338}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Weather.SwitchingRainGauge", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingRainGauge\Driver\Sensors.Weather.SwitchingRainGauge.csproj", "{D017E544-F3D7-49DE-913C-CD9D12D23007}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwitchingRainGauge_Sample", "Meadow.Foundation.Peripherals\Sensors.Weather.SwitchingRainGauge\Samples\SwitchingRainGauge_Sample\SwitchingRainGauge_Sample.csproj", "{AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Contracts", "..\..\Meadow.Contracts\Source\Meadow.Contracts\Meadow.Contracts.csproj", "{150569EE-4053-4097-98EE-A455287610B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Units", "..\..\Meadow.Units\Source\Meadow.Units\Meadow.Units.csproj", "{46394970-4495-408F-8A9C-31BEBC47E899}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mma7660fc", "Mma7660fc", "{8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mma7660fc", "Meadow.Foundation.Peripherals\Sensors.Motion.Mma7660fc\Driver\Sensors.Motion.Mma7660fc.csproj", "{4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9D13043C-8A59-461A-9A4D-3735D06CED77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mma7660fc_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mma7660fc\Samples\Mma7660fc_Sample\Mma7660fc_Sample.csproj", "{A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pca9633", "Pca9633", "{0457B9CA-A2AE-417C-869A-980B19A9FC1A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leds.Pca9633", "Meadow.Foundation.Peripherals\Leds.Pca9633\Driver\Leds.Pca9633.csproj", "{F76C3DC7-8C20-45EC-A321-88BCE88E5070}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{449B5AF2-688B-4E94-96F1-A6599EC17204}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pca9633_Sample", "Meadow.Foundation.Peripherals\Leds.Pca9633\Samples\Pca9633_Sample\Pca9633_Sample.csproj", "{CD6081AC-0E17-46D5-A335-34D6EA497798}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Th02", "Th02", "{CA48F7B8-87CA-495C-86C3-AE5C2D17EB62}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2BDEE5C8-5611-4EA7-BE69-56B1CBC84065}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Th02", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Th02\Driver\Sensors.Atmospheric.Th02.csproj", "{B971549F-B16D-4B0B-AC58-1CE85032E284}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Th02_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Th02\Samples\Th02_Sample\Th02_Sample.csproj", "{B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Htux1d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Driver\Sensors.Atmospheric.Htux1d.csproj", "{F6FE1203-D39F-40DD-BD89-82CFF8AD694E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu21d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu21d_Sample\Htu21d_Sample.csproj", "{35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu31d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu31d_Sample\Htu31d_Sample.csproj", "{BA371CFB-C07A-4D29-B700-EAD37DD30D6F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.SensorReading", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.SensorReading\Driver\DataLoggers.SensorReading.csproj", "{A65353C4-D300-421D-AD04-5D69AF02BD9F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Location.Gnss.NmeaProcessor", "Meadow.Foundation.Libraries_and_Frameworks\Sensors.Location.Gnss.NmeaProcessor\Driver\Sensors.Location.Gnss.NmeaProcessor.csproj", "{77601D70-30C7-48E3-86C1-DF311FFA89C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NmeaProcessor_Sample", "Meadow.Foundation.Libraries_and_Frameworks\Sensors.Location.Gnss.NmeaProcessor\Samples\NmeaProcessor_Sample\NmeaProcessor_Sample.csproj", "{55025FED-EB56-4875-AF18-C48F30E20991}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Generators.SoftPwmPort_Sample", "Meadow.Foundation.Core.Samples\Generators.SoftPwmPort_Sample\Generators.SoftPwmPort_Sample.csproj", "{07F091E6-76EA-4A01-AB96-BF48EB87412A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WiiExtensionControllers", "WiiExtensionControllers", "{16681455-B8C2-448B-946F-F2053916B2B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.WiiExtensionControllers", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Driver\Sensors.Hid.WiiExtensionControllers.csproj", "{0A83C802-7117-4D78-98A5-C67BD70AF1A6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9E6A4897-5F52-4893-B090-EF5B941AC709}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NesClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\NesClassicController_Sample\NesClassicController_Sample.csproj", "{C2080A10-C700-41EB-98A2-0914F077F04F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SnesClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\SnesClassicController_Sample\SnesClassicController_Sample.csproj", "{F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiClassicController_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiClassicController_Sample\WiiClassicController_Sample.csproj", "{7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiClassicControllerPro_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiClassicControllerPro_Sample\WiiClassicControllerPro_Sample.csproj", "{1FA13E27-1A15-4019-9A55-724A992EA964}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WiiNunchuck_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.WiiExtensionControllers\Samples\WiiNunchuck_Sample\WiiNunchuck_Sample.csproj", "{1E3CB802-08BC-4F4F-9760-DA5D09E0202A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "As5013", "As5013", "{1CE1A084-8585-4C87-939C-281A46EF8B10}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.As5013", "Meadow.Foundation.Peripherals\Sensors.Hid.As5013\Driver\Sensors.Hid.As5013.csproj", "{CB7AB7D6-C0E9-4320-A691-1775D62A4933}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "As5013_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.As5013\Samples\As5013_Sample\As5013_Sample.csproj", "{96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sht4x", "Sht4x", "{23FBF746-20A2-43FF-B248-5EE6C44C39F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sht4x", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht4x\Driver\Sensors.Atmospheric.Sht4x.csproj", "{41DFD1BB-2C66-4548-B43F-2593AE90C36E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4657A98F-6D05-48EB-864D-E3D0DCA658C5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds3502", "Ds3502", "{853477A1-9B58-4893-AFDD-577471C62DB1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C6E0BE66-399B-449A-B3A0-3D594EFFE1A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ds3502", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ds3502\Driver\ICs.IOExpanders.Ds3502.csproj", "{8EEDC98C-AC87-490C-8C36-846EE82E9D0D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds3502_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ds3502\Samples\Ds3502_Sample\Ds3502_Sample.csproj", "{A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Qmc5883_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Hmc5883\Samples\Qmc5883_Sample\Qmc5883_Sample.csproj", "{6AF1C69A-3293-4ADC-AB1B-B814A709D15F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bh1900Nux", "Bh1900Nux", "{6E207804-A991-42DD-BE14-AB8E18940162}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bh1900Nux", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bh1900Nux\Driver\Sensors.Atmospheric.Bh1900Nux.csproj", "{71FE0FFA-F897-4067-8687-A033B5D0BB5D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{494AAADA-7CF7-44A4-AFB2-4AEC664151E3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bh1900Nux_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bh1900Nux\Samples\Bh1900Nux_Sample\Bh1900Nux_Sample.csproj", "{43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sgp40", "Sgp40", "{B98533B9-CA48-4F0D-961B-C95BD5158391}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sgp40", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sgp40\Driver\Sensors.Atmospheric.Sgp40.csproj", "{71EBC24D-5B32-4E76-ADF3-DE0017946108}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sgp40_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sgp40\Samples\Sgp40_Sample\Sgp40_Sample.csproj", "{1ACC6BA0-8108-4BFA-9A75-9063B5E07493}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AnalogMux", "AnalogMux", "{643EF07C-36AD-4796-9748-2F630631CF16}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{27443DF5-9D37-47E8-A350-4AFD103913CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.AnalogMux", "Meadow.Foundation.Peripherals\ICs.IOExpanders.AnalogMux\Driver\ICs.IOExpanders.AnalogMux.csproj", "{D80EB935-8B49-4D46-8474-F457C5BFB27C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nxp74HC4051_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.AnalogMux\Samples\Nxp74HC4051_Sample\Nxp74HC4051_Sample.csproj", "{212208FF-76E1-4864-ADA4-AAC7AE0F2981}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Audio", "Audio", "{BD86951F-CB52-412C-A765-FA48D704C1DD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Displays", "Displays", "{2B794146-DFEE-475A-B919-7D3ED48587B8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ICs", "ICs", "{A1917BD0-881F-4775-88D9-38D42D448CF5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Leds", "Leds", "{5F1D642C-E91E-4894-A3D2-0B92AE7249EC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Motors", "Motors", "{2486B48D-D4A2-4505-BF50-F33B2E15DA97}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RTCs", "RTCs", "{15C7A398-35B0-4035-AE4B-FE84026D0D9E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors", "Sensors", "{9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Atmospheric", "Atmospheric", "{DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cameras", "Cameras", "{91DE515A-DFF9-4B75-809C-F56C51222310}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Distance", "Distance", "{CE93FAED-E50E-4D08-93C6-25FAEBF0260B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Light", "Light", "{C12ECFF4-2767-4764-8B98-85A239B9E756}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Motion", "Motion", "{283E2851-C603-4F0D-A10B-4CDC8CBBE06D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Temperature", "Temperature", "{DBC6C89D-A932-4F99-9382-7405A0045988}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Weather", "Weather", "{10C3B2B1-FE8F-4AC6-A469-51573060A45B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LoadCell", "LoadCell", "{1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hid", "Hid", "{818BF624-10A7-45B2-9BEE-4C411CD9CA06}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Moisture", "Moisture", "{D3548F8A-A066-41AC-BD3D-6AAECE58A242}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Radio", "Radio", "{544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sound", "Sound", "{C7E24134-762D-460C-8882-11341328C707}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Power", "Power", "{C95CDA6C-3968-467E-80ED-5A963BE96215}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gnss", "Gnss", "{F17D89F6-2993-4583-93B6-57B2025859E0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Environmental", "Environmental", "{78E463DA-0FA1-4AAE-A281-D3297C9388C9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IOExpanders", "IOExpanders", "{86B81B21-8C90-4A99-B113-FA71F8A6CD8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eeprom", "Eeprom", "{FAFDCB37-4678-4B8A-884D-F9978161CDF2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ADC", "ADC", "{E97B3C9A-7F99-4482-989D-56146C87055A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.SerialWombat", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Driver\ICs.IOExpanders.SerialWombat.csproj", "{1D73C60C-163D-4537-8B16-246FAE87B80F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SerialWombat", "SerialWombat", "{73286182-0507-4B61-A5BE-67B5C1A5D637}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5F4B9D7E-81B4-4562-BEDC-3499A8DDE648}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_PWM_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_PWM_Sample\Sw18AB_PWM_Sample.csproj", "{71290423-6A82-4263-B592-8266EAB58D9B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_ADC_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_ADC_Sample\Sw18AB_ADC_Sample.csproj", "{E15DD562-8ED5-4311-BE65-DEA0DB592FB2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Ultrasonic_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Ultrasonic_Sample\Sw18AB_Ultrasonic_Sample.csproj", "{B8578827-6DB4-491A-87B0-36D95AE008D3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "As1115", "As1115", "{2A780BB9-6C85-41A9-98F1-8B13B5C54093}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{1C955941-ADF9-478A-B17C-24C5F6434E40}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.As1115", "Meadow.Foundation.Peripherals\ICs.IOExpanders.As1115\Driver\ICs.IOExpanders.As1115.csproj", "{0F796184-BC8F-4C32-8EC4-EF13D1229D4A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "As1115_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.As1115\Samples\As1115_Sample\As1115_Sample.csproj", "{6F6C93D0-2FBB-4633-BEDA-4F194625C098}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmi270", "Bmi270", "{7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Bmi270", "Meadow.Foundation.Peripherals\Sensors.Motion.Bmi270\Driver\Sensors.Motion.Bmi270.csproj", "{DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8E1C6F25-B4BA-4652-9B89-A2805F018385}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bmi270_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Bmi270\Samples\Bmi270_Sample\Bmi270_Sample.csproj", "{4205BFDF-E03D-4148-844A-A87B72888F68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bme688_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bme68x\Samples\Bme688_Sample\Bme688_Sample.csproj", "{53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s17_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s17_Sample\Mcp23s17_Sample.csproj", "{D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s08_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s08_Sample\Mcp23s08_Sample.csproj", "{AC604844-C136-4204-B73F-2AD19EF389E0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23008_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23008_Sample\Mcp23008_Sample.csproj", "{2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23017_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23017_Sample\Mcp23017_Sample.csproj", "{C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s09_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s09_Sample\Mcp23s09_Sample.csproj", "{97AF0484-5E33-4DF9-802D-6DCA15A93F38}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23s18_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23s18_Sample\Mcp23s18_Sample.csproj", "{B23C6117-7396-4FDA-A08D-7E329CF453FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23009_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23009_Sample\Mcp23009_Sample.csproj", "{0F507104-F919-44C6-A940-CAE7EAE4FD3B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23018_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23018_Sample\Mcp23018_Sample.csproj", "{92F2B28F-AD70-47D2-BC9A-437C862908D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp23x17_Input_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Mcp23xxx\Samples\Mcp23x17_Input_Sample\Mcp23x17_Input_Sample.csproj", "{0C14E200-87E9-4F1D-93D2-4738B0D6F918}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ePaperWaveShare", "ePaperWaveShare", "{8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{7311794D-7D2F-47E8-A5B0-C216CBD64A13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.ePaperWaveShare", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Driver\Displays.ePaperWaveShare.csproj", "{23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EpdColor_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\EpdColor_Sample\EpdColor_Sample.csproj", "{83957117-1E62-4C20-90C4-0796D210444D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EpdMonochrome_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\EpdMonochrome_Sample\EpdMonochrome_Sample.csproj", "{5AE56DA7-0299-409F-A465-E9B51B293DA9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UC8151C_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\UC8151C_Sample\UC8151C_Sample.csproj", "{26DE539B-517B-489D-BB9C-78D4A7B0BE3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Servos", "Servos", "{A259504D-1EB9-4B1F-955A-95713EF4733A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ads1115_Sample", "Meadow.Foundation.Peripherals\ICs.ADC.Ads1x15\Samples\Ads1115_Sample\Ads1115_Sample.csproj", "{1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FanControllers", "FanControllers", "{7CB0117E-E2DA-45D6-BE69-46CDE6B7A148}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Emc2101", "Emc2101", "{89A7C08F-5956-4C72-88AC-86EB9FADCEC9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{374EE6C8-205D-4416-92CB-AC1CCB279226}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.FanControllers.Emc2101", "Meadow.Foundation.Peripherals\ICs.FanControllers.Emc2101\Driver\ICs.FanControllers.Emc2101.csproj", "{25256C84-8B6B-4ED2-910E-DF0A70834AB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Emc2101_Sample", "Meadow.Foundation.Peripherals\ICs.FanControllers.Emc2101\Samples\Emc2101_Sample\Emc2101_Sample.csproj", "{49345834-BE10-4E23-AF72-A80EF5E82932}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SSD1680_Sample", "Meadow.Foundation.Peripherals\Displays.ePaper\Samples\SSD1680_Sample\SSD1680_Sample.csproj", "{D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Core_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Core_Sample\Sw18AB_Core_Sample.csproj", "{BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sw18AB_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.SerialWombat\Samples\Sw18AB_Sample\Sw18AB_Sample.csproj", "{3102742F-8C87-4C84-B257-1A49DDB3D6BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sht4x_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht4x\Samples\Sht4x_Sample\Sht4x_Sample.csproj", "{831C87F3-4925-4311-83A4-C07CE4CD109E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MQTTnet", "..\..\MQTTnet\Source\MQTTnet\MQTTnet.csproj", "{810BF526-53F8-4DFB-A32A-A67CB5FFF785}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Light.AnalogLightSensor_Sample", "Meadow.Foundation.Core.Samples\Sensors.Light.AnalogLightSensor_Sample\Sensors.Light.AnalogLightSensor_Sample.csproj", "{5A2538C7-D110-4DFB-A77B-C328CDDF7848}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Thermistor", "Thermistor", "{FF251CAE-8D0B-45E2-BAA4-FE2991D527F7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Temperature.Thermistor", "Meadow.Foundation.Peripherals\Sensors.Temperature.Thermistor\Driver\Sensors.Temperature.Thermistor.csproj", "{CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2637750E-FF22-4AFF-882D-D80C3A6D1D5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thermistor_Sample", "Meadow.Foundation.Peripherals\Sensors.Temperature.Thermistor\Samples\Thermistor_Sample\Thermistor_Sample.csproj", "{5787131C-A3BC-4BB4-BC05-C792AF28A118}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NeoM8", "NeoM8", "{C4995CA0-EC5E-4DE0-8CB2-685888D70C6B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Gnss.NeoM8", "Meadow.Foundation.Peripherals\Sensors.Gnss.NeoM8\Driver\Sensors.Gnss.NeoM8.csproj", "{15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{DC8844DD-3E56-4C6E-8353-85D14004042E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NeoM8_Sample", "Meadow.Foundation.Peripherals\Sensors.Gnss.NeoM8\Samples\NeoM8_Sample\NeoM8_Sample.csproj", "{C08B6F18-0B02-41B7-8070-92E9A1F65B21}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scd4x", "Scd4x", "{B3B151AE-7C26-4313-AA47-61397791BA92}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Scd4x", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Driver\Sensors.Environmental.Scd4x.csproj", "{FAD15B5F-1912-44BF-AF96-1EB496683E87}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{94B3A671-D329-47FF-8635-6A3CF8238DFE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scd40_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Samples\Scd40_Sample\Scd40_Sample.csproj", "{06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scd41_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Scd4x\Samples\Scd41_Sample\Scd41_Sample.csproj", "{54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Core", "..\..\Meadow.Core\source\Meadow.Core\Meadow.Core.csproj", "{72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ens160", "Ens160", "{F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{C1728E08-5B75-4146-B836-FD046A1BD741}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Ens160", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ens160\Driver\Sensors.Environmental.Ens160.csproj", "{155C1A41-E529-41AC-B1C1-461ADAC30023}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ens160_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Ens160\Samples\Ens160_Sample\Ens160_Sample.csproj", "{EE44BFA9-03F1-4018-A59F-FE7F1523E845}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Logging", "..\..\Meadow.Logging\Source\Meadow.Logging\lib\Meadow.Logging.csproj", "{EB956E43-A4BE-4F79-AF92-D725604DBE76}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mmc5603", "Mmc5603", "{ECA644FF-D647-4CA1-80F0-7C730D57130E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2674E933-02F5-4DBD-B14B-08001D49EDB4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Mmc5603", "Meadow.Foundation.Peripherals\Sensors.Motion.Mmc5603\Driver\Sensors.Motion.Mmc5603.csproj", "{BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mmc5603_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Mmc5603\Samples\Mmc5603_Sample\Mmc5603_Sample.csproj", "{10BD048E-0768-4791-A34B-F94CD9A4D5B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Y4000", "Y4000", "{718EE625-B05F-4BC9-8CE3-A7659BCA22A4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Y4000", "Meadow.Foundation.Peripherals\Sensors.Environmental.Y4000\Driver\Sensors.Environmental.Y4000.csproj", "{6836D74A-3003-45C5-9DBA-0CE46450A55A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F9B62A9D-4DDC-4646-9B43-06D471E0F82C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Y4000_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Y4000\Samples\Y4000_Sample\Y4000_Sample.csproj", "{E718B06A-FEAF-4E11-9344-E81272E214AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.Modbus", "..\..\Meadow.Modbus\src\Meadow.Modbus\Meadow.Modbus.csproj", "{DD749A41-50A3-4DB4-A84F-4372BDFCB742}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meadow.F7", "..\..\Meadow.Core\source\implementations\f7\Meadow.F7\Meadow.F7.csproj", "{404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ft232h", "Ft232h", "{4E0052C2-559D-4509-9C42-C6451B1F1FFC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.IOExpanders.Ft232h", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Driver\ICs.IOExpanders.Ft232h.csproj", "{BEF5B037-DAB7-43C6-8A5C-EB749573C815}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{67B5150B-2FDE-4EA8-93EE-8BB31D5D7789}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ft232h_Windows_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ft232h\Samples\Ft232h_Windows_Sample\Ft232h_Windows_Sample.csproj", "{B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinForms", "WinForms", "{BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.WinForms", "Meadow.Foundation.Peripherals\Displays.WinForms\Driver\Displays.WinForms.csproj", "{2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{14ACE12B-5B23-4FF3-B3C2-BFECB21064A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Gtk", "Meadow.Foundation.Peripherals\Displays.Gtk\Driver\Displays.Gtk.csproj", "{768E2B04-FBE8-4464-B5DE-F5AA010E9D33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Epd5in65f_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\Epd5in65f_Sample\Epd5in65f_Sample.csproj", "{16A387A9-80AA-4080-85F6-10F53D6EC99E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003i", "Pmsa003i", "{AD6DD7B6-B896-44B9-904E-9330C2C842C7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ch1115", "Ch1115", "{753F764D-EA21-43A0-B761-6E9B43D8C90B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ch1115", "Meadow.Foundation.Peripherals\Displays.Ch1115\Driver\Displays.Ch1115.csproj", "{C182D69A-FE45-46BF-8522-76E0BC962FFB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D46CA94B-9A0C-4188-9EE8-8A51E1499B73}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ch1115_Sample", "Meadow.Foundation.Peripherals\Displays.Ch1115\Samples\Ch1115_Sample\Ch1115_Sample.csproj", "{1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sh110x", "Sh110x", "{8D0C58C8-B325-48A1-A500-7E8FDC28C272}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F288D725-B26F-4E32-B870-F391AF4211EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Sh110x", "Meadow.Foundation.Peripherals\Displays.Sh110x\Driver\Displays.Sh110x.csproj", "{BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1106_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1106_Sample\Sh1106_Sample.csproj", "{F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.FourteenSegment", "Led.FourteenSegment", "{1D0D2EEC-2637-489F-83C3-7F7CB36E5512}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{4A7E3CDC-2141-4D74-A8CB-480ED78251B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.FourteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Driver\Displays.Led.FourteenSegment.csproj", "{2E207B06-0C55-44FA-8334-62D791DB6105}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FourteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.FourteenSegment\Samples\FourteenSegment_Sample\FourteenSegment_Sample.csproj", "{B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ht16k33_Character_Sample", "Meadow.Foundation.Peripherals\ICs.IOExpanders.Ht16k33\Samples\Ht16k33_Character_Sample\Ht16k33_Character_Sample.csproj", "{85EA8B09-1C8D-4E67-9770-C1AD0A550DED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Led.SixteenSegment", "Led.SixteenSegment", "{C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{13D97CCB-2CFF-4AB8-A170-701525DA740B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SixteenSegment", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Driver\Displays.Led.SixteenSegment.csproj", "{70A3BC90-AB6A-4498-BFDE-07AA25823036}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Samples\SixteenSegment_Sample\SixteenSegment_Sample.csproj", "{A470E563-7ADD-4A76-91AE-C1190134D3FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Pmsa003i", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Sensors.Environmental.Pmsa003i.csproj", "{B935965C-0FFC-4D7B-BDBC-B17C46C785F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MiniPID2", "MiniPID2", "{38944011-FA3C-4557-9049-B41B6168F6C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.MiniPID2", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Driver\Sensors.Environmental.MiniPID2.csproj", "{00085539-EB03-49CE-8518-13544FD480BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{59445EBB-78B8-4E83-B05D-C597D0C9AEC0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniPID2_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Samples\MiniPID2_Sample\MiniPID2_Sample.csproj", "{95670172-AB31-4239-8805-346DDD57983F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ANONavigationEncoder", "ANONavigationEncoder", "{E2A8BDCC-626E-450D-918F-785E3777793E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Hid.ANONavigationEncoder", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Driver\Sensors.Hid.ANONavigationEncoder.csproj", "{D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{113D71B4-AE9A-402A-95A0-4D46C28F1EA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ANONavigationEncoder_Sample", "Meadow.Foundation.Peripherals\Sensors.Hid.ANONavigationEncoder\Samples\ANONavigationEncoder_Sample\ANONavigationEncoder_Sample.csproj", "{3885F704-2844-4EDD-9706-BD1B0C85A29B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sh1107_Sample", "Meadow.Foundation.Peripherals\Displays.Sh110x\Samples\Sh1107_Sample\Sh1107_Sample.csproj", "{EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74F47C15-1293-404A-8C92-0F72A3DE7BA7}.Release|Any CPU.Build.0 = Release|Any CPU - {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58}.Release|Any CPU.Build.0 = Release|Any CPU - {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA}.Release|Any CPU.Build.0 = Release|Any CPU - {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90A0ADDA-0CC2-491B-9140-DFE086EA66FC}.Release|Any CPU.Build.0 = Release|Any CPU - {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20A24104-F8EF-4BDD-99F7-145CA63645B0}.Release|Any CPU.Build.0 = Release|Any CPU - {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C0F8C22-10FB-4D50-B87B-41558A87B30A}.Release|Any CPU.Build.0 = Release|Any CPU - {05896551-6032-48C3-B847-79DEA73D5143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {05896551-6032-48C3-B847-79DEA73D5143}.Debug|Any CPU.Build.0 = Debug|Any CPU - {05896551-6032-48C3-B847-79DEA73D5143}.Release|Any CPU.ActiveCfg = Release|Any CPU - {05896551-6032-48C3-B847-79DEA73D5143}.Release|Any CPU.Build.0 = Release|Any CPU - {28967B13-8651-4E28-B1E9-5D99D43DE202}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28967B13-8651-4E28-B1E9-5D99D43DE202}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28967B13-8651-4E28-B1E9-5D99D43DE202}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28967B13-8651-4E28-B1E9-5D99D43DE202}.Release|Any CPU.Build.0 = Release|Any CPU - {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D4A6B45-101D-49F4-B4BD-8A47B8A98098}.Release|Any CPU.Build.0 = Release|Any CPU - {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D}.Release|Any CPU.Build.0 = Release|Any CPU - {26EC0711-624C-48E1-A4A6-A55FD2249139}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26EC0711-624C-48E1-A4A6-A55FD2249139}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26EC0711-624C-48E1-A4A6-A55FD2249139}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26EC0711-624C-48E1-A4A6-A55FD2249139}.Release|Any CPU.Build.0 = Release|Any CPU - {634CA076-F37B-4700-9FC4-58B1BD490627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {634CA076-F37B-4700-9FC4-58B1BD490627}.Debug|Any CPU.Build.0 = Debug|Any CPU - {634CA076-F37B-4700-9FC4-58B1BD490627}.Release|Any CPU.ActiveCfg = Release|Any CPU - {634CA076-F37B-4700-9FC4-58B1BD490627}.Release|Any CPU.Build.0 = Release|Any CPU - {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD938FD6-64B5-4B12-AD1B-42D4D401486C}.Release|Any CPU.Build.0 = Release|Any CPU - {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Debug|Any CPU.Build.0 = Debug|Any CPU - {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Release|Any CPU.ActiveCfg = Release|Any CPU - {091CF87A-BF50-44B5-BA3A-2D4BFB56E111}.Release|Any CPU.Build.0 = Release|Any CPU - {105C53A9-4421-4A54-BF09-533D54BABECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {105C53A9-4421-4A54-BF09-533D54BABECC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {105C53A9-4421-4A54-BF09-533D54BABECC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {105C53A9-4421-4A54-BF09-533D54BABECC}.Release|Any CPU.Build.0 = Release|Any CPU - {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6}.Release|Any CPU.Build.0 = Release|Any CPU - {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3}.Release|Any CPU.Build.0 = Release|Any CPU - {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3A79085-41A4-4F86-90D1-8BC4F53FA625}.Release|Any CPU.Build.0 = Release|Any CPU - {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0141F077-F5B1-4134-B513-F3A6FEA8D53A}.Release|Any CPU.Build.0 = Release|Any CPU - {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6711636F-A503-4D2F-AD47-CFB23FBDF484}.Release|Any CPU.Build.0 = Release|Any CPU - {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02E56C68-5B09-4331-9E5D-7FD9217594F0}.Release|Any CPU.Build.0 = Release|Any CPU - {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961}.Release|Any CPU.Build.0 = Release|Any CPU - {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7387C800-5C6C-4AA8-87E8-7FF04DF189F2}.Release|Any CPU.Build.0 = Release|Any CPU - {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94A3A79A-3614-426C-A99C-F1F5CCDC4305}.Release|Any CPU.Build.0 = Release|Any CPU - {894672CE-285A-40E7-98C7-EEBC530BBF24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {894672CE-285A-40E7-98C7-EEBC530BBF24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {894672CE-285A-40E7-98C7-EEBC530BBF24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {894672CE-285A-40E7-98C7-EEBC530BBF24}.Release|Any CPU.Build.0 = Release|Any CPU - {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9}.Release|Any CPU.Build.0 = Release|Any CPU - {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17}.Release|Any CPU.Build.0 = Release|Any CPU - {E77A4923-9FBD-471B-B161-DD9AD138313E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E77A4923-9FBD-471B-B161-DD9AD138313E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E77A4923-9FBD-471B-B161-DD9AD138313E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E77A4923-9FBD-471B-B161-DD9AD138313E}.Release|Any CPU.Build.0 = Release|Any CPU - {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB051C9D-49C5-46C5-B8B1-5E459179C761}.Release|Any CPU.Build.0 = Release|Any CPU - {041FFFB3-926E-471A-9C2B-343311824B30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {041FFFB3-926E-471A-9C2B-343311824B30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {041FFFB3-926E-471A-9C2B-343311824B30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {041FFFB3-926E-471A-9C2B-343311824B30}.Release|Any CPU.Build.0 = Release|Any CPU - {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7}.Release|Any CPU.Build.0 = Release|Any CPU - {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81E6E143-8752-45A9-8BDA-C6F4730A7DF1}.Release|Any CPU.Build.0 = Release|Any CPU - {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5542FE52-8D47-4279-A436-67DB6B1E1E12}.Release|Any CPU.Build.0 = Release|Any CPU - {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43BE21E0-CA04-4987-A1EE-0E3F5E940C00}.Release|Any CPU.Build.0 = Release|Any CPU - {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A}.Release|Any CPU.Build.0 = Release|Any CPU - {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {225C7669-6CD3-4F24-8F02-5620BF682BF3}.Release|Any CPU.Build.0 = Release|Any CPU - {C4E371CD-452B-445D-968A-FA2805A13DEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4E371CD-452B-445D-968A-FA2805A13DEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4E371CD-452B-445D-968A-FA2805A13DEE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4E371CD-452B-445D-968A-FA2805A13DEE}.Release|Any CPU.Build.0 = Release|Any CPU - {E5256D16-2D8E-4A38-913C-863AB9819D53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5256D16-2D8E-4A38-913C-863AB9819D53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5256D16-2D8E-4A38-913C-863AB9819D53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5256D16-2D8E-4A38-913C-863AB9819D53}.Release|Any CPU.Build.0 = Release|Any CPU - {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15D040E2-2ECC-413B-AA87-6455D7D930A5}.Release|Any CPU.Build.0 = Release|Any CPU - {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A431E3A8-471B-4D51-B271-8E614F6E77C6}.Release|Any CPU.Build.0 = Release|Any CPU - {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134}.Release|Any CPU.Build.0 = Release|Any CPU - {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B529C67-B1BF-41A4-8870-42A027ABFBCF}.Release|Any CPU.Build.0 = Release|Any CPU - {5574FE78-17B0-4295-9F27-2E4782554102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5574FE78-17B0-4295-9F27-2E4782554102}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5574FE78-17B0-4295-9F27-2E4782554102}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5574FE78-17B0-4295-9F27-2E4782554102}.Release|Any CPU.Build.0 = Release|Any CPU - {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45F2287B-5AD9-4E89-8A91-1471AC56005E}.Release|Any CPU.Build.0 = Release|Any CPU - {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6}.Release|Any CPU.Build.0 = Release|Any CPU - {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA}.Release|Any CPU.Build.0 = Release|Any CPU - {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0}.Release|Any CPU.Build.0 = Release|Any CPU - {B148426F-25BD-4632-9307-E9EC36063D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B148426F-25BD-4632-9307-E9EC36063D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B148426F-25BD-4632-9307-E9EC36063D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B148426F-25BD-4632-9307-E9EC36063D0E}.Release|Any CPU.Build.0 = Release|Any CPU - {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51B930DB-5D89-417E-A78F-4A365CAA17D2}.Release|Any CPU.Build.0 = Release|Any CPU - {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B8B4327-8936-4AC1-B77D-1D219A897ECF}.Release|Any CPU.Build.0 = Release|Any CPU - {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0}.Release|Any CPU.Build.0 = Release|Any CPU - {345A5215-F14F-41AB-844B-9445EE657A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {345A5215-F14F-41AB-844B-9445EE657A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {345A5215-F14F-41AB-844B-9445EE657A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {345A5215-F14F-41AB-844B-9445EE657A1D}.Release|Any CPU.Build.0 = Release|Any CPU - {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50D09365-81F0-4313-A7AF-F2CD76DE4998}.Release|Any CPU.Build.0 = Release|Any CPU - {C6178701-C96F-4929-A255-396A7F7F8483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6178701-C96F-4929-A255-396A7F7F8483}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6178701-C96F-4929-A255-396A7F7F8483}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6178701-C96F-4929-A255-396A7F7F8483}.Release|Any CPU.Build.0 = Release|Any CPU - {20861022-699D-4FA2-A92A-05BC0188D25A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20861022-699D-4FA2-A92A-05BC0188D25A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20861022-699D-4FA2-A92A-05BC0188D25A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20861022-699D-4FA2-A92A-05BC0188D25A}.Release|Any CPU.Build.0 = Release|Any CPU - {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4210A31C-77B0-4550-BEC4-F3D4CE337DCA}.Release|Any CPU.Build.0 = Release|Any CPU - {6B108EA4-4F81-4A4A-9216-860208940FE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B108EA4-4F81-4A4A-9216-860208940FE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B108EA4-4F81-4A4A-9216-860208940FE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B108EA4-4F81-4A4A-9216-860208940FE5}.Release|Any CPU.Build.0 = Release|Any CPU - {F036224F-8ECB-497F-BC49-355BC4C094B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F036224F-8ECB-497F-BC49-355BC4C094B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F036224F-8ECB-497F-BC49-355BC4C094B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F036224F-8ECB-497F-BC49-355BC4C094B0}.Release|Any CPU.Build.0 = Release|Any CPU - {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Release|Any CPU.Build.0 = Release|Any CPU - {728ECF00-EB02-4981-87F9-A72A163DB93C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {728ECF00-EB02-4981-87F9-A72A163DB93C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {728ECF00-EB02-4981-87F9-A72A163DB93C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {728ECF00-EB02-4981-87F9-A72A163DB93C}.Release|Any CPU.Build.0 = Release|Any CPU - {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59EED95C-1CA7-466C-853C-BF14E1EF43A9}.Release|Any CPU.Build.0 = Release|Any CPU - {D94618E1-D812-4CFF-B539-54AE9559F827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D94618E1-D812-4CFF-B539-54AE9559F827}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D94618E1-D812-4CFF-B539-54AE9559F827}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D94618E1-D812-4CFF-B539-54AE9559F827}.Release|Any CPU.Build.0 = Release|Any CPU - {A5F4A75B-20F6-4CDF-B986-635081894E43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5F4A75B-20F6-4CDF-B986-635081894E43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5F4A75B-20F6-4CDF-B986-635081894E43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5F4A75B-20F6-4CDF-B986-635081894E43}.Release|Any CPU.Build.0 = Release|Any CPU - {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Debug|Any CPU.Build.0 = Debug|Any CPU - {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Release|Any CPU.ActiveCfg = Release|Any CPU - {514EA28E-1527-4F9E-A0F5-33C3BE3DF417}.Release|Any CPU.Build.0 = Release|Any CPU - {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9B8729A-7525-4EB3-86F0-50E88C504AE6}.Release|Any CPU.Build.0 = Release|Any CPU - {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41FF7FB1-FDE1-4229-A307-06C25CF91520}.Release|Any CPU.Build.0 = Release|Any CPU - {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B}.Release|Any CPU.Build.0 = Release|Any CPU - {24568129-061F-4A1E-B1CF-81B9F197EE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {24568129-061F-4A1E-B1CF-81B9F197EE58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24568129-061F-4A1E-B1CF-81B9F197EE58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {24568129-061F-4A1E-B1CF-81B9F197EE58}.Release|Any CPU.Build.0 = Release|Any CPU - {16CFD509-CEA6-4038-B504-5C026C2A464F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16CFD509-CEA6-4038-B504-5C026C2A464F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16CFD509-CEA6-4038-B504-5C026C2A464F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16CFD509-CEA6-4038-B504-5C026C2A464F}.Release|Any CPU.Build.0 = Release|Any CPU - {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F69F8CB-5C1A-461B-90FC-360367CD65CF}.Release|Any CPU.Build.0 = Release|Any CPU - {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F}.Release|Any CPU.Build.0 = Release|Any CPU - {2F25E1D4-D167-4681-9C27-161FB18A895D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F25E1D4-D167-4681-9C27-161FB18A895D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F25E1D4-D167-4681-9C27-161FB18A895D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F25E1D4-D167-4681-9C27-161FB18A895D}.Release|Any CPU.Build.0 = Release|Any CPU - {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF}.Release|Any CPU.Build.0 = Release|Any CPU - {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18FCBDEA-3530-4D00-A339-D2255DBD6B2E}.Release|Any CPU.Build.0 = Release|Any CPU - {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46}.Release|Any CPU.Build.0 = Release|Any CPU - {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8}.Release|Any CPU.Build.0 = Release|Any CPU - {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B874567-3F96-488D-8FC1-B79479CDE7C2}.Release|Any CPU.Build.0 = Release|Any CPU - {4E60FE13-67F0-493A-853A-9A0076499506}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E60FE13-67F0-493A-853A-9A0076499506}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E60FE13-67F0-493A-853A-9A0076499506}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E60FE13-67F0-493A-853A-9A0076499506}.Release|Any CPU.Build.0 = Release|Any CPU - {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9FBA69F-9638-4F16-B764-30FE77E3BA6D}.Release|Any CPU.Build.0 = Release|Any CPU - {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EDAAD136-DEE3-4318-82C6-5C8193E0414E}.Release|Any CPU.Build.0 = Release|Any CPU - {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D}.Release|Any CPU.Build.0 = Release|Any CPU - {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB}.Release|Any CPU.Build.0 = Release|Any CPU - {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F917BD5A-7837-4F57-84D6-5C15816DA8DE}.Release|Any CPU.Build.0 = Release|Any CPU - {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0E43828B-2319-4FB1-A7ED-C93081DB5C45}.Release|Any CPU.Build.0 = Release|Any CPU - {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2}.Release|Any CPU.Build.0 = Release|Any CPU - {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0C30615-C3E6-446E-9AA2-390C9FE3B209}.Release|Any CPU.Build.0 = Release|Any CPU - {ED38C115-9592-4049-A654-8C575676F17D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED38C115-9592-4049-A654-8C575676F17D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED38C115-9592-4049-A654-8C575676F17D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED38C115-9592-4049-A654-8C575676F17D}.Release|Any CPU.Build.0 = Release|Any CPU - {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B764CA55-C9A4-4794-967A-051D45D9FDB0}.Release|Any CPU.Build.0 = Release|Any CPU - {74E97580-8847-45D5-B12B-82409B56E709}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74E97580-8847-45D5-B12B-82409B56E709}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74E97580-8847-45D5-B12B-82409B56E709}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74E97580-8847-45D5-B12B-82409B56E709}.Release|Any CPU.Build.0 = Release|Any CPU - {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC00EF84-5144-4FFC-B194-56086D47BFAB}.Release|Any CPU.Build.0 = Release|Any CPU - {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B}.Release|Any CPU.Build.0 = Release|Any CPU - {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A059BFE2-87FD-482C-B1DC-5C8023C79DA0}.Release|Any CPU.Build.0 = Release|Any CPU - {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9AF786F5-B6CA-490B-9926-2CCA9CFF1431}.Release|Any CPU.Build.0 = Release|Any CPU - {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C890579-33B9-4DE8-98B4-52B3E5893F8C}.Release|Any CPU.Build.0 = Release|Any CPU - {5EC99271-9105-42BF-B347-69EA5376D305}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5EC99271-9105-42BF-B347-69EA5376D305}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5EC99271-9105-42BF-B347-69EA5376D305}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5EC99271-9105-42BF-B347-69EA5376D305}.Release|Any CPU.Build.0 = Release|Any CPU - {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC}.Release|Any CPU.Build.0 = Release|Any CPU - {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD8951D6-7AF1-40DB-92FE-4517E538E57C}.Release|Any CPU.Build.0 = Release|Any CPU - {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E7E1C26-2260-4E32-BABB-0083DE286AC4}.Release|Any CPU.Build.0 = Release|Any CPU - {8C763585-70E5-4D99-B133-929F9B41645A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C763585-70E5-4D99-B133-929F9B41645A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C763585-70E5-4D99-B133-929F9B41645A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C763585-70E5-4D99-B133-929F9B41645A}.Release|Any CPU.Build.0 = Release|Any CPU - {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE5C2C05-5CE4-49E1-857F-626A32882D3B}.Release|Any CPU.Build.0 = Release|Any CPU - {124BD439-325D-43CA-B829-F39EE332B3F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {124BD439-325D-43CA-B829-F39EE332B3F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {124BD439-325D-43CA-B829-F39EE332B3F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {124BD439-325D-43CA-B829-F39EE332B3F7}.Release|Any CPU.Build.0 = Release|Any CPU - {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54512143-15FA-4A68-B54D-FEFE15AC41D6}.Release|Any CPU.Build.0 = Release|Any CPU - {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488}.Release|Any CPU.Build.0 = Release|Any CPU - {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81}.Release|Any CPU.Build.0 = Release|Any CPU - {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60}.Release|Any CPU.Build.0 = Release|Any CPU - {A50E7383-8111-4516-B76E-E4133242B835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A50E7383-8111-4516-B76E-E4133242B835}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A50E7383-8111-4516-B76E-E4133242B835}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A50E7383-8111-4516-B76E-E4133242B835}.Release|Any CPU.Build.0 = Release|Any CPU - {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B}.Release|Any CPU.Build.0 = Release|Any CPU - {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D162B2AE-0343-4257-ABF3-E501DB6CB549}.Release|Any CPU.Build.0 = Release|Any CPU - {DA828BA9-E57F-4579-B6B0-55910247408F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA828BA9-E57F-4579-B6B0-55910247408F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA828BA9-E57F-4579-B6B0-55910247408F}.Release|Any CPU.Build.0 = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Build.0 = Release|Any CPU - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Build.0 = Release|Any CPU - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.Build.0 = Release|Any CPU - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.Build.0 = Release|Any CPU - {F151BE23-5AB3-488F-B332-FD851BFF4E24}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F5596859-93D3-41D0-8988-FFA24F4A2152}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5596859-93D3-41D0-8988-FFA24F4A2152}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5596859-93D3-41D0-8988-FFA24F4A2152}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5596859-93D3-41D0-8988-FFA24F4A2152}.Release|Any CPU.Build.0 = Release|Any CPU - {A229CA2F-6218-44ED-A871-BC4033D23025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A229CA2F-6218-44ED-A871-BC4033D23025}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A229CA2F-6218-44ED-A871-BC4033D23025}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A229CA2F-6218-44ED-A871-BC4033D23025}.Release|Any CPU.Build.0 = Release|Any CPU - {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F}.Release|Any CPU.Build.0 = Release|Any CPU - {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F15B5202-B450-4C93-9EDE-1BC0BB1D780E}.Release|Any CPU.Build.0 = Release|Any CPU - {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {466BAAFF-79D5-47D0-8A61-71EED9E94B17}.Release|Any CPU.Build.0 = Release|Any CPU - {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B3D4217-C4E9-42C0-853F-0181BC75CE55}.Release|Any CPU.Build.0 = Release|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.Build.0 = Release|Any CPU - {CBA9FB82-F61D-48ED-9037-293853C1CC29}.Release|Any CPU.Deploy.0 = Release|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.Build.0 = Release|Any CPU - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.Build.0 = Release|Any CPU - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.Build.0 = Release|Any CPU - {6035BA5E-4E7E-40FD-8509-70C86798CA56}.Release|Any CPU.Deploy.0 = Release|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.Build.0 = Release|Any CPU - {02CE4043-C061-4551-B3F2-E17E6C889814}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B7D5CB4-30B3-49BF-B815-C43FECBC6291}.Release|Any CPU.Build.0 = Release|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.Build.0 = Release|Any CPU - {081252D3-4986-4559-81B2-F39F9E0C50B1}.Release|Any CPU.Deploy.0 = Release|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.Build.0 = Release|Any CPU - {10AD62E8-B3EB-4C38-BA77-C75482EF9082}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.Build.0 = Release|Any CPU - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289}.Release|Any CPU.Deploy.0 = Release|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.Build.0 = Release|Any CPU - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.Build.0 = Release|Any CPU - {FFA23527-1265-4CC8-931D-E0882D76C8C3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.Build.0 = Release|Any CPU - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.Build.0 = Release|Any CPU - {02318A44-AD0C-4656-B601-1EE9575B0E79}.Release|Any CPU.Deploy.0 = Release|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.Build.0 = Release|Any CPU - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.Build.0 = Release|Any CPU - {7E466C3D-9630-4F98-BABC-43F23716B434}.Release|Any CPU.Deploy.0 = Release|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.Build.0 = Release|Any CPU - {3AC2D665-8360-4367-9606-F633CA743C9E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1372483D-0BE9-4A52-9BDC-75A15120279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1372483D-0BE9-4A52-9BDC-75A15120279F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1372483D-0BE9-4A52-9BDC-75A15120279F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1372483D-0BE9-4A52-9BDC-75A15120279F}.Release|Any CPU.Build.0 = Release|Any CPU - {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0970BBA-CC73-4639-BC29-96A571D7BA36}.Release|Any CPU.Build.0 = Release|Any CPU - {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA}.Release|Any CPU.Build.0 = Release|Any CPU - {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78A63BD8-D52B-4514-8FEE-9A03C0B74023}.Release|Any CPU.Build.0 = Release|Any CPU - {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E}.Release|Any CPU.Build.0 = Release|Any CPU - {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5172C617-0E49-40FD-8579-1DC41AF03EE1}.Release|Any CPU.Build.0 = Release|Any CPU - {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BA971E2-D89E-41B8-9C29-89F256B7E873}.Release|Any CPU.Build.0 = Release|Any CPU - {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3935804-D2A7-4195-AF7D-A62A858E7D39}.Release|Any CPU.Build.0 = Release|Any CPU - {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A}.Release|Any CPU.Build.0 = Release|Any CPU - {E1829984-508F-4BED-A11D-E43624064DFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1829984-508F-4BED-A11D-E43624064DFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1829984-508F-4BED-A11D-E43624064DFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1829984-508F-4BED-A11D-E43624064DFD}.Release|Any CPU.Build.0 = Release|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.Build.0 = Release|Any CPU - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC}.Release|Any CPU.Deploy.0 = Release|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.Build.0 = Release|Any CPU - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.Build.0 = Release|Any CPU - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.Build.0 = Release|Any CPU - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.Build.0 = Release|Any CPU - {59184098-467E-47D5-A738-E4792F09079C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.Build.0 = Release|Any CPU - {EA78E753-FAB5-4279-B9D5-2E7324D110F2}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D}.Release|Any CPU.Build.0 = Release|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.Build.0 = Release|Any CPU - {FF019156-8C03-4D25-9D83-ED668F501321}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.Build.0 = Release|Any CPU - {A73E7975-989F-4416-B531-C3CC4D25D175}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B}.Release|Any CPU.Build.0 = Release|Any CPU - {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A447201E-D3E7-47C0-8E87-A919A272FCB1}.Release|Any CPU.Build.0 = Release|Any CPU - {12449481-3CDD-446F-8968-5816E65F62F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12449481-3CDD-446F-8968-5816E65F62F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12449481-3CDD-446F-8968-5816E65F62F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12449481-3CDD-446F-8968-5816E65F62F6}.Release|Any CPU.Build.0 = Release|Any CPU - {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C1F063F-1C44-450D-90FC-A9A95AA03B97}.Release|Any CPU.Build.0 = Release|Any CPU - {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BADF052D-108C-4E33-A96F-B4F8B42B8F5B}.Release|Any CPU.Build.0 = Release|Any CPU - {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A40738A5-9C8D-4E7C-ADB6-83E9741F958E}.Release|Any CPU.Build.0 = Release|Any CPU - {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984}.Release|Any CPU.Build.0 = Release|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.Build.0 = Release|Any CPU - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.Build.0 = Release|Any CPU - {FEF77B5A-1A66-477F-8E52-FB7812F33B84}.Release|Any CPU.Deploy.0 = Release|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.Build.0 = Debug|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.ActiveCfg = Release|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.Build.0 = Release|Any CPU - {239BAFE1-CBF5-49B6-AC92-A5B77D846717}.Release|Any CPU.Deploy.0 = Release|Any CPU - {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03}.Release|Any CPU.Build.0 = Release|Any CPU - {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E97BEAE-FC4E-480F-8D7A-A7960A553129}.Release|Any CPU.Build.0 = Release|Any CPU - {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13E39D67-ED46-4B2A-B66E-5B2415B5278C}.Release|Any CPU.Build.0 = Release|Any CPU - {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C962A8DB-8D12-4B36-B22B-9B938565ABF7}.Release|Any CPU.Build.0 = Release|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.Build.0 = Release|Any CPU - {F52EFDBF-3467-4068-8BE1-E94643ADE23B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.Build.0 = Release|Any CPU - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9}.Release|Any CPU.Build.0 = Release|Any CPU - {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B}.Release|Any CPU.Build.0 = Release|Any CPU - {A237BE35-0618-4B9B-A409-A3AC22053B53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A237BE35-0618-4B9B-A409-A3AC22053B53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A237BE35-0618-4B9B-A409-A3AC22053B53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A237BE35-0618-4B9B-A409-A3AC22053B53}.Release|Any CPU.Build.0 = Release|Any CPU - {99621A27-6E31-4D71-A395-FEB610337646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99621A27-6E31-4D71-A395-FEB610337646}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99621A27-6E31-4D71-A395-FEB610337646}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99621A27-6E31-4D71-A395-FEB610337646}.Release|Any CPU.Build.0 = Release|Any CPU - {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A}.Release|Any CPU.Build.0 = Release|Any CPU - {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3499920-32A2-4E5E-9D9E-4D04B7399C49}.Release|Any CPU.Build.0 = Release|Any CPU - {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6824EF1-9F19-4727-8D35-E63AC59F816F}.Release|Any CPU.Build.0 = Release|Any CPU - {82980954-71E5-48CE-BA13-00B841707B04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82980954-71E5-48CE-BA13-00B841707B04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82980954-71E5-48CE-BA13-00B841707B04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82980954-71E5-48CE-BA13-00B841707B04}.Release|Any CPU.Build.0 = Release|Any CPU - {FDA130ED-6502-4357-BB48-A6C080BDB511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDA130ED-6502-4357-BB48-A6C080BDB511}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDA130ED-6502-4357-BB48-A6C080BDB511}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDA130ED-6502-4357-BB48-A6C080BDB511}.Release|Any CPU.Build.0 = Release|Any CPU - {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4CA169B-7E84-4AE3-BE82-F232277D4CD4}.Release|Any CPU.Build.0 = Release|Any CPU - {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FFEB068-12D2-4EF6-B3CE-767F2E223177}.Release|Any CPU.Build.0 = Release|Any CPU - {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91D22CEA-4C96-4643-B486-6ED49FA1124D}.Release|Any CPU.Build.0 = Release|Any CPU - {223CF15A-83B8-4E43-9645-50D45D9470A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {223CF15A-83B8-4E43-9645-50D45D9470A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {223CF15A-83B8-4E43-9645-50D45D9470A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {223CF15A-83B8-4E43-9645-50D45D9470A5}.Release|Any CPU.Build.0 = Release|Any CPU - {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F78C85C-A670-4795-8435-5B4CAF5C05F2}.Release|Any CPU.Build.0 = Release|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.Build.0 = Release|Any CPU - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266}.Release|Any CPU.Deploy.0 = Release|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.Build.0 = Release|Any CPU - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.Build.0 = Release|Any CPU - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.Build.0 = Release|Any CPU - {D320C6B3-23A8-4D7E-A9EB-75E15E788191}.Release|Any CPU.Deploy.0 = Release|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.Build.0 = Debug|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.ActiveCfg = Release|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.Build.0 = Release|Any CPU - {376F896D-DB61-471D-8911-98609A9D1612}.Release|Any CPU.Deploy.0 = Release|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.Build.0 = Debug|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.ActiveCfg = Release|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.Build.0 = Release|Any CPU - {402F9677-CCA1-4ED9-872A-9F09D15BC626}.Release|Any CPU.Deploy.0 = Release|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.Build.0 = Debug|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.ActiveCfg = Release|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.Build.0 = Release|Any CPU - {072B7F1E-3207-42F6-A55F-EF004D793304}.Release|Any CPU.Deploy.0 = Release|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.Build.0 = Release|Any CPU - {AC2E5FB5-5E60-4D95-9281-29153C3065C0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.Build.0 = Release|Any CPU - {0675BC5E-E2F5-45D8-8484-13D3A0694B31}.Release|Any CPU.Deploy.0 = Release|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.Build.0 = Release|Any CPU - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.Build.0 = Release|Any CPU - {2D765C12-335D-4663-A8A3-48C7B45E9F95}.Release|Any CPU.Deploy.0 = Release|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.Build.0 = Release|Any CPU - {270770CD-BE88-4FFA-98DA-9171B39199C9}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.Build.0 = Release|Any CPU - {1D874861-3573-4CA1-B61D-5FE9224934ED}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.Build.0 = Release|Any CPU - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666}.Release|Any CPU.Deploy.0 = Release|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.Build.0 = Release|Any CPU - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.Build.0 = Release|Any CPU - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.Build.0 = Release|Any CPU - {206850DF-E549-4AA4-AF42-F00B762E20FE}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.Build.0 = Release|Any CPU - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.Build.0 = Debug|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.ActiveCfg = Release|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.Build.0 = Release|Any CPU - {245DC3F9-953F-41D6-86F9-7945B640A923}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.Build.0 = Release|Any CPU - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.Build.0 = Release|Any CPU - {FE597532-2349-4851-A399-DBC5D37126BC}.Release|Any CPU.Deploy.0 = Release|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.Build.0 = Release|Any CPU - {86291CCC-A5B8-427E-A68C-F75AE14F295A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.Build.0 = Release|Any CPU - {5224C344-5797-4D05-A4AA-835E576F6B9D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.Build.0 = Release|Any CPU - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8}.Release|Any CPU.Deploy.0 = Release|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.Build.0 = Release|Any CPU - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.Build.0 = Release|Any CPU - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661}.Release|Any CPU.Deploy.0 = Release|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.Build.0 = Release|Any CPU - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.Build.0 = Release|Any CPU - {903369E3-E454-42DB-8939-70C64049D1C2}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.Build.0 = Release|Any CPU - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.Build.0 = Release|Any CPU - {CCDF251E-DF74-4623-93F9-301B96F14182}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.Build.0 = Release|Any CPU - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.Build.0 = Release|Any CPU - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7}.Release|Any CPU.Deploy.0 = Release|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.Build.0 = Release|Any CPU - {598D3695-BEB7-4BD7-AE6A-C296F36265E7}.Release|Any CPU.Deploy.0 = Release|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.Build.0 = Release|Any CPU - {8908AAA5-53DD-4526-AAF8-01308F1316EF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.Build.0 = Release|Any CPU - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.Build.0 = Release|Any CPU - {C122523F-ADF9-4A16-9705-327D7E78F93D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.Build.0 = Release|Any CPU - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.Build.0 = Release|Any CPU - {B0684D65-B983-4BA6-89F2-C4CB24389DFC}.Release|Any CPU.Deploy.0 = Release|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.Build.0 = Release|Any CPU - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.Build.0 = Release|Any CPU - {D017E544-F3D7-49DE-913C-CD9D12D23007}.Release|Any CPU.Deploy.0 = Release|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.Build.0 = Release|Any CPU - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78}.Release|Any CPU.Deploy.0 = Release|Any CPU - {150569EE-4053-4097-98EE-A455287610B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {150569EE-4053-4097-98EE-A455287610B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {150569EE-4053-4097-98EE-A455287610B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {150569EE-4053-4097-98EE-A455287610B5}.Release|Any CPU.Build.0 = Release|Any CPU - {46394970-4495-408F-8A9C-31BEBC47E899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46394970-4495-408F-8A9C-31BEBC47E899}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46394970-4495-408F-8A9C-31BEBC47E899}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46394970-4495-408F-8A9C-31BEBC47E899}.Release|Any CPU.Build.0 = Release|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.Build.0 = Release|Any CPU - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.Build.0 = Release|Any CPU - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.Build.0 = Release|Any CPU - {F76C3DC7-8C20-45EC-A321-88BCE88E5070}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.Build.0 = Release|Any CPU - {CD6081AC-0E17-46D5-A335-34D6EA497798}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.Build.0 = Release|Any CPU - {B971549F-B16D-4B0B-AC58-1CE85032E284}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.Build.0 = Release|Any CPU - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Build.0 = Release|Any CPU - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Build.0 = Release|Any CPU - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Build.0 = Release|Any CPU - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.Build.0 = Release|Any CPU - {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.Build.0 = Release|Any CPU - {77601D70-30C7-48E3-86C1-DF311FFA89C1}.Release|Any CPU.Deploy.0 = Release|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.Build.0 = Release|Any CPU - {55025FED-EB56-4875-AF18-C48F30E20991}.Release|Any CPU.Deploy.0 = Release|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.Build.0 = Release|Any CPU - {07F091E6-76EA-4A01-AB96-BF48EB87412A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.Build.0 = Release|Any CPU - {0A83C802-7117-4D78-98A5-C67BD70AF1A6}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.Build.0 = Release|Any CPU - {C2080A10-C700-41EB-98A2-0914F077F04F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.Build.0 = Release|Any CPU - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.Build.0 = Release|Any CPU - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.Build.0 = Release|Any CPU - {1FA13E27-1A15-4019-9A55-724A992EA964}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.Build.0 = Release|Any CPU - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB7AB7D6-C0E9-4320-A691-1775D62A4933}.Release|Any CPU.Build.0 = Release|Any CPU - {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD}.Release|Any CPU.Build.0 = Release|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.Build.0 = Release|Any CPU - {41DFD1BB-2C66-4548-B43F-2593AE90C36E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.Build.0 = Release|Any CPU - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.Build.0 = Release|Any CPU - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.Build.0 = Release|Any CPU - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.Build.0 = Release|Any CPU - {71FE0FFA-F897-4067-8687-A033B5D0BB5D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.Build.0 = Release|Any CPU - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.Build.0 = Release|Any CPU - {71EBC24D-5B32-4E76-ADF3-DE0017946108}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.Build.0 = Release|Any CPU - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.Build.0 = Release|Any CPU - {D80EB935-8B49-4D46-8474-F457C5BFB27C}.Release|Any CPU.Deploy.0 = Release|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.Build.0 = Debug|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.ActiveCfg = Release|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.Build.0 = Release|Any CPU - {212208FF-76E1-4864-ADA4-AAC7AE0F2981}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.Build.0 = Release|Any CPU - {1D73C60C-163D-4537-8B16-246FAE87B80F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.Build.0 = Release|Any CPU - {71290423-6A82-4263-B592-8266EAB58D9B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.Build.0 = Release|Any CPU - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.Build.0 = Release|Any CPU - {B8578827-6DB4-491A-87B0-36D95AE008D3}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.Build.0 = Release|Any CPU - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.Build.0 = Release|Any CPU - {6F6C93D0-2FBB-4633-BEDA-4F194625C098}.Release|Any CPU.Deploy.0 = Release|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.Build.0 = Release|Any CPU - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79}.Release|Any CPU.Deploy.0 = Release|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.Build.0 = Release|Any CPU - {4205BFDF-E03D-4148-844A-A87B72888F68}.Release|Any CPU.Deploy.0 = Release|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.Build.0 = Release|Any CPU - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.Build.0 = Release|Any CPU - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94}.Release|Any CPU.Deploy.0 = Release|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.Build.0 = Release|Any CPU - {AC604844-C136-4204-B73F-2AD19EF389E0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.Build.0 = Release|Any CPU - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.Build.0 = Release|Any CPU - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01}.Release|Any CPU.Deploy.0 = Release|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.Build.0 = Release|Any CPU - {97AF0484-5E33-4DF9-802D-6DCA15A93F38}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.Build.0 = Release|Any CPU - {B23C6117-7396-4FDA-A08D-7E329CF453FE}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.Build.0 = Release|Any CPU - {0F507104-F919-44C6-A940-CAE7EAE4FD3B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.Build.0 = Release|Any CPU - {92F2B28F-AD70-47D2-BC9A-437C862908D4}.Release|Any CPU.Deploy.0 = Release|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.Build.0 = Release|Any CPU - {0C14E200-87E9-4F1D-93D2-4738B0D6F918}.Release|Any CPU.Deploy.0 = Release|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.Build.0 = Release|Any CPU - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.Build.0 = Release|Any CPU - {83957117-1E62-4C20-90C4-0796D210444D}.Release|Any CPU.Deploy.0 = Release|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.Build.0 = Release|Any CPU - {5AE56DA7-0299-409F-A465-E9B51B293DA9}.Release|Any CPU.Deploy.0 = Release|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.Build.0 = Release|Any CPU - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.Build.0 = Release|Any CPU - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8}.Release|Any CPU.Deploy.0 = Release|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.Build.0 = Release|Any CPU - {25256C84-8B6B-4ED2-910E-DF0A70834AB6}.Release|Any CPU.Deploy.0 = Release|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.Build.0 = Release|Any CPU - {49345834-BE10-4E23-AF72-A80EF5E82932}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.Build.0 = Release|Any CPU - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.Build.0 = Release|Any CPU - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4}.Release|Any CPU.Deploy.0 = Release|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.Build.0 = Release|Any CPU - {3102742F-8C87-4C84-B257-1A49DDB3D6BD}.Release|Any CPU.Deploy.0 = Release|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.Build.0 = Release|Any CPU - {831C87F3-4925-4311-83A4-C07CE4CD109E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Debug|Any CPU.Build.0 = Debug|Any CPU - {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Release|Any CPU.ActiveCfg = Release|Any CPU - {810BF526-53F8-4DFB-A32A-A67CB5FFF785}.Release|Any CPU.Build.0 = Release|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.Build.0 = Release|Any CPU - {5A2538C7-D110-4DFB-A77B-C328CDDF7848}.Release|Any CPU.Deploy.0 = Release|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.Build.0 = Release|Any CPU - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6}.Release|Any CPU.Deploy.0 = Release|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.Build.0 = Release|Any CPU - {5787131C-A3BC-4BB4-BC05-C792AF28A118}.Release|Any CPU.Deploy.0 = Release|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.Build.0 = Release|Any CPU - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.Build.0 = Release|Any CPU - {C08B6F18-0B02-41B7-8070-92E9A1F65B21}.Release|Any CPU.Deploy.0 = Release|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.Build.0 = Release|Any CPU - {FAD15B5F-1912-44BF-AF96-1EB496683E87}.Release|Any CPU.Deploy.0 = Release|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.Build.0 = Release|Any CPU - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68}.Release|Any CPU.Deploy.0 = Release|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.Build.0 = Release|Any CPU - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.Build.0 = Release|Any CPU - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.Build.0 = Debug|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.ActiveCfg = Release|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.Build.0 = Release|Any CPU - {155C1A41-E529-41AC-B1C1-461ADAC30023}.Release|Any CPU.Deploy.0 = Release|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.Build.0 = Release|Any CPU - {EE44BFA9-03F1-4018-A59F-FE7F1523E845}.Release|Any CPU.Deploy.0 = Release|Any CPU - {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB956E43-A4BE-4F79-AF92-D725604DBE76}.Release|Any CPU.Build.0 = Release|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.Build.0 = Release|Any CPU - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF}.Release|Any CPU.Deploy.0 = Release|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.Build.0 = Release|Any CPU - {10BD048E-0768-4791-A34B-F94CD9A4D5B0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.Build.0 = Release|Any CPU - {6836D74A-3003-45C5-9DBA-0CE46450A55A}.Release|Any CPU.Deploy.0 = Release|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Build.0 = Release|Any CPU - {E718B06A-FEAF-4E11-9344-E81272E214AA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD749A41-50A3-4DB4-A84F-4372BDFCB742}.Release|Any CPU.Build.0 = Release|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.Build.0 = Release|Any CPU - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Build.0 = Release|Any CPU - {BEF5B037-DAB7-43C6-8A5C-EB749573C815}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9}.Release|Any CPU.Build.0 = Release|Any CPU - {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2}.Release|Any CPU.Build.0 = Release|Any CPU - {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {768E2B04-FBE8-4464-B5DE-F5AA010E9D33}.Release|Any CPU.Build.0 = Release|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU - {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Build.0 = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Build.0 = Release|Any CPU - {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Release|Any CPU.Deploy.0 = Release|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Build.0 = Release|Any CPU - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Build.0 = Release|Any CPU - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Build.0 = Release|Any CPU - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2}.Release|Any CPU.Deploy.0 = Release|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Build.0 = Release|Any CPU - {2E207B06-0C55-44FA-8334-62D791DB6105}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Build.0 = Release|Any CPU - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6}.Release|Any CPU.Deploy.0 = Release|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Build.0 = Release|Any CPU - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED}.Release|Any CPU.Deploy.0 = Release|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Build.0 = Release|Any CPU - {70A3BC90-AB6A-4498-BFDE-07AA25823036}.Release|Any CPU.Deploy.0 = Release|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Build.0 = Release|Any CPU - {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Build.0 = Release|Any CPU - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Deploy.0 = Release|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Build.0 = Release|Any CPU - {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Deploy.0 = Release|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Build.0 = Release|Any CPU - {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Build.0 = Release|Any CPU - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4}.Release|Any CPU.Deploy.0 = Release|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Build.0 = Release|Any CPU - {3885F704-2844-4EDD-9706-BD1B0C85A29B}.Release|Any CPU.Deploy.0 = Release|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Build.0 = Release|Any CPU - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D}.Release|Any CPU.Deploy.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {74F47C15-1293-404A-8C92-0F72A3DE7BA7} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {87C64FBE-1AB8-46A2-B9E3-CCB1CF0BDE58} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {3CC352EE-8A5C-45CE-A2B7-71E11733D5DA} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {90A0ADDA-0CC2-491B-9140-DFE086EA66FC} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {20A24104-F8EF-4BDD-99F7-145CA63645B0} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {5C0F8C22-10FB-4D50-B87B-41558A87B30A} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {05896551-6032-48C3-B847-79DEA73D5143} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {28967B13-8651-4E28-B1E9-5D99D43DE202} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {2D4A6B45-101D-49F4-B4BD-8A47B8A98098} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {5C1D514B-B80F-40E1-9CAA-7BE94BC42E1D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {26EC0711-624C-48E1-A4A6-A55FD2249139} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {634CA076-F37B-4700-9FC4-58B1BD490627} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {FD938FD6-64B5-4B12-AD1B-42D4D401486C} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {091CF87A-BF50-44B5-BA3A-2D4BFB56E111} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {105C53A9-4421-4A54-BF09-533D54BABECC} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} = {A259504D-1EB9-4B1F-955A-95713EF4733A} - {FE5FE3E1-B418-4CAB-9E1C-2963A4AFACA6} = {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} - {1BF50A9E-F6AE-4F17-B3C1-D5A2420A2DA3} = {C31B4F18-78CB-4DC6-A09A-FD00C0303A80} - {92FF91F9-027A-47AC-8315-64547A80F54C} = {DBC6C89D-A932-4F99-9382-7405A0045988} - {E3A79085-41A4-4F86-90D1-8BC4F53FA625} = {92FF91F9-027A-47AC-8315-64547A80F54C} - {C31B4F18-78CB-4DC6-A09A-FD00C0303A80} = {60387C6F-C7AC-4DB0-9411-2F8D9B3E4E13} - {D5471726-76C5-46DD-9931-6328C6A3D375} = {92FF91F9-027A-47AC-8315-64547A80F54C} - {35210A0B-2366-490B-A186-F8B9965BB89A} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {1B4327CF-B17A-46C3-A001-D9389E0E391B} = {35210A0B-2366-490B-A186-F8B9965BB89A} - {0141F077-F5B1-4134-B513-F3A6FEA8D53A} = {35210A0B-2366-490B-A186-F8B9965BB89A} - {6711636F-A503-4D2F-AD47-CFB23FBDF484} = {1B4327CF-B17A-46C3-A001-D9389E0E391B} - {D4AF8585-D919-4A4E-A41A-400C8E95031C} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {B80C99F7-CFC0-409B-AFDD-23E2C8775327} = {D4AF8585-D919-4A4E-A41A-400C8E95031C} - {02E56C68-5B09-4331-9E5D-7FD9217594F0} = {D4AF8585-D919-4A4E-A41A-400C8E95031C} - {A4089518-DBDB-4E12-8A31-D916859259F0} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {8E502C49-9E7E-4EE7-B1F2-9E005FCB1961} = {A4089518-DBDB-4E12-8A31-D916859259F0} - {35BE1129-CB5E-4003-987A-5EE41423EA72} = {A4089518-DBDB-4E12-8A31-D916859259F0} - {7387C800-5C6C-4AA8-87E8-7FF04DF189F2} = {35BE1129-CB5E-4003-987A-5EE41423EA72} - {AAE72992-84CD-4B91-9736-252D49735D24} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {07F59EFA-8D03-489D-BB05-905C3B0A7699} = {AAE72992-84CD-4B91-9736-252D49735D24} - {94A3A79A-3614-426C-A99C-F1F5CCDC4305} = {AAE72992-84CD-4B91-9736-252D49735D24} - {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {D744EA2C-4534-42ED-B7BB-CC511762C509} = {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} - {894672CE-285A-40E7-98C7-EEBC530BBF24} = {58CE81BF-8BBD-4840-A8D0-DC5C19E23100} - {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} = {D3548F8A-A066-41AC-BD3D-6AAECE58A242} - {BDBF448A-E9DA-4629-953C-1FADE3817724} = {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} - {C4028ACB-8530-4BC9-91F7-120A3EB5B2CE} = {BDBF448A-E9DA-4629-953C-1FADE3817724} - {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} = {D3548F8A-A066-41AC-BD3D-6AAECE58A242} - {A545B814-74FD-4A0E-8BF3-9905C42FB315} = {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} - {DDBAE9B0-F744-4CB1-BEF5-636D8645C0A9} = {A9CD1742-A2D0-4346-9007-809FA6EC6F8D} - {5CF9BFCA-C91C-4AC7-B13B-F95875AE5E17} = {A545B814-74FD-4A0E-8BF3-9905C42FB315} - {46752A8C-7971-41E2-8866-4E962EEDC803} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {B99DE5A0-FF26-4805-BBB2-2739582191C0} = {46752A8C-7971-41E2-8866-4E962EEDC803} - {E77A4923-9FBD-471B-B161-DD9AD138313E} = {46752A8C-7971-41E2-8866-4E962EEDC803} - {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {212F665B-A91A-4DEA-B0CB-E8BA195D8137} = {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} - {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} - {22F9AB41-151C-41EB-A662-1C155E9B067E} = {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} - {BB051C9D-49C5-46C5-B8B1-5E459179C761} = {FEBB8878-9AB6-4AE1-BF04-F4F74A147C3C} - {041FFFB3-926E-471A-9C2B-343311824B30} = {22F9AB41-151C-41EB-A662-1C155E9B067E} - {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {D9E26608-83A9-4146-8B06-5CF9EF3E4F7A} = {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} - {BEB54F58-AB14-4030-BA81-746F1D3A34B2} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {AEF8B139-CB86-4DB1-944D-2D859C8669DA} = {BEB54F58-AB14-4030-BA81-746F1D3A34B2} - {2CCDE80A-6534-4AE5-B6D6-DBE218A7FBC7} = {BEB54F58-AB14-4030-BA81-746F1D3A34B2} - {E985E479-23A7-4516-837F-256B40C50BF3} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {6A664586-4544-4427-8FC1-2A8E306BE7A3} = {E985E479-23A7-4516-837F-256B40C50BF3} - {81E6E143-8752-45A9-8BDA-C6F4730A7DF1} = {E985E479-23A7-4516-837F-256B40C50BF3} - {27F8F5B1-F535-4116-BB16-63454D21D13B} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {91CA9079-8D10-4A3B-AE42-CB49781687C0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {6416DC2C-DED8-44E7-8783-24EFB7F9C682} = {91CA9079-8D10-4A3B-AE42-CB49781687C0} - {5542FE52-8D47-4279-A436-67DB6B1E1E12} = {91CA9079-8D10-4A3B-AE42-CB49781687C0} - {C724C5EE-7972-41DA-9FDB-42416980F25C} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {4A2BBDB4-6130-4C9D-9947-12F39309E8E9} = {C724C5EE-7972-41DA-9FDB-42416980F25C} - {449B29BE-7A04-4A6D-858B-77C8E81415DE} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {21C511DD-43DD-486E-86D7-18D8F6810ACD} = {449B29BE-7A04-4A6D-858B-77C8E81415DE} - {D5C58443-E77C-472D-B5A9-FAC05B40334C} = {15C7A398-35B0-4035-AE4B-FE84026D0D9E} - {626AAFA5-97ED-47C3-9303-977B1B17F6A2} = {D5C58443-E77C-472D-B5A9-FAC05B40334C} - {43BE21E0-CA04-4987-A1EE-0E3F5E940C00} = {D5C58443-E77C-472D-B5A9-FAC05B40334C} - {CC446671-FBF6-4DAD-8AA9-41BE60DDDC5A} = {626AAFA5-97ED-47C3-9303-977B1B17F6A2} - {A867D092-9D63-4516-89C7-509B161D331A} = {15C7A398-35B0-4035-AE4B-FE84026D0D9E} - {C32CCF68-5D86-4337-BF37-4053C7F01848} = {A867D092-9D63-4516-89C7-509B161D331A} - {225C7669-6CD3-4F24-8F02-5620BF682BF3} = {A867D092-9D63-4516-89C7-509B161D331A} - {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {BA4E26C9-BFF0-48B1-9D53-315F6906AF06} = {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} - {C4E371CD-452B-445D-968A-FA2805A13DEE} = {371BBDB4-E337-4A66-A132-86C6DA3E4EB4} - {240F389E-5109-4266-AE58-04DEAC585F22} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {1A91B800-DC03-4199-AE38-4BD57195416F} = {240F389E-5109-4266-AE58-04DEAC585F22} - {E5256D16-2D8E-4A38-913C-863AB9819D53} = {240F389E-5109-4266-AE58-04DEAC585F22} - {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} = {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} - {15D040E2-2ECC-413B-AA87-6455D7D930A5} = {E95B5F1B-244F-4B45-AC8E-B2483DB0C980} - {A431E3A8-471B-4D51-B271-8E614F6E77C6} = {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} - {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} = {FAFDCB37-4678-4B8A-884D-F9978161CDF2} - {671D7B77-DEBE-416D-818D-99411DF479AC} = {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} - {8E3CDE8F-19CD-446B-BD7E-B8BDB7FB4134} = {6BFD3733-D1EF-4AFB-A87E-40BF28076CE7} - {8CE083A7-B966-4EB5-B139-C3EEF2D53585} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {8FB70D12-1111-480B-B64C-B8EB65977F58} = {8CE083A7-B966-4EB5-B139-C3EEF2D53585} - {888BC38D-CC4E-4F78-9F4E-488969FD0360} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {94E618B0-5BA2-4436-B1F5-90CE0E0D2293} = {888BC38D-CC4E-4F78-9F4E-488969FD0360} - {7B529C67-B1BF-41A4-8870-42A027ABFBCF} = {888BC38D-CC4E-4F78-9F4E-488969FD0360} - {5574FE78-17B0-4295-9F27-2E4782554102} = {94E618B0-5BA2-4436-B1F5-90CE0E0D2293} - {BF341B80-8763-482E-9AF7-5E8DE369ECE1} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} = {BF341B80-8763-482E-9AF7-5E8DE369ECE1} - {0CD6A482-3CA0-4627-969E-7E27C1AE9352} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {6F6FFBD9-7326-4C38-A4A6-C0052212645F} = {0CD6A482-3CA0-4627-969E-7E27C1AE9352} - {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {6E6E1F6E-8689-4D5C-814F-2A92E63B365F} = {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} - {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {C4407F01-FE4E-429A-BFF3-F697881F1EEA} = {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} - {45F2287B-5AD9-4E89-8A91-1471AC56005E} = {C4407F01-FE4E-429A-BFF3-F697881F1EEA} - {577DDC93-7BC2-4641-AB65-9550EF362682} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} = {577DDC93-7BC2-4641-AB65-9550EF362682} - {5AAA3146-9CAD-4780-8B2A-6C8E22C273C6} = {577DDC93-7BC2-4641-AB65-9550EF362682} - {DB7564E3-703D-4358-8CB0-FA80CFB69101} = {BD86951F-CB52-412C-A765-FA48D704C1DD} - {4242C2C7-8B81-41D4-A716-D717B6424C50} = {DB7564E3-703D-4358-8CB0-FA80CFB69101} - {7CAFA9B7-75D9-40F7-85D0-FD534D9199BA} = {50A0527F-7CFF-40E3-B8C5-1BB915139BA5} - {BBAEC6E6-82D8-4E55-9AFB-28497F1F78A0} = {D9E26608-83A9-4146-8B06-5CF9EF3E4F7A} - {B148426F-25BD-4632-9307-E9EC36063D0E} = {D744EA2C-4534-42ED-B7BB-CC511762C509} - {51B930DB-5D89-417E-A78F-4A365CAA17D2} = {6A664586-4544-4427-8FC1-2A8E306BE7A3} - {5B8B4327-8936-4AC1-B77D-1D219A897ECF} = {52FB475F-A6C4-4BDC-8CC3-B81EA0FD3446} - {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} - {9268BC85-F6BC-46F7-A101-A26920A87DF2} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {65A2B794-E5FB-4234-A174-D1CED2DD9E4F} = {9268BC85-F6BC-46F7-A101-A26920A87DF2} - {8749617F-D55A-4C44-815A-FD55FFDA3891} = {91DE515A-DFF9-4B75-809C-F56C51222310} - {118CB5F4-F864-49B8-B43B-28FBD23AD02F} = {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} - {E51E4E02-C3B8-456B-917C-E5200E062E4E} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {8AA8CB22-1E97-463D-863F-484236E1C24C} = {E51E4E02-C3B8-456B-917C-E5200E062E4E} - {5DA778E0-E827-4A63-844B-1166BEEB8897} = {27F8F5B1-F535-4116-BB16-63454D21D13B} - {62B9655A-0C9E-4B4A-97DF-D0CE58921AE0} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {345A5215-F14F-41AB-844B-9445EE657A1D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {50D09365-81F0-4313-A7AF-F2CD76DE4998} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {C6178701-C96F-4929-A255-396A7F7F8483} = {14A0EE78-5C03-42A4-8BFE-D0FD16764EAF} - {20861022-699D-4FA2-A92A-05BC0188D25A} = {07F59EFA-8D03-489D-BB05-905C3B0A7699} - {4210A31C-77B0-4550-BEC4-F3D4CE337DCA} = {B99DE5A0-FF26-4805-BBB2-2739582191C0} - {6B108EA4-4F81-4A4A-9216-860208940FE5} = {212F665B-A91A-4DEA-B0CB-E8BA195D8137} - {F036224F-8ECB-497F-BC49-355BC4C094B0} = {BE6B35AA-5AD4-4D1F-B699-7752FF425A38} - {EF135479-CBF6-4E03-B6EB-55EA850946A3} = {6416DC2C-DED8-44E7-8783-24EFB7F9C682} - {728ECF00-EB02-4981-87F9-A72A163DB93C} = {C724C5EE-7972-41DA-9FDB-42416980F25C} - {59EED95C-1CA7-466C-853C-BF14E1EF43A9} = {21C511DD-43DD-486E-86D7-18D8F6810ACD} - {D94618E1-D812-4CFF-B539-54AE9559F827} = {449B29BE-7A04-4A6D-858B-77C8E81415DE} - {A5F4A75B-20F6-4CDF-B986-635081894E43} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {514EA28E-1527-4F9E-A0F5-33C3BE3DF417} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {E9B8729A-7525-4EB3-86F0-50E88C504AE6} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {41FF7FB1-FDE1-4229-A307-06C25CF91520} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {19D809AF-CCC4-46EC-8DCE-6BEC700EC37B} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {24568129-061F-4A1E-B1CF-81B9F197EE58} = {8CE083A7-B966-4EB5-B139-C3EEF2D53585} - {16CFD509-CEA6-4038-B504-5C026C2A464F} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} - {7F69F8CB-5C1A-461B-90FC-360367CD65CF} = {BF341B80-8763-482E-9AF7-5E8DE369ECE1} - {E7AD5BC4-5CC0-44EB-BD3B-D6F93E59EF4F} = {6F6FFBD9-7326-4C38-A4A6-C0052212645F} - {2F25E1D4-D167-4681-9C27-161FB18A895D} = {0CD6A482-3CA0-4627-969E-7E27C1AE9352} - {5F66B4E0-6BDE-490C-8B7E-15E4F1CFFEFF} = {6E6E1F6E-8689-4D5C-814F-2A92E63B365F} - {18FCBDEA-3530-4D00-A339-D2255DBD6B2E} = {E3EE5C6F-BAD2-4F28-8659-839B0EA7FA21} - {01B291BC-B0A5-4897-ACD8-3AE6CA26DB46} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {A0DF13D4-BB77-496A-B5A2-BDA5B61360D8} = {DB7564E3-703D-4358-8CB0-FA80CFB69101} - {7B874567-3F96-488D-8FC1-B79479CDE7C2} = {118CB5F4-F864-49B8-B43B-28FBD23AD02F} - {4E60FE13-67F0-493A-853A-9A0076499506} = {33B2B22A-A3E5-4758-A4DC-E6ABB40A87DD} - {A9FBA69F-9638-4F16-B764-30FE77E3BA6D} = {65A2B794-E5FB-4234-A174-D1CED2DD9E4F} - {EDAAD136-DEE3-4318-82C6-5C8193E0414E} = {9268BC85-F6BC-46F7-A101-A26920A87DF2} - {C67AE10A-C0FE-4B16-8F46-CE97B3F8202D} = {8749617F-D55A-4C44-815A-FD55FFDA3891} - {ED60DDC5-1B29-46E9-A8D8-01DBC18E04EB} = {8AA8CB22-1E97-463D-863F-484236E1C24C} - {F917BD5A-7837-4F57-84D6-5C15816DA8DE} = {E51E4E02-C3B8-456B-917C-E5200E062E4E} - {0E43828B-2319-4FB1-A7ED-C93081DB5C45} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {C3FF23CF-D554-4CC0-A6E6-43DD050BC3E2} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {B0C30615-C3E6-446E-9AA2-390C9FE3B209} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {ED38C115-9592-4049-A654-8C575676F17D} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {B764CA55-C9A4-4794-967A-051D45D9FDB0} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {74E97580-8847-45D5-B12B-82409B56E709} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {606456FE-9938-47EB-9327-001915575421} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {3DAA8F7C-7F99-4515-9467-CC88D1D92145} = {606456FE-9938-47EB-9327-001915575421} - {CC00EF84-5144-4FFC-B194-56086D47BFAB} = {606456FE-9938-47EB-9327-001915575421} - {E05DC818-719E-4EB5-AF5F-A6C9C3C9D01B} = {3DAA8F7C-7F99-4515-9467-CC88D1D92145} - {A059BFE2-87FD-482C-B1DC-5C8023C79DA0} = {C32CCF68-5D86-4337-BF37-4053C7F01848} - {9AF786F5-B6CA-490B-9926-2CCA9CFF1431} = {671D7B77-DEBE-416D-818D-99411DF479AC} - {3FF07962-C887-495B-9B0E-EA2313B1F4AE} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {8C890579-33B9-4DE8-98B4-52B3E5893F8C} = {3FF07962-C887-495B-9B0E-EA2313B1F4AE} - {8D88D2E1-5DD8-4C59-AE7A-F269F537AC05} = {3FF07962-C887-495B-9B0E-EA2313B1F4AE} - {5EC99271-9105-42BF-B347-69EA5376D305} = {8D88D2E1-5DD8-4C59-AE7A-F269F537AC05} - {0479C1FF-33D0-4315-9846-8031661C6707} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {1E121B57-CE4C-4B9A-ABCF-3A4D6E969DAC} = {0479C1FF-33D0-4315-9846-8031661C6707} - {EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5} = {0479C1FF-33D0-4315-9846-8031661C6707} - {AD8951D6-7AF1-40DB-92FE-4517E538E57C} = {8AA8CB22-1E97-463D-863F-484236E1C24C} - {048BE18B-E895-459D-8041-6DADD6FAB130} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {5E7E1C26-2260-4E32-BABB-0083DE286AC4} = {048BE18B-E895-459D-8041-6DADD6FAB130} - {6252AD84-1611-4B1B-BD3D-2D970D51461A} = {048BE18B-E895-459D-8041-6DADD6FAB130} - {8C763585-70E5-4D99-B133-929F9B41645A} = {6252AD84-1611-4B1B-BD3D-2D970D51461A} - {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E} = {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} - {FE5C2C05-5CE4-49E1-857F-626A32882D3B} = {1DD4A7C5-1CA9-4A76-B9DE-7CC729A601DC} - {124BD439-325D-43CA-B829-F39EE332B3F7} = {CCDC880F-FE5F-4B30-BB5E-6D3F62AD398E} - {E91B1973-3022-4231-879D-D8F9E2ABE14C} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {5A65EF5B-99A7-415E-928B-14F05BEBD31F} = {E91B1973-3022-4231-879D-D8F9E2ABE14C} - {54512143-15FA-4A68-B54D-FEFE15AC41D6} = {E91B1973-3022-4231-879D-D8F9E2ABE14C} - {0DB4BE62-0EFB-4DDA-B2E8-1C5240546488} = {5A65EF5B-99A7-415E-928B-14F05BEBD31F} - {A6D542CD-CB3E-443C-B7EE-11ABDA5D1F81} = {4A2BBDB4-6130-4C9D-9947-12F39309E8E9} - {DC59998F-8CE4-4BAC-BEC4-B12EDE047B60} = {BA4E26C9-BFF0-48B1-9D53-315F6906AF06} - {6C716EDD-C29C-47F5-8366-28FC209E06E0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {A50E7383-8111-4516-B76E-E4133242B835} = {6C716EDD-C29C-47F5-8366-28FC209E06E0} - {109B0BE9-7083-4473-B528-25425CA84E76} = {6C716EDD-C29C-47F5-8366-28FC209E06E0} - {9A6C11B0-8803-4097-8BBB-DB1257EEEF7B} = {109B0BE9-7083-4473-B528-25425CA84E76} - {75E65F82-D53E-4C41-81DE-57950C05900E} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {D78EB96C-0105-4D6A-A34D-BD271912617E} = {75E65F82-D53E-4C41-81DE-57950C05900E} - {D162B2AE-0343-4257-ABF3-E501DB6CB549} = {75E65F82-D53E-4C41-81DE-57950C05900E} - {DA828BA9-E57F-4579-B6B0-55910247408F} = {D78EB96C-0105-4D6A-A34D-BD271912617E} - {18BD90D6-3D88-44A4-A366-134D12F3F823} = {C95CDA6C-3968-467E-80ED-5A963BE96215} - {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} - {9B4196EC-9485-43FB-B579-C2E50D0E9A3F} = {18BD90D6-3D88-44A4-A366-134D12F3F823} - {22FC6812-1336-47EC-9F9B-BF2FFC9CE67A} = {9E14DFF3-2BD0-4C3D-91A0-DD3063D5245F} - {C453850E-43AD-4AE5-82F1-76E0168E7260} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {882011AD-05A3-43F9-9B64-2032982948D6} = {C453850E-43AD-4AE5-82F1-76E0168E7260} - {267DBD91-4ABE-4B34-A788-32EC7B34B4FE} = {C453850E-43AD-4AE5-82F1-76E0168E7260} - {F151BE23-5AB3-488F-B332-FD851BFF4E24} = {882011AD-05A3-43F9-9B64-2032982948D6} - {F5596859-93D3-41D0-8988-FFA24F4A2152} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} - {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {A229CA2F-6218-44ED-A871-BC4033D23025} = {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} - {D07E813A-1685-444B-8DB1-6FFD71B53E21} = {ED862B12-EBF8-49BB-8F2A-01760F6D60E7} - {F2F2E0EF-00AA-413A-9A16-28C3D3B0423F} = {D07E813A-1685-444B-8DB1-6FFD71B53E21} - {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {F15B5202-B450-4C93-9EDE-1BC0BB1D780E} = {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} - {3BB43F5A-E05D-4E59-9ACE-053C60608E33} = {736DBD67-A8CB-4D56-90A7-936F3A62EC2A} - {466BAAFF-79D5-47D0-8A61-71EED9E94B17} = {3BB43F5A-E05D-4E59-9ACE-053C60608E33} - {2B3D4217-C4E9-42C0-853F-0181BC75CE55} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} - {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} = {DBC6C89D-A932-4F99-9382-7405A0045988} - {CBA9FB82-F61D-48ED-9037-293853C1CC29} = {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} - {687390CC-01CC-4D86-B21F-F22F262106C1} = {28CDEEE6-8998-4ADE-98D0-863CE249B5CF} - {3E532ECC-8E02-4BAE-9606-6A1007DD24B1} = {687390CC-01CC-4D86-B21F-F22F262106C1} - {1411913F-2E8D-4BF2-BBAB-D02AE78BFE50} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {A7FC5090-631A-4580-8E00-06A658482C23} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {085AE7C1-E8BB-4564-8473-392EBBB835B3} = {A7FC5090-631A-4580-8E00-06A658482C23} - {6035BA5E-4E7E-40FD-8509-70C86798CA56} = {A7FC5090-631A-4580-8E00-06A658482C23} - {02CE4043-C061-4551-B3F2-E17E6C889814} = {085AE7C1-E8BB-4564-8473-392EBBB835B3} - {6B7D5CB4-30B3-49BF-B815-C43FECBC6291} = {8AA8CB22-1E97-463D-863F-484236E1C24C} - {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {081252D3-4986-4559-81B2-F39F9E0C50B1} = {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} - {3A5ED925-1747-4373-9A2A-F1CCB29BB53A} = {2912CE2F-D76A-4F4B-8E11-CA622E6389E6} - {10AD62E8-B3EB-4C38-BA77-C75482EF9082} = {3A5ED925-1747-4373-9A2A-F1CCB29BB53A} - {F4FD40F9-B7F2-4A89-8647-7D3CDDF95289} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} - {E7CE29D6-8640-4F81-A2E0-D65B31C4F6C1} = {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} - {89C8FCEF-B6F5-4B9D-9010-F224262BD28A} = {D1DD2BC2-1100-4037-A571-FF8545CFCBAD} - {FFA23527-1265-4CC8-931D-E0882D76C8C3} = {89C8FCEF-B6F5-4B9D-9010-F224262BD28A} - {0C05F31F-FB0F-4CFB-8CCC-665565434936} = {544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E} - {713F4271-0407-4AE0-B982-DE22A0D0857E} = {0C05F31F-FB0F-4CFB-8CCC-665565434936} - {DBBF44F1-CC53-475D-A73D-ECCE5D7394C0} = {0C05F31F-FB0F-4CFB-8CCC-665565434936} - {723D465E-39AA-4297-971E-3871EF832398} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {02318A44-AD0C-4656-B601-1EE9575B0E79} = {723D465E-39AA-4297-971E-3871EF832398} - {A110CB79-CF10-485F-95DA-678A983A030B} = {723D465E-39AA-4297-971E-3871EF832398} - {30A8F1D0-BB6C-486C-AC6B-92EC1551983A} = {A110CB79-CF10-485F-95DA-678A983A030B} - {7E466C3D-9630-4F98-BABC-43F23716B434} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {3AC2D665-8360-4367-9606-F633CA743C9E} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} = {F17D89F6-2993-4583-93B6-57B2025859E0} - {F5BE2CAF-E124-40A4-8C07-A2023C959B84} = {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} - {1372483D-0BE9-4A52-9BDC-75A15120279F} = {F5BE2CAF-E124-40A4-8C07-A2023C959B84} - {F0970BBA-CC73-4639-BC29-96A571D7BA36} = {F07E7336-995C-465C-9F5F-BC19FE7BD5F5} - {B8F8C9F2-E6BD-4DFA-B472-C80D265AC5DA} = {D5471726-76C5-46DD-9931-6328C6A3D375} - {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} = {91DE515A-DFF9-4B75-809C-F56C51222310} - {1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A} = {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} - {78A63BD8-D52B-4514-8FEE-9A03C0B74023} = {F76AEAC3-F902-430D-9E6C-52CB6110AA4E} - {78EABAC3-0248-4802-9C01-5A00E84B85C5} = {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} - {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} = {78EABAC3-0248-4802-9C01-5A00E84B85C5} - {04BDA601-8A0A-4B19-A2E0-D69F87E20B9E} = {78EABAC3-0248-4802-9C01-5A00E84B85C5} - {5172C617-0E49-40FD-8579-1DC41AF03EE1} = {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} - {2F106C24-1825-4C6F-8581-0B8ED871CD80} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} - {B7DF35D6-7124-40D5-A219-82894CD0ACD3} = {2F106C24-1825-4C6F-8581-0B8ED871CD80} - {3BA971E2-D89E-41B8-9C29-89F256B7E873} = {2F106C24-1825-4C6F-8581-0B8ED871CD80} - {A3935804-D2A7-4195-AF7D-A62A858E7D39} = {B7DF35D6-7124-40D5-A219-82894CD0ACD3} - {AA8BDD23-315D-4784-93D2-12E7EB577675} = {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} - {481EEB00-F764-4ACB-B9EC-0611C6750CCB} = {AA8BDD23-315D-4784-93D2-12E7EB577675} - {79ECD15A-DAF9-45E3-9A2D-30D24EE7F18A} = {AA8BDD23-315D-4784-93D2-12E7EB577675} - {E1829984-508F-4BED-A11D-E43624064DFD} = {481EEB00-F764-4ACB-B9EC-0611C6750CCB} - {C1D6A7E4-A0AF-4841-92A0-FA930628E396} = {C7E24134-762D-460C-8882-11341328C707} - {0507CBD7-CA15-4DFB-8B40-80743C3BF7AE} = {C1D6A7E4-A0AF-4841-92A0-FA930628E396} - {F1D9CE27-5CFC-4137-BD96-D47677D5F4FC} = {C1D6A7E4-A0AF-4841-92A0-FA930628E396} - {E1F7E53E-4234-499B-9C2A-B75FDD4B8D0C} = {0507CBD7-CA15-4DFB-8B40-80743C3BF7AE} - {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {96550752-20E4-475E-80AF-9426C6560D1A} = {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} - {569397A1-B0BA-4B96-9E6A-00D16FF16FBB} = {A6FCED07-6FDB-45F2-A3C1-D22D8BAA51C3} - {1BFBF0B2-FB1A-4AC2-8764-FB19936FF81E} = {96550752-20E4-475E-80AF-9426C6560D1A} - {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} = {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} - {B108EB73-C0E6-4B16-96C8-29BD619D8717} = {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} - {59184098-467E-47D5-A738-E4792F09079C} = {14B5E5E4-AD33-48F7-8371-28E91C52EB6C} - {EA78E753-FAB5-4279-B9D5-2E7324D110F2} = {B108EB73-C0E6-4B16-96C8-29BD619D8717} - {3354B893-1DDF-4E80-BCB9-279A370734D1} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {B12E28B5-B206-43CC-8597-E0D013EB3889} = {3354B893-1DDF-4E80-BCB9-279A370734D1} - {F51A3BAF-4318-4274-AFDF-8B68C0CFA07D} = {3354B893-1DDF-4E80-BCB9-279A370734D1} - {FF019156-8C03-4D25-9D83-ED668F501321} = {B12E28B5-B206-43CC-8597-E0D013EB3889} - {184472CA-143C-4628-BA38-E901C7863E7C} = {8749617F-D55A-4C44-815A-FD55FFDA3891} - {A73E7975-989F-4416-B531-C3CC4D25D175} = {184472CA-143C-4628-BA38-E901C7863E7C} - {36D998D7-9685-497E-8B92-2FD429D27B99} = {BD86951F-CB52-412C-A765-FA48D704C1DD} - {D0B2BD03-8C10-46FE-85A4-2CF0FD34632B} = {36D998D7-9685-497E-8B92-2FD429D27B99} - {CF493B2A-679A-44E9-ABB7-B9CD9AF44450} = {36D998D7-9685-497E-8B92-2FD429D27B99} - {A447201E-D3E7-47C0-8E87-A919A272FCB1} = {CF493B2A-679A-44E9-ABB7-B9CD9AF44450} - {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {01926B24-03D6-4ACC-ABB7-FF90E5861557} = {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} - {12449481-3CDD-446F-8968-5816E65F62F6} = {10C3DA72-29FA-4BF7-B2D5-EABF25879E92} - {0C1F063F-1C44-450D-90FC-A9A95AA03B97} = {01926B24-03D6-4ACC-ABB7-FF90E5861557} - {203EF7C7-F76D-4004-9472-A7AAAA581C6E} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {4B15C7E3-990E-4427-A7A7-842410E30B86} = {203EF7C7-F76D-4004-9472-A7AAAA581C6E} - {BADF052D-108C-4E33-A96F-B4F8B42B8F5B} = {203EF7C7-F76D-4004-9472-A7AAAA581C6E} - {4F04D404-22A8-499F-B22D-6C85D327A5A9} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {9311C387-6BF3-40AD-8A12-8E2FF66B36CD} = {4F04D404-22A8-499F-B22D-6C85D327A5A9} - {A40738A5-9C8D-4E7C-ADB6-83E9741F958E} = {4F04D404-22A8-499F-B22D-6C85D327A5A9} - {7184A4D4-522B-4C3E-8AA0-8C7AAD34A984} = {9311C387-6BF3-40AD-8A12-8E2FF66B36CD} - {CE340A6F-ED4E-4271-A89E-5F3A7EE3839C} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {FEF77B5A-1A66-477F-8E52-FB7812F33B84} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {239BAFE1-CBF5-49B6-AC92-A5B77D846717} = {B80C99F7-CFC0-409B-AFDD-23E2C8775327} - {C1361C6F-D933-4A99-919D-5644B9E1BC9A} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {D47B0BF3-B61F-4F83-BD73-3E749DFD470C} = {C1361C6F-D933-4A99-919D-5644B9E1BC9A} - {9E466827-2772-47B4-B64D-8ADB1C0DE70B} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {1B14DD12-262C-407A-9CCD-09E03DFE08B5} = {9E466827-2772-47B4-B64D-8ADB1C0DE70B} - {7D66EEC3-76C4-4E57-8FB8-B80D323D6B03} = {1B14DD12-262C-407A-9CCD-09E03DFE08B5} - {A47BEE72-D1FA-4F02-96E1-84A70D7142B0} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {3C7605E8-136C-4282-B773-80C18021F73B} = {A47BEE72-D1FA-4F02-96E1-84A70D7142B0} - {7E97BEAE-FC4E-480F-8D7A-A7960A553129} = {3C7605E8-136C-4282-B773-80C18021F73B} - {23E4CD22-3FBE-415D-B16A-C661CB784C0D} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {23CAD9E3-4913-4CC0-93DF-91494B3CFC44} = {23E4CD22-3FBE-415D-B16A-C661CB784C0D} - {17E22697-CB77-4F38-AB13-BBDBD53B7829} = {23E4CD22-3FBE-415D-B16A-C661CB784C0D} - {7EDC253C-2B62-4444-B406-CC4786B93C47} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {B9C34E27-85BD-457D-B2CF-CA289979ED6C} = {7EDC253C-2B62-4444-B406-CC4786B93C47} - {0BB488AA-E23E-4697-BBD9-4A17B21BFCD7} = {7EDC253C-2B62-4444-B406-CC4786B93C47} - {13E39D67-ED46-4B2A-B66E-5B2415B5278C} = {B9C34E27-85BD-457D-B2CF-CA289979ED6C} - {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} = {E0384B86-37FC-403C-B1F7-AA5D1B869EB1} - {B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1} = {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} - {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} = {A363CC05-9B58-4231-9FB6-188F0FEF6AF0} - {C962A8DB-8D12-4B36-B22B-9B938565ABF7} = {B90A7629-57D3-49FC-B6EA-BB5F2E7F93C1} - {F52EFDBF-3467-4068-8BE1-E94643ADE23B} = {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} - {931C2E57-BF1B-4DEB-A001-AB1AE92BDA3B} = {E9BE2E5E-D4A3-484A-BBE8-DC6715B1E2C8} - {C6103552-7010-4353-9369-F6545D6A4E7B} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} - {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} = {C6103552-7010-4353-9369-F6545D6A4E7B} - {8225D4DA-F0E2-4AA5-A657-EC3F34182EC9} = {C6103552-7010-4353-9369-F6545D6A4E7B} - {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} - {4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16} = {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} - {6BBA7EFF-5889-40C1-B1B4-4552B7C3816B} = {D0C77B85-A3C1-41DC-B95B-EEC141CADA00} - {B71872DC-C58D-41A7-B24F-78D8136EE49E} = {DBC6C89D-A932-4F99-9382-7405A0045988} - {17A4EBF1-A1F8-475F-A304-A9B7F7B58C82} = {B71872DC-C58D-41A7-B24F-78D8136EE49E} - {99621A27-6E31-4D71-A395-FEB610337646} = {B71872DC-C58D-41A7-B24F-78D8136EE49E} - {F3C9CC02-DBA5-4A63-8211-6DDB20791E1A} = {17A4EBF1-A1F8-475F-A304-A9B7F7B58C82} - {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} - {970D9570-A24B-4329-A888-F8DE9199A600} = {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} - {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} = {2486B48D-D4A2-4505-BF50-F33B2E15DA97} - {D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA} = {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} - {F3499920-32A2-4E5E-9D9E-4D04B7399C49} = {36346C46-BCCE-46D5-964F-E2A71EFD9CA2} - {F0351FC4-759D-4CFE-8995-4C280771E369} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {F6824EF1-9F19-4727-8D35-E63AC59F816F} = {F0351FC4-759D-4CFE-8995-4C280771E369} - {9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA} = {F0351FC4-759D-4CFE-8995-4C280771E369} - {82980954-71E5-48CE-BA13-00B841707B04} = {4D8E9D80-2108-4564-8B0A-D5DCEB4723C0} - {8A5A02DE-D320-489F-86D9-278022BDFE00} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {FDA130ED-6502-4357-BB48-A6C080BDB511} = {8A5A02DE-D320-489F-86D9-278022BDFE00} - {A857BC05-B321-4E1F-8FB9-CAA9BE65118B} = {8A5A02DE-D320-489F-86D9-278022BDFE00} - {D4CA169B-7E84-4AE3-BE82-F232277D4CD4} = {A857BC05-B321-4E1F-8FB9-CAA9BE65118B} - {2FFEB068-12D2-4EF6-B3CE-767F2E223177} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} = {C12ECFF4-2767-4764-8B98-85A239B9E756} - {91D22CEA-4C96-4643-B486-6ED49FA1124D} = {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} - {223CF15A-83B8-4E43-9645-50D45D9470A5} = {9AE0AEB5-3AC7-4049-A047-33C0F2D5D3CA} - {40E200ED-D7B8-4FFD-B4FC-753E56DA831E} = {A4871FEF-60ED-4BB1-B03C-C149D297A2D7} - {4E23D21F-8827-4F6B-BA35-C8FE4457027C} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} = {4E23D21F-8827-4F6B-BA35-C8FE4457027C} - {2F78C85C-A670-4795-8435-5B4CAF5C05F2} = {4E23D21F-8827-4F6B-BA35-C8FE4457027C} - {B7A42999-EA3D-4A03-BFB6-72CBEDD42266} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {3BA0E0BE-4AB4-4A1E-9E51-F36DA9BCD5FF} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {CD2D9129-08F4-4B97-91E9-DBA857EAFE63} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {D320C6B3-23A8-4D7E-A9EB-75E15E788191} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {376F896D-DB61-471D-8911-98609A9D1612} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {402F9677-CCA1-4ED9-872A-9F09D15BC626} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {072B7F1E-3207-42F6-A55F-EF004D793304} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {AC2E5FB5-5E60-4D95-9281-29153C3065C0} = {FAD4D2B5-D578-413A-B776-5AE1F43D6CFE} - {0675BC5E-E2F5-45D8-8484-13D3A0694B31} = {D42BCA76-BA33-40A3-9B39-FD72FC9FA9AA} - {38B25115-B6FF-49EC-BDE8-26C9416CCE5B} = {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} - {2D765C12-335D-4663-A8A3-48C7B45E9F95} = {B59A3D0E-89B2-484E-A2CC-AD7FC433F99A} - {270770CD-BE88-4FFA-98DA-9171B39199C9} = {4B15C7E3-990E-4427-A7A7-842410E30B86} - {1D874861-3573-4CA1-B61D-5FE9224934ED} = {AEF8B139-CB86-4DB1-944D-2D859C8669DA} - {6F2BB265-1CDD-46AB-9128-7CE3BAC71666} = {1A10C828-9CA4-49E3-B4A0-940A2CEBEB9A} - {E5AF5535-4CA5-46B6-A5DA-F3C202231FDA} = {EDFF7A1C-8512-4F29-B8CC-C00D7720E5A5} - {9365F114-A7B5-4F38-A089-EE8DF13C4F9D} = {970D9570-A24B-4329-A888-F8DE9199A600} - {206850DF-E549-4AA4-AF42-F00B762E20FE} = {4AE4DEFF-D702-4C97-9FEF-82B1B82F4B16} - {CAAA25AC-3251-4F20-8C4C-8B07AA71F07D} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} - {245DC3F9-953F-41D6-86F9-7945B640A923} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} - {CCA17907-F649-4C6A-BDB7-E0DC87E50C1C} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} - {FE597532-2349-4851-A399-DBC5D37126BC} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} - {86291CCC-A5B8-427E-A68C-F75AE14F295A} = {4660F8A6-3E4A-47D3-BBFE-5CC06AEE7E4D} - {5224C344-5797-4D05-A4AA-835E576F6B9D} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {A231D471-D435-43BE-BDAE-DBC14BC6CCE8} = {4242C2C7-8B81-41D4-A716-D717B6424C50} - {55ED6655-8545-48DE-8A51-4A8CA1DE5BF9} = {713F4271-0407-4AE0-B982-DE22A0D0857E} - {2CD36743-6F9C-41DA-8AA8-68B7E58F2661} = {40E200ED-D7B8-4FFD-B4FC-753E56DA831E} - {64BA87CF-7A11-4715-8EDF-45AFE7D73EBF} = {CAC3EB01-B0FB-4B42-AA55-F23B4EC38DBA} - {903369E3-E454-42DB-8939-70C64049D1C2} = {109B0BE9-7083-4473-B528-25425CA84E76} - {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {C4BA8BCA-19F8-41F5-8253-03EC1B63694A} = {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} - {30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A} = {C7FF3B3D-9475-4A3D-8C1A-CF8945672B6B} - {CCDF251E-DF74-4623-93F9-301B96F14182} = {30EB23E4-D3FD-4FDF-9A26-70DFDB3D134A} - {6AF2F8E5-423F-4EF7-9AB6-1978792598B7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {BD5FABCC-4C2A-4DA6-A506-7152C72D29E7} = {8FB70D12-1111-480B-B64C-B8EB65977F58} - {598D3695-BEB7-4BD7-AE6A-C296F36265E7} = {0BB488AA-E23E-4697-BBD9-4A17B21BFCD7} - {372B055D-2279-47D2-B1A8-AB1E5670202F} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {8908AAA5-53DD-4526-AAF8-01308F1316EF} = {372B055D-2279-47D2-B1A8-AB1E5670202F} - {B167E0C6-F2D8-4B4F-B814-578B72B083BE} = {372B055D-2279-47D2-B1A8-AB1E5670202F} - {C6D1270C-92AB-4FE2-BE93-29DD52F97AD4} = {B167E0C6-F2D8-4B4F-B814-578B72B083BE} - {95590089-FF1E-4909-8E24-ED5FB75B8CFE} = {E97B3C9A-7F99-4482-989D-56146C87055A} - {C122523F-ADF9-4A16-9705-327D7E78F93D} = {95590089-FF1E-4909-8E24-ED5FB75B8CFE} - {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} = {95590089-FF1E-4909-8E24-ED5FB75B8CFE} - {169CC53A-9160-4A49-ABEF-9E7C3F78E45C} = {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} - {0FFE9335-C96D-4A88-96BF-66C03D3EE980} = {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} - {1D1CA5FF-033A-438C-A706-DFED47844751} = {0FFE9335-C96D-4A88-96BF-66C03D3EE980} - {B0684D65-B983-4BA6-89F2-C4CB24389DFC} = {0FFE9335-C96D-4A88-96BF-66C03D3EE980} - {03B2E5AC-CFAC-47FE-9767-0872C8151CFC} = {1D1CA5FF-033A-438C-A706-DFED47844751} - {380520E6-12D0-4DD3-AADF-BD27A6F6702F} = {10C3B2B1-FE8F-4AC6-A469-51573060A45B} - {A29C80C8-E116-4344-A49F-7E58529DC338} = {380520E6-12D0-4DD3-AADF-BD27A6F6702F} - {D017E544-F3D7-49DE-913C-CD9D12D23007} = {380520E6-12D0-4DD3-AADF-BD27A6F6702F} - {AFCF1EBC-B7FC-445A-A8E5-AF3724DA8F78} = {A29C80C8-E116-4344-A49F-7E58529DC338} - {150569EE-4053-4097-98EE-A455287610B5} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {46394970-4495-408F-8A9C-31BEBC47E899} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {4924CFE6-44B7-4C9D-AE02-1DD2A63E37D9} = {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} - {9D13043C-8A59-461A-9A4D-3735D06CED77} = {8C70DC80-3DD8-40F7-B781-CDF6D9F8EA42} - {A2F68D9C-A462-4E7A-A71C-CB773BBB5EED} = {9D13043C-8A59-461A-9A4D-3735D06CED77} - {0457B9CA-A2AE-417C-869A-980B19A9FC1A} = {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} - {F76C3DC7-8C20-45EC-A321-88BCE88E5070} = {0457B9CA-A2AE-417C-869A-980B19A9FC1A} - {449B5AF2-688B-4E94-96F1-A6599EC17204} = {0457B9CA-A2AE-417C-869A-980B19A9FC1A} - {CD6081AC-0E17-46D5-A335-34D6EA497798} = {449B5AF2-688B-4E94-96F1-A6599EC17204} - {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {2BDEE5C8-5611-4EA7-BE69-56B1CBC84065} = {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} - {B971549F-B16D-4B0B-AC58-1CE85032E284} = {CA48F7B8-87CA-495C-86C3-AE5C2D17EB62} - {B513442F-F797-4C7F-A4E3-E2CEDBE9A4BE} = {2BDEE5C8-5611-4EA7-BE69-56B1CBC84065} - {F6FE1203-D39F-40DD-BD89-82CFF8AD694E} = {27F8F5B1-F535-4116-BB16-63454D21D13B} - {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B} = {5DA778E0-E827-4A63-844B-1166BEEB8897} - {BA371CFB-C07A-4D29-B700-EAD37DD30D6F} = {5DA778E0-E827-4A63-844B-1166BEEB8897} - {A65353C4-D300-421D-AD04-5D69AF02BD9F} = {D47B0BF3-B61F-4F83-BD73-3E749DFD470C} - {77601D70-30C7-48E3-86C1-DF311FFA89C1} = {23CAD9E3-4913-4CC0-93DF-91494B3CFC44} - {55025FED-EB56-4875-AF18-C48F30E20991} = {17E22697-CB77-4F38-AB13-BBDBD53B7829} - {07F091E6-76EA-4A01-AB96-BF48EB87412A} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {16681455-B8C2-448B-946F-F2053916B2B5} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {0A83C802-7117-4D78-98A5-C67BD70AF1A6} = {16681455-B8C2-448B-946F-F2053916B2B5} - {9E6A4897-5F52-4893-B090-EF5B941AC709} = {16681455-B8C2-448B-946F-F2053916B2B5} - {C2080A10-C700-41EB-98A2-0914F077F04F} = {9E6A4897-5F52-4893-B090-EF5B941AC709} - {F9D4E95D-2E0B-4512-843E-E02CE4E1BDC3} = {9E6A4897-5F52-4893-B090-EF5B941AC709} - {7EF93F0B-0FE9-4C34-9AD4-A71372CEE1CB} = {9E6A4897-5F52-4893-B090-EF5B941AC709} - {1FA13E27-1A15-4019-9A55-724A992EA964} = {9E6A4897-5F52-4893-B090-EF5B941AC709} - {1E3CB802-08BC-4F4F-9760-DA5D09E0202A} = {9E6A4897-5F52-4893-B090-EF5B941AC709} - {1CE1A084-8585-4C87-939C-281A46EF8B10} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC} = {1CE1A084-8585-4C87-939C-281A46EF8B10} - {CB7AB7D6-C0E9-4320-A691-1775D62A4933} = {1CE1A084-8585-4C87-939C-281A46EF8B10} - {96C86B47-DE18-4C67-9A42-E5E1DB7CE3CD} = {FDD7EF0E-CC7D-41E0-A58D-18F5441CD1DC} - {23FBF746-20A2-43FF-B248-5EE6C44C39F0} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {41DFD1BB-2C66-4548-B43F-2593AE90C36E} = {23FBF746-20A2-43FF-B248-5EE6C44C39F0} - {4657A98F-6D05-48EB-864D-E3D0DCA658C5} = {23FBF746-20A2-43FF-B248-5EE6C44C39F0} - {853477A1-9B58-4893-AFDD-577471C62DB1} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {C6E0BE66-399B-449A-B3A0-3D594EFFE1A1} = {853477A1-9B58-4893-AFDD-577471C62DB1} - {8EEDC98C-AC87-490C-8C36-846EE82E9D0D} = {853477A1-9B58-4893-AFDD-577471C62DB1} - {A92F4AF5-7B31-4F48-A2FC-416CF74C1BBF} = {C6E0BE66-399B-449A-B3A0-3D594EFFE1A1} - {6AF1C69A-3293-4ADC-AB1B-B814A709D15F} = {D07E813A-1685-444B-8DB1-6FFD71B53E21} - {6E207804-A991-42DD-BE14-AB8E18940162} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {71FE0FFA-F897-4067-8687-A033B5D0BB5D} = {6E207804-A991-42DD-BE14-AB8E18940162} - {494AAADA-7CF7-44A4-AFB2-4AEC664151E3} = {6E207804-A991-42DD-BE14-AB8E18940162} - {43DA872D-F7E2-4CD6-A5F9-3E50FFBE73B3} = {494AAADA-7CF7-44A4-AFB2-4AEC664151E3} - {B98533B9-CA48-4F0D-961B-C95BD5158391} = {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} - {F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5} = {B98533B9-CA48-4F0D-961B-C95BD5158391} - {71EBC24D-5B32-4E76-ADF3-DE0017946108} = {B98533B9-CA48-4F0D-961B-C95BD5158391} - {1ACC6BA0-8108-4BFA-9A75-9063B5E07493} = {F2ECD777-3B3B-4EF1-B68C-E31AAADBF2B5} - {643EF07C-36AD-4796-9748-2F630631CF16} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {27443DF5-9D37-47E8-A350-4AFD103913CC} = {643EF07C-36AD-4796-9748-2F630631CF16} - {D80EB935-8B49-4D46-8474-F457C5BFB27C} = {643EF07C-36AD-4796-9748-2F630631CF16} - {212208FF-76E1-4864-ADA4-AAC7AE0F2981} = {27443DF5-9D37-47E8-A350-4AFD103913CC} - {BD86951F-CB52-412C-A765-FA48D704C1DD} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {2B794146-DFEE-475A-B919-7D3ED48587B8} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {A1917BD0-881F-4775-88D9-38D42D448CF5} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {5F1D642C-E91E-4894-A3D2-0B92AE7249EC} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {2486B48D-D4A2-4505-BF50-F33B2E15DA97} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {15C7A398-35B0-4035-AE4B-FE84026D0D9E} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {DB3AAEB4-38A5-4A85-AEB4-F4FCCDA12188} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {91DE515A-DFF9-4B75-809C-F56C51222310} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {CE93FAED-E50E-4D08-93C6-25FAEBF0260B} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {C12ECFF4-2767-4764-8B98-85A239B9E756} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {DBC6C89D-A932-4F99-9382-7405A0045988} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {10C3B2B1-FE8F-4AC6-A469-51573060A45B} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {1FAC9FD9-6ECA-4EE1-A71A-B6B9C94E0BDF} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {818BF624-10A7-45B2-9BEE-4C411CD9CA06} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {D3548F8A-A066-41AC-BD3D-6AAECE58A242} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {544FFC43-BA6C-4E51-B7C3-CFC01FCEE57E} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {C7E24134-762D-460C-8882-11341328C707} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {C95CDA6C-3968-467E-80ED-5A963BE96215} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {F17D89F6-2993-4583-93B6-57B2025859E0} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {78E463DA-0FA1-4AAE-A281-D3297C9388C9} = {9F4EEBFB-F2B6-4B28-ABAD-D219F4AB15F3} - {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} = {A1917BD0-881F-4775-88D9-38D42D448CF5} - {FAFDCB37-4678-4B8A-884D-F9978161CDF2} = {A1917BD0-881F-4775-88D9-38D42D448CF5} - {E97B3C9A-7F99-4482-989D-56146C87055A} = {A1917BD0-881F-4775-88D9-38D42D448CF5} - {1D73C60C-163D-4537-8B16-246FAE87B80F} = {73286182-0507-4B61-A5BE-67B5C1A5D637} - {73286182-0507-4B61-A5BE-67B5C1A5D637} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} = {73286182-0507-4B61-A5BE-67B5C1A5D637} - {71290423-6A82-4263-B592-8266EAB58D9B} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} - {E15DD562-8ED5-4311-BE65-DEA0DB592FB2} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} - {B8578827-6DB4-491A-87B0-36D95AE008D3} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} - {2A780BB9-6C85-41A9-98F1-8B13B5C54093} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {1C955941-ADF9-478A-B17C-24C5F6434E40} = {2A780BB9-6C85-41A9-98F1-8B13B5C54093} - {0F796184-BC8F-4C32-8EC4-EF13D1229D4A} = {2A780BB9-6C85-41A9-98F1-8B13B5C54093} - {6F6C93D0-2FBB-4633-BEDA-4F194625C098} = {1C955941-ADF9-478A-B17C-24C5F6434E40} - {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {DA9D9C7F-D357-4ACE-AF8F-9FA3DA48FF79} = {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} - {8E1C6F25-B4BA-4652-9B89-A2805F018385} = {7BAF6844-2E54-4C4F-9121-4FCA7D38C5B8} - {4205BFDF-E03D-4148-844A-A87B72888F68} = {8E1C6F25-B4BA-4652-9B89-A2805F018385} - {53616DC2-38A8-4D8B-8F84-E3B52C0F3BAD} = {01926B24-03D6-4ACC-ABB7-FF90E5861557} - {D7BCDC0D-DF35-4590-9D79-4A5C81C6EC94} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {AC604844-C136-4204-B73F-2AD19EF389E0} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {2C6499EF-FF4B-4E75-87F6-D6BAA2D9A1EC} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {C7F12D91-1145-4C4A-B7D8-FCD323DEAD01} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {97AF0484-5E33-4DF9-802D-6DCA15A93F38} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {B23C6117-7396-4FDA-A08D-7E329CF453FE} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {0F507104-F919-44C6-A940-CAE7EAE4FD3B} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {92F2B28F-AD70-47D2-BC9A-437C862908D4} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {0C14E200-87E9-4F1D-93D2-4738B0D6F918} = {1A91B800-DC03-4199-AE38-4BD57195416F} - {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {7311794D-7D2F-47E8-A5B0-C216CBD64A13} = {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} - {23655215-8CCB-4F57-AC0C-51B7E1D6B5AA} = {8EAB8189-9D27-4A9B-B0FC-F4A0172D68FE} - {83957117-1E62-4C20-90C4-0796D210444D} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} - {5AE56DA7-0299-409F-A465-E9B51B293DA9} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} - {26DE539B-517B-489D-BB9C-78D4A7B0BE3A} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {A259504D-1EB9-4B1F-955A-95713EF4733A} = {64623FCA-6086-4F0A-A59D-2BF372EA38AA} - {1BBA1CB6-8A03-49D6-AB0B-89CE1A445CE8} = {96A79D41-1FBE-45D0-8BBB-EC8FED8D3F60} - {7CB0117E-E2DA-45D6-BE69-46CDE6B7A148} = {A1917BD0-881F-4775-88D9-38D42D448CF5} - {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} = {7CB0117E-E2DA-45D6-BE69-46CDE6B7A148} - {374EE6C8-205D-4416-92CB-AC1CCB279226} = {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} - {25256C84-8B6B-4ED2-910E-DF0A70834AB6} = {89A7C08F-5956-4C72-88AC-86EB9FADCEC9} - {49345834-BE10-4E23-AF72-A80EF5E82932} = {374EE6C8-205D-4416-92CB-AC1CCB279226} - {D86A003C-5E8D-4CF5-9D06-0F95FEEEE05A} = {06BFC6F2-9D39-46B2-8E9B-A2204481EED2} - {BBC875BB-E04F-4F9E-A7CC-023B0B1D2BC4} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} - {3102742F-8C87-4C84-B257-1A49DDB3D6BD} = {5F4B9D7E-81B4-4562-BEDC-3499A8DDE648} - {831C87F3-4925-4311-83A4-C07CE4CD109E} = {4657A98F-6D05-48EB-864D-E3D0DCA658C5} - {810BF526-53F8-4DFB-A32A-A67CB5FFF785} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {5A2538C7-D110-4DFB-A77B-C328CDDF7848} = {7EBB4434-F29C-4316-BEDC-F28F07CE4AC8} - {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} = {DBC6C89D-A932-4F99-9382-7405A0045988} - {CB8A3C9C-C1EA-4877-ABFC-76DF58FA7BA6} = {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} - {2637750E-FF22-4AFF-882D-D80C3A6D1D5B} = {FF251CAE-8D0B-45E2-BAA4-FE2991D527F7} - {5787131C-A3BC-4BB4-BC05-C792AF28A118} = {2637750E-FF22-4AFF-882D-D80C3A6D1D5B} - {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} = {F17D89F6-2993-4583-93B6-57B2025859E0} - {15899F77-AE79-4DA9-9F3C-DFA60ABC34F0} = {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} - {DC8844DD-3E56-4C6E-8353-85D14004042E} = {C4995CA0-EC5E-4DE0-8CB2-685888D70C6B} - {C08B6F18-0B02-41B7-8070-92E9A1F65B21} = {DC8844DD-3E56-4C6E-8353-85D14004042E} - {B3B151AE-7C26-4313-AA47-61397791BA92} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {FAD15B5F-1912-44BF-AF96-1EB496683E87} = {B3B151AE-7C26-4313-AA47-61397791BA92} - {94B3A671-D329-47FF-8635-6A3CF8238DFE} = {B3B151AE-7C26-4313-AA47-61397791BA92} - {06FA32D2-FAA0-4E0D-93F4-A42BFBF6DD68} = {94B3A671-D329-47FF-8635-6A3CF8238DFE} - {54190390-0EDF-4EBD-8D75-DB7A9C78FBCA} = {94B3A671-D329-47FF-8635-6A3CF8238DFE} - {72EFC530-A0A4-47AA-8E1A-5CAEBD654DDF} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {C1728E08-5B75-4146-B836-FD046A1BD741} = {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} - {155C1A41-E529-41AC-B1C1-461ADAC30023} = {F8FD8FFF-5FF2-4EE8-8AAF-0ABE8D99DAB2} - {EE44BFA9-03F1-4018-A59F-FE7F1523E845} = {C1728E08-5B75-4146-B836-FD046A1BD741} - {EB956E43-A4BE-4F79-AF92-D725604DBE76} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {ECA644FF-D647-4CA1-80F0-7C730D57130E} = {283E2851-C603-4F0D-A10B-4CDC8CBBE06D} - {2674E933-02F5-4DBD-B14B-08001D49EDB4} = {ECA644FF-D647-4CA1-80F0-7C730D57130E} - {BA56F3F0-5113-462E-97D9-6E76BDD6CBBF} = {ECA644FF-D647-4CA1-80F0-7C730D57130E} - {10BD048E-0768-4791-A34B-F94CD9A4D5B0} = {2674E933-02F5-4DBD-B14B-08001D49EDB4} - {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {6836D74A-3003-45C5-9DBA-0CE46450A55A} = {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} - {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} = {718EE625-B05F-4BC9-8CE3-A7659BCA22A4} - {E718B06A-FEAF-4E11-9344-E81272E214AA} = {F9B62A9D-4DDC-4646-9B43-06D471E0F82C} - {DD749A41-50A3-4DB4-A84F-4372BDFCB742} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {404AAC33-B6F1-4EA3-A246-FD9D8A95E93F} = {65C50059-6C22-43E9-88DE-AD73F7F108C8} - {4E0052C2-559D-4509-9C42-C6451B1F1FFC} = {86B81B21-8C90-4A99-B113-FA71F8A6CD8D} - {BEF5B037-DAB7-43C6-8A5C-EB749573C815} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} - {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} = {4E0052C2-559D-4509-9C42-C6451B1F1FFC} - {B9B842A3-BAFF-4F9D-BA76-8B22D6CEBEB9} = {67B5150B-2FDE-4EA8-93EE-8BB31D5D7789} - {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {2DFB37A0-07FE-479F-8B30-D2B5F7E209D2} = {BBF136B7-361C-4FC2-AACA-6B6ED79BDCF1} - {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {768E2B04-FBE8-4464-B5DE-F5AA010E9D33} = {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} - {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} - {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} - {B2910299-B232-4CAB-AA13-591ABDDC0ED4} = {A3F37EFB-9686-4074-9962-5F731C52D919} - {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} - {753F764D-EA21-43A0-B761-6E9B43D8C90B} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {C182D69A-FE45-46BF-8522-76E0BC962FFB} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} - {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} - {1F6AF0D5-CF64-4DBA-B920-F86EAB108F2B} = {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} - {8D0C58C8-B325-48A1-A500-7E8FDC28C272} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {F288D725-B26F-4E32-B870-F391AF4211EB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} - {BCF66E00-2BFE-4B8B-829F-2D8088CBCFEB} = {8D0C58C8-B325-48A1-A500-7E8FDC28C272} - {F3CFF38B-8F9D-4BE0-8017-FBA5687E15E2} = {F288D725-B26F-4E32-B870-F391AF4211EB} - {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} - {2E207B06-0C55-44FA-8334-62D791DB6105} = {1D0D2EEC-2637-489F-83C3-7F7CB36E5512} - {B41D00C4-35F9-4E11-BF1A-EAD43F5B8CA6} = {4A7E3CDC-2141-4D74-A8CB-480ED78251B1} - {85EA8B09-1C8D-4E67-9770-C1AD0A550DED} = {1EB7CD8B-7293-4C4A-9C58-160456BCCB1E} - {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} = {2B794146-DFEE-475A-B919-7D3ED48587B8} - {13D97CCB-2CFF-4AB8-A170-701525DA740B} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} - {70A3BC90-AB6A-4498-BFDE-07AA25823036} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} - {A470E563-7ADD-4A76-91AE-C1190134D3FA} = {13D97CCB-2CFF-4AB8-A170-701525DA740B} - {B935965C-0FFC-4D7B-BDBC-B17C46C785F0} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} - {38944011-FA3C-4557-9049-B41B6168F6C0} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {00085539-EB03-49CE-8518-13544FD480BB} = {38944011-FA3C-4557-9049-B41B6168F6C0} - {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} = {38944011-FA3C-4557-9049-B41B6168F6C0} - {95670172-AB31-4239-8805-346DDD57983F} = {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} - {E2A8BDCC-626E-450D-918F-785E3777793E} = {818BF624-10A7-45B2-9BEE-4C411CD9CA06} - {D737283C-DDC2-4B77-B4A9-88F5BD6E31F4} = {E2A8BDCC-626E-450D-918F-785E3777793E} - {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} = {E2A8BDCC-626E-450D-918F-785E3777793E} - {3885F704-2844-4EDD-9706-BD1B0C85A29B} = {113D71B4-AE9A-402A-95A0-4D46C28F1EA0} - {EB1F7A63-223D-4DD6-96EA-B04CEAE2292D} = {F288D725-B26F-4E32-B870-F391AF4211EB} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} - EndGlobalSection -EndGlobal From 304385edf415cf93ba71f69dcaace253917714a9 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 11 Apr 2023 19:14:06 -0700 Subject: [PATCH 037/141] Remove unused file --- .../Samples/Sh1106_Sample/MeadowApp.cs | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs deleted file mode 100644 index 9e0de1b3c8..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh1106/Samples/Sh1106_Sample/MeadowApp.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Meadow; -using Meadow.Devices; -using Meadow.Foundation.Displays; -using Meadow.Foundation.Graphics; -using System.Threading.Tasks; - -namespace Displays.Sh1106_Sample -{ - public class MeadowApp : App - { - // - - MicroGraphics graphics; - - public override Task Initialize() - { - Resolver.Log.Info("Initializing..."); - - var sh1106 = new Sh1106 - ( - spiBus: Device.CreateSpiBus(), - chipSelectPin: Device.Pins.D02, - dcPin: Device.Pins.D01, - resetPin: Device.Pins.D00 - ); - - graphics = new MicroGraphics(sh1106); - graphics.CurrentFont = new Font8x8(); - graphics.Rotation = RotationType._180Degrees; - - return base.Initialize(); - } - - public override Task Run() - { - graphics.Clear(); - graphics.DrawRectangle(0, 0, 128, 64, false); - graphics.DrawTriangle(10, 10, 50, 50, 10, 50, false); - graphics.DrawRectangle(20, 15, 40, 20, true); - graphics.DrawText(5, 5, "SH1106"); - graphics.Show(); - - return base.Run(); - } - - // - } -} \ No newline at end of file From d6e5a44fb6df1aa2b5f79fb409b811f6def3b8da Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 11 Apr 2023 19:14:25 -0700 Subject: [PATCH 038/141] Enable a null reset pin for TftSpi drivers --- .../Displays.TftSpi/Driver/TftSpiBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index b76f1efebe..237318b1d2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -116,7 +116,7 @@ public TftSpiBase(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin, spiBus, chipSelectPin?.CreateDigitalOutputPort(), dcPin.CreateDigitalOutputPort(), - resetPin.CreateDigitalOutputPort(), + resetPin?.CreateDigitalOutputPort(), width, height, colorMode ) { From 43f9141f7aaa430b95af1a4a2898045116b3803d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 11 Apr 2023 22:21:28 -0700 Subject: [PATCH 039/141] Add ScaleUp method +buffer1bpp fix --- .../Driver/Buffers/Buffer1bpp.cs | 14 +++--- .../Driver/Buffers/PixelBufferBase.cs | 46 +++++++++++++++---- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs index 03b77721da..fe4faa824d 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs @@ -19,8 +19,8 @@ public class Buffer1bpp : PixelBufferBase /// width of buffer in pixels /// height of buffer in pixels /// data to copy into buffer - public Buffer1bpp(int width, int height, byte[] buffer) : - base(width, height, buffer) + public Buffer1bpp(int width, int height, byte[] buffer) : + base(width, height, buffer) { } /// @@ -28,8 +28,8 @@ public Buffer1bpp(int width, int height, byte[] buffer) : /// /// width of buffer in pixels /// height of buffer in pixels - public Buffer1bpp(int width, int height) : - base(width, height) + public Buffer1bpp(int width, int height) : + base(width, height) { } /// @@ -63,7 +63,7 @@ public Buffer1bpp(int width, int height, int pageSize) /// true if pixel is set / enabled public virtual bool GetPixelIsEnabled(int x, int y) { - var index = (y >> 8) * Width + x; + var index = (y >> 3) * Width + x; return (Buffer[index] & (1 << y % 8)) != 0; } @@ -137,12 +137,12 @@ public override void Fill(int x, int y, int width, int height, Color color) } var isColored = color.Color1bpp; - + for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { //byte aligned and at least 8 rows to go - if((j + y) % 8 == 0 && j + y + 8 <= height) + if ((j + y) % 8 == 0 && j + y + 8 <= height) { //set an entire byte - fast Buffer[((j + y) >> 3) * Width + x + i] = (byte)((isColored) ? 0xFF : 0); diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs index dda36c13f3..4e8b1d0d28 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs @@ -87,7 +87,7 @@ public PixelBufferBase(int width, int height, byte[] buffer) { Width = width; Height = height; - if(buffer.Length != ByteCount) + if (buffer.Length != ByteCount) { throw new ArgumentException($"Provided buffer length ({buffer.Length}) does not match this buffer's ByteCount ({ByteCount})."); } @@ -101,7 +101,7 @@ public PixelBufferBase(int width, int height, byte[] buffer) /// If true, will recreates the buffer if it already exists public void InitializeBuffer(bool replaceIfExists = false) { - if(Buffer == null || replaceIfExists) + if (Buffer == null || replaceIfExists) { Buffer = new byte[ByteCount]; } @@ -120,7 +120,7 @@ public virtual void Clear() /// /// Fill color public abstract void Fill(Color color); - + /// /// Fill a region of the pixel buffer with a color /// @@ -182,7 +182,7 @@ protected void WriteBufferSlow(int originX, int originY, IPixelBuffer buffer) { for (var x = 0; x < buffer.Width; x++) { - for(var y = 0; y < buffer.Height; y++) + for (var y = 0; y < buffer.Height; y++) { SetPixel(originX + x, originY + y, buffer.GetPixel(x, y)); } @@ -195,7 +195,7 @@ protected void WriteBufferSlow(int originX, int originY, IPixelBuffer buffer) /// Buffer type /// Rotation /// The new buffer - public T RotateAndConvert(RotationType rotation) + public T RotateAndConvert(RotationType rotation) where T : PixelBufferBase, new() { T newBuffer; @@ -272,17 +272,45 @@ public T RotateAndConvert(RotationType rotation) return newBuffer; } + /// + /// Create a new buffer scaled up from the existing buffer + /// + /// Buffer type + /// Integer scale ratio + /// The new buffer + + public T ScaleUp(int scaleFactor) + where T : PixelBufferBase, new() + { + T newBuffer = new T + { + Width = Width * scaleFactor, + Height = Height * scaleFactor, + }; + newBuffer.InitializeBuffer(true); + newBuffer.Clear(); + + for (int i = 0; i < Width; i++) + { + for (int j = 0; j < Height; j++) + { + newBuffer.Fill(i * scaleFactor, j * scaleFactor, scaleFactor, scaleFactor, GetPixel(i, j)); + } + } + return newBuffer; + } + /// /// Create a new pixel buffer and /// copy/convert pixel data from existing buffer /// /// The buffer type to convert to /// A pixel buffer derrived from PixelBufferBase - public T ConvertPixelBuffer() + public T ConvertPixelBuffer() where T : PixelBufferBase, new() { - if(GetType() == typeof(T)) - { + if (GetType() == typeof(T)) + { return Clone(); } @@ -303,7 +331,7 @@ public T ConvertPixelBuffer() return newBuffer; } - + /// /// Make a copy of the buffer object /// Intentionally private From 59513cb3ccbb39818268970c172bbf72fb4e5b0c Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 12 Apr 2023 11:39:30 -0700 Subject: [PATCH 040/141] Fix BMI270 sample typo --- .../Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs index 7f29e7b56b..d25e3f4b69 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Samples/Bmi270_Sample/MeadowApp.cs @@ -8,7 +8,7 @@ namespace MeadowApp { // Change F7FeatherV2 to F7FeatherV1 for V1.x boards - public class MeadowApp : App + public class MeadowApp : App { // From a032422f3aabda8531a3561da239eef85f69c65b Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 12 Apr 2023 11:39:42 -0700 Subject: [PATCH 041/141] Add Lsm303agr driver, sample, datasheet --- .../Datasheet/lsm303agr.pdf | Bin 0 -> 1721266 bytes .../Driver/Lsm303agr.Config.cs | 441 ++++++++++++++++++ .../Driver/Lsm303agr.Enums.cs | 66 +++ .../Driver/Lsm303agr.Registers.cs | 12 + .../Driver/Lsm303agr.cs | 227 +++++++++ .../Driver/Sensors.Motion.Lsm303agr.csproj | 23 + .../Lsm303agr_Sample/Lsm303agr_Sample.csproj | 20 + .../Samples/Lsm303agr_Sample/MeadowApp.cs | 59 +++ .../Lsm303agr_Sample/meadow.config.yaml | 2 + Source/Meadow.Foundation.sln | 24 + 10 files changed, 874 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Datasheet/lsm303agr.pdf create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Config.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Registers.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Sensors.Motion.Lsm303agr.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/Lsm303agr_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Samples/Lsm303agr_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Datasheet/lsm303agr.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Datasheet/lsm303agr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4729b35ebf08568886ed813371e8e913dfa6a554 GIT binary patch literal 1721266 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±(X!?$#ZU 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

      Hfw81_9@?=?2H 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 z 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

      Gauss400 = 0x60 } + + /// + /// Represents the available output data rates for the accelerometer. + /// + public enum AccOutputDataRate + { + /// + /// Output data rate: 1 Hz + /// + Hz1 = 0x10, + /// + /// Output data rate: 10 Hz + /// + Hz10 = 0x20, + /// + /// Output data rate: 25 Hz + /// + Hz25 = 0x30, + /// + /// Output data rate: 50 Hz + /// + Hz50 = 0x40, + /// + /// Output data rate: 100 Hz + /// + Hz100 = 0x50, + /// + /// Output data rate: 200 Hz + /// + Hz200 = 0x60, + /// + /// Output data rate: 400 Hz + /// + Hz400 = 0x70, + /// + /// Output data rate: 1620 Hz + /// + Hz1620 = 0x80, + /// + /// Output data rate: 5376 Hz + /// + Hz5376 = 0x90 + } + + /// + /// Represents the available output data rates for the magnetometer. + /// + public enum MagOutputDataRate + { + /// + /// Output data rate: 0.625 Hz + /// + Hz0_625 = 0x00, + /// + /// Output data rate: 1.25 Hz + /// + Hz1_25 = 0x04, + /// + /// Output data rate: 2.5 Hz + /// + Hz2_5 = 0x08, + /// + /// Output data rate: 5 Hz + /// + Hz5 = 0x0C, + /// + /// Output data rate: 10 Hz + /// + Hz10 = 0x10, + /// + /// Output data rate: 20 Hz + /// + Hz20 = 0x14, + /// + /// Output data rate: 40 Hz + /// + Hz40 = 0x18, + /// + /// Output data rate: 80 Hz + /// + Hz80 = 0x1C + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index a5df1a5ca0..d9c4ebec7f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -219,5 +219,57 @@ MagneticField3D GetMagneticField3D(short rawX, short rawY, short rawZ, MagSensit return (x, y, z); } + + /// + /// Sets the output data rate for the accelerometer. + /// + /// The desired output data rate setting. + public void SetAccelerometerOutputDataRate(AccOutputDataRate dataRate) + { + byte[] readBuffer = new byte[1]; + i2cPeripheralAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); + + byte newSetting = (byte)((readBuffer[0] & 0x0F) | (byte)dataRate); + i2cPeripheralAccel.WriteRegister(ACC_CTRL_REG1_A, newSetting); + } + + /// + /// Retrieves the current output data rate setting for the accelerometer. + /// + /// The current output data rate setting. + public AccOutputDataRate GetAccelerometerOutputDataRate() + { + byte[] readBuffer = new byte[1]; + i2cPeripheralAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); + + byte dataRate = (byte)(readBuffer[0] & 0xF0); + return (AccOutputDataRate)dataRate; + } + + /// + /// Sets the output data rate for the magnetometer. + /// + /// The desired output data rate setting. + public void SetMagnetometerOutputDataRate(MagOutputDataRate dataRate) + { + byte[] readBuffer = new byte[1]; + i2cPeripheralMag.ReadRegister(MAG_CTRL_REG1_M, readBuffer); + + byte newSetting = (byte)((readBuffer[0] & 0xCF) | (byte)dataRate); + i2cPeripheralMag.WriteRegister(MAG_CTRL_REG1_M, newSetting); + } + + /// + /// Retrieves the current output data rate setting for the magnetometer. + /// + /// The current output data rate setting. + public MagOutputDataRate GetMagnetometerOutputDataRate() + { + byte[] readBuffer = new byte[1]; + i2cPeripheralMag.ReadRegister(MAG_CTRL_REG1_M, readBuffer); + + byte dataRate = (byte)(readBuffer[0] & 0x30); + return (MagOutputDataRate)dataRate; + } } } \ No newline at end of file From 0b05b15cdd1370b9d3aa66c51d520f0c4c8f864b Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 12 Apr 2023 13:59:42 -0700 Subject: [PATCH 046/141] Some AI cleanup and optimizations --- .../Driver/Buffers/Buffer1bpp.cs | 18 ++--- .../Driver/Buffers/Buffer1bppV.cs | 18 ++--- .../Driver/Buffers/PixelBufferBase.cs | 80 ++++++------------- .../Driver/MicroGraphics.cs | 55 ++++++------- 4 files changed, 59 insertions(+), 112 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs index fe4faa824d..91f4bba1ab 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs @@ -49,7 +49,7 @@ public Buffer1bpp(int width, int height, int pageSize) Width = width; Height = height; - int bufferSize = width * height / 8; + int bufferSize = (width * height + 7) / 8; bufferSize += bufferSize % pageSize; Buffer = new byte[bufferSize]; @@ -63,9 +63,9 @@ public Buffer1bpp(int width, int height, int pageSize) /// true if pixel is set / enabled public virtual bool GetPixelIsEnabled(int x, int y) { - var index = (y >> 3) * Width + x; + var index = (y * Width + x) >> 3; - return (Buffer[index] & (1 << y % 8)) != 0; + return (Buffer[index] & (1 << (y % 8))) != 0; } /// @@ -87,16 +87,10 @@ public override Color GetPixel(int x, int y) /// is pixel enabled (on) public virtual void SetPixel(int x, int y, bool enabled) { - var index = (y >> 3) * Width + x; //divide by 8 + var index = (y * Width + x) >> 3; + var bitMask = (byte)(1 << (y % 8)); - if (enabled) - { - Buffer[index] = (byte)(Buffer[index] | (byte)(1 << (y % 8))); - } - else - { - Buffer[index] = (byte)(Buffer[index] & ~(byte)(1 << (y % 8))); - } + Buffer[index] = enabled ? (byte)(Buffer[index] | bitMask) : (byte)(Buffer[index] & ~bitMask); } /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs index 38f5e94cb4..81d22e391c 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs @@ -44,7 +44,7 @@ public Buffer1bppV(int width, int height, int pageSize) Width = width; Height = height; - width = width % 8 > 0 ? width + 8 - (width % 8) : width; + width = (width + 7) & ~7; int bufferSize = width * height / 8; bufferSize += bufferSize % pageSize; @@ -60,7 +60,7 @@ public Buffer1bppV(int width, int height, int pageSize) /// true if pixel is set / enabled public override bool GetPixelIsEnabled(int x, int y) { - return (Buffer[(x + y * Width) / 8] & (0x80 >> (x % 8))) != 0; + return (Buffer[(x + y * Width) >> 3] & (0x80 >> (x % 8))) != 0; } /// @@ -71,14 +71,10 @@ public override bool GetPixelIsEnabled(int x, int y) /// is pixel enabled (on) public override void SetPixel(int x, int y, bool enabled) { - if (enabled) - { //0x80 = 128 = 0b_10000000 - Buffer[(x + y * Width) / 8] |= (byte)(0x80 >> (x % 8)); - } - else - { - Buffer[(x + y * Width) / 8] &= (byte)~(0x80 >> (x % 8)); - } + int index = x / 8 + y * Width / 8; + byte bitMask = (byte)(0x80 >> (x % 8)); + + Buffer[index] = enabled ? (byte)(Buffer[index] | bitMask) : (byte)(Buffer[index] & ~bitMask); } /// @@ -103,7 +99,7 @@ public override void Fill(int x, int y, int width, int height, Color color) for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) - { + { //ToDo - optimize for full byte copies SetPixel(x + i, y + j, isColored); } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs index 4e8b1d0d28..ad38e02347 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; namespace Meadow.Foundation.Graphics.Buffers { @@ -199,74 +200,39 @@ public T RotateAndConvert(RotationType rotation) where T : PixelBufferBase, new() { T newBuffer; + int[] rowLookup; + int[] colLookup; switch (rotation) { case RotationType._90Degrees: - newBuffer = new T - { - Width = Height, - Height = Width - }; - newBuffer.InitializeBuffer(); - - for (int i = 0; i < Width; i++) - { - for (int j = 0; j < Height; j++) - { - newBuffer.SetPixel(Height - j - 1, i, GetPixel(i, j)); - } - } + newBuffer = new T { Width = Height, Height = Width }; + rowLookup = Enumerable.Range(0, Height).Reverse().ToArray(); + colLookup = Enumerable.Range(0, Width).ToArray(); break; case RotationType._270Degrees: - newBuffer = new T - { - Width = Height, - Height = Width - }; - newBuffer.InitializeBuffer(); - - for (int i = 0; i < Width; i++) - { - for (int j = 0; j < Height; j++) - { - newBuffer.SetPixel(j, Width - i - 1, GetPixel(i, j)); - } - } + newBuffer = new T { Width = Height, Height = Width }; + rowLookup = Enumerable.Range(0, Height).ToArray(); + colLookup = Enumerable.Range(0, Width).Reverse().ToArray(); break; case RotationType._180Degrees: - newBuffer = new T - { - Width = Width, - Height = Height - }; - newBuffer.InitializeBuffer(); - - for (int i = 0; i < Width; i++) - { - for (int j = 0; j < Height; j++) - { - newBuffer.SetPixel(Width - i - 1, Height - j - 1, GetPixel(i, j)); - } - } + newBuffer = new T { Width = Width, Height = Height }; + rowLookup = Enumerable.Range(0, Width).Reverse().ToArray(); + colLookup = Enumerable.Range(0, Height).Reverse().ToArray(); break; case RotationType.Default: default: - newBuffer = new T - { - Width = Height, - Height = Width - }; - newBuffer.InitializeBuffer(); - - for (int i = 0; i < Width; i++) - { - for (int j = 0; j < Height; j++) - { - newBuffer.SetPixel(i, j, GetPixel(i, j)); - } - } - break; + return Clone(); + } + + newBuffer.InitializeBuffer(); + + for (int i = 0; i < Width; i++) + { + for (int j = 0; j < Height; j++) + { + newBuffer.SetPixel(rowLookup[j], colLookup[i], GetPixel(i, j)); + } } return newBuffer; diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs index 03aa4388be..d31247e5da 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs @@ -516,29 +516,14 @@ public void DrawArc(int centerX, int centerY, int radius, Angle startAngle, Angl int offset = centerBetweenPixels ? 1 : 0; - if (startAngle > endAngle) - { - endAngle += new Angle(360); - } + double startAngleRadians = startAngle.Radians; + double endAngleRadians = endAngle.Radians; - bool IsCoordinateOnArc(int x, int y) + if (startAngleRadians > endAngleRadians) { - var angle = Math.Atan2(y, x); - if (angle < 0) { angle += 2 * Math.PI; } - - if (angle >= startAngle.Radians && - angle <= endAngle.Radians) - { - return true; - } - - if (angle >= (startAngle.Radians - 2 * Math.PI) && - angle <= (endAngle.Radians - 2 * Math.PI)) - { - return true; - } - - return false; + double temp = startAngleRadians; + startAngleRadians = endAngleRadians; + endAngleRadians = temp; } void DrawArcPoint(int x, int y, Color color) @@ -555,17 +540,23 @@ void DrawArcPoint(int x, int y, Color color) while (x <= y) { - if (IsCoordinateOnArc(y, -x)) DrawArcPoint(centerX + y - offset, centerY - x, color); //1 - if (IsCoordinateOnArc(x, -y)) DrawArcPoint(centerX + x - offset, centerY - y, color); //2 - - if (IsCoordinateOnArc(-x, -y)) DrawArcPoint(centerX - x, centerY - y, color); //3 - if (IsCoordinateOnArc(-y, -x)) DrawArcPoint(centerX - y, centerY - x, color); //4 - - if (IsCoordinateOnArc(-y, x)) DrawArcPoint(centerX - y, centerY + x - offset, color); //5 - if (IsCoordinateOnArc(-x, y)) DrawArcPoint(centerX - x, centerY + y - offset, color); //6 - - if (IsCoordinateOnArc(x, y)) DrawArcPoint(centerX + x - offset, centerY + y - offset, color); //7 - if (IsCoordinateOnArc(y, x)) DrawArcPoint(centerX + y - offset, centerY + x - offset, color); //8 + double angle1 = Math.Atan2(y, -x); + double angle2 = Math.Atan2(x, -y); + double angle3 = Math.Atan2(-x, -y); + double angle4 = Math.Atan2(-y, -x); + double angle5 = Math.Atan2(-y, x); + double angle6 = Math.Atan2(-x, y); + double angle7 = Math.Atan2(x, y); + double angle8 = Math.Atan2(y, x); + + if (angle1 >= startAngleRadians && angle1 <= endAngleRadians) { DrawArcPoint(centerX + y - offset, centerY - x, color); } + if (angle2 >= startAngleRadians && angle2 <= endAngleRadians) { DrawArcPoint(centerX + x - offset, centerY - y, color); } + if (angle3 >= startAngleRadians && angle3 <= endAngleRadians) { DrawArcPoint(centerX - x, centerY - y, color); } + if (angle4 >= startAngleRadians && angle4 <= endAngleRadians) { DrawArcPoint(centerX - y, centerY - x, color); } + if (angle5 >= startAngleRadians && angle5 <= endAngleRadians) { DrawArcPoint(centerX - y, centerY + x - offset, color); } + if (angle6 >= startAngleRadians && angle6 <= endAngleRadians) { DrawArcPoint(centerX - x, centerY + y - offset, color); } + if (angle7 >= startAngleRadians && angle7 <= endAngleRadians) { DrawArcPoint(centerX + x - offset, centerY + y - offset, color); } + if (angle8 >= startAngleRadians && angle8 <= endAngleRadians) { DrawArcPoint(centerX + y - offset, centerY + x - offset, color); } if (d < 0) { From 0acf98593c8012512f0aa172fba7e2d0dec3b856 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 13 Apr 2023 12:30:36 -0700 Subject: [PATCH 047/141] New Lis2Mdl driver and general magetometer cleanup --- .../Datasheet/lis2mdl.pdf | Bin 0 -> 1137853 bytes .../Driver/Lis2Mdl.Enums.cs | 66 +++ .../Driver/Lis2Mdl.Registers.cs | 11 + .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 227 +++++++++ .../Driver/Sensors.Motion.Lis2Mdl.csproj | 23 + .../Lis2Mdl_Sample/Lis2Mdl_Sample.csproj | 20 + .../Samples/Lis2Mdl_Sample/MeadowApp.cs | 51 ++ .../Samples/Lis2Mdl_Sample/meadow.config.yaml | 2 + .../Driver/Lsm303agr.Config.cs | 441 ------------------ .../Driver/Lsm303agr.Enums.cs | 57 +-- .../Driver/Lsm303agr.cs | 81 +--- .../Samples/Lsm303agr_Sample/MeadowApp.cs | 2 +- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 10 +- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 26 +- Source/Meadow.Foundation.sln | 24 + 15 files changed, 475 insertions(+), 566 deletions(-) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Datasheet/lis2mdl.pdf create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Registers.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Sensors.Motion.Lis2Mdl.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/Lis2Mdl_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Samples/Lis2Mdl_Sample/meadow.config.yaml delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Config.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Datasheet/lis2mdl.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Datasheet/lis2mdl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0ebca1a7261c37dae69450cf8b960ad1b426c48c GIT binary patch literal 1137853 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ξyfT&1>KUJC~INUTQcIT`xF7 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�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

      /// - public async Task Wake() + public async Task PowerOn() { await SendCommand(CommandByte.SetPowerMode, 0x00); } @@ -154,21 +182,94 @@ public async Task Get15MinueAverageReading() } /// - public override void StartUpdating(TimeSpan? updateInterval = null) + protected override void RaiseEventsAndNotify(IChangeResult<( + ParticulateReading? reading10s, + ParticulateReading? reading1min, + ParticulateReading? reading15min, + Units.Temperature? temperature, + RelativeHumidity? humidity)> changeResult) { - throw new NotImplementedException(); + if (changeResult.New.reading10s is { } r10) + { + Readings10sUpdated?.Invoke(this, new ChangeResult(r10, changeResult.Old?.reading10s)); + } + if (changeResult.New.reading1min is { } r1) + { + Readings1minUpdated?.Invoke(this, new ChangeResult(r1, changeResult.Old?.reading10s)); + } + if (changeResult.New.reading15min is { } r15) + { + Readings15minUpdated?.Invoke(this, new ChangeResult(r15, changeResult.Old?.reading10s)); + } + if (changeResult.New.temperature is { } temperature) + { + TemperatureUpdated?.Invoke(this, new ChangeResult(temperature, changeResult.Old?.temperature)); + } + if (changeResult.New.humidity is { } humidity) + { + HumidityUpdated?.Invoke(this._port, new ChangeResult(humidity, changeResult.Old?.humidity)); + } + base.RaiseEventsAndNotify(changeResult); } /// - public override void StopUpdating() + protected override async Task<( + ParticulateReading? reading10s, + ParticulateReading? reading1min, + ParticulateReading? reading15min, + Units.Temperature? temperature, + RelativeHumidity? humidity)> ReadSensor() { - throw new NotImplementedException(); - } + (ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Units.Temperature? temperature, RelativeHumidity? humidity) conditions; - /// - protected override Task ReadSensor() - { - throw new NotImplementedException(); + return await Task.Run(async () => + { + // data sheet indicates you should always read all 4 bytes, in order, for valid data + try + { + conditions.reading10s = await Get10SecondAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading10s = null; + } + + try + { + conditions.reading1min = await Get1MinuteAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading1min = null; + } + + try + { + conditions.reading15min = await Get15MinueAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading15min = null; + } + + try + { + var th = await GetTemperatureAndHumidity(); + conditions.temperature = th.temperature; + conditions.humidity = th.humidity; + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.temperature = null; + conditions.humidity = null; + } + + return conditions; + }); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/ParticulateReading.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/ParticulateReading.cs index f612310164..fa98e3bd74 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/ParticulateReading.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/ParticulateReading.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Sensors.Environmental /// /// A collection of particulate density readings /// - public class ParticulateReading + public struct ParticulateReading { private byte[] _data; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj index 48dcd9bc96..e32fc42a08 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj @@ -12,6 +12,7 @@ https://github.com/WildernessLabs/Meadow.Foundation Meadow,Meadow.Foundation,Environmental,NextPM,tera,gas,particle,particulate,matter,AQI,air,quality 0.1.0 + enable true TERA Sensor NextPM particulate matter sensor From 194ec75020903a36b08fde07814c37369cd9d365 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Thu, 20 Apr 2023 10:56:48 -0500 Subject: [PATCH 062/141] added support for IPowerControllablePeripheral --- .../Sensors.Environmental.NextPm/Driver/NextPm.cs | 2 +- .../Sensors.Light.Tsl2591/Driver/Tsl2591.cs | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs index 15cc083180..8d89e92130 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs @@ -15,7 +15,7 @@ public partial class NextPm : ParticulateReading? reading15min, Units.Temperature? temperature, RelativeHumidity? humidity)>, - IDisposable + IDisposable, IPowerControllablePeripheral { /// /// Raised when a new 10-second average reading is taken diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs index 841ddfc5bb..022314fa5b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Peripherals.Sensors.Light; using Meadow.Units; +using System; +using System.Threading.Tasks; using IU = Meadow.Units.Illuminance.UnitType; namespace Meadow.Foundation.Sensors.Light @@ -15,7 +15,7 @@ namespace Meadow.Foundation.Sensors.Light /// public partial class Tsl2591 : ByteCommsSensorBase<(Illuminance? FullSpectrum, Illuminance? Infrared, Illuminance? VisibleLight, Illuminance? Integrated)>, - ILightSensor, IDisposable + ILightSensor, IDisposable, IPowerControllablePeripheral { /// /// Raised when Full Spectrum Illuminance value changes @@ -178,17 +178,19 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Illuminance? FullSpe /// /// Power the sensor on /// - public void PowerOn() + public Task PowerOn() { Peripheral.WriteRegister((byte)(Register.Enable | Register.Command), 3); + return Task.CompletedTask; } /// /// Power the sensor off /// - public void PowerOff() + public Task PowerOff() { Peripheral.WriteRegister((byte)(Register.Enable | Register.Command), 0); + return Task.CompletedTask; } /// From 90c7a600e003cb64e5c0a420842c8ec7519395c3 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Thu, 20 Apr 2023 12:02:47 -0500 Subject: [PATCH 063/141] code comment cleanup based on --- .../Sensors.Environmental.NextPm/Driver/NextPm.cs | 14 +++----------- .../Samples/NextPm_Sample/MeadowApp.cs | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs index 8d89e92130..e86d32436e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Sensors.Environmental { /// - /// Represents a TERA Sensor NextPM particulate matter sensor + /// Represents a TERA Sensor NextPM serial particulate matter sensor /// public partial class NextPm : PollingSensorBase<( @@ -66,7 +66,7 @@ public NextPm(ISerialPort port) /// /// Gets the sensor's firmware /// - /// + /// The sensor's firmware version public async Task GetFirmwareVersion() { await SendCommand(CommandByte.ReadFirmware); @@ -76,7 +76,7 @@ public async Task GetFirmwareVersion() /// /// Checks to see if the sensor is in Sleep mode /// - /// + /// True if the sensor is in Sleep mode public async Task IsAsleep() { await SendCommand(CommandByte.ReadSensorState); @@ -86,7 +86,6 @@ public async Task IsAsleep() /// /// Puts the device into Sleep mode /// - /// public async Task PowerOff() { await SendCommand(CommandByte.SetPowerMode, 0x01); @@ -95,7 +94,6 @@ public async Task PowerOff() /// /// Wakes the device from Sleep mode /// - /// public async Task PowerOn() { await SendCommand(CommandByte.SetPowerMode, 0x00); @@ -104,7 +102,6 @@ public async Task PowerOn() /// /// Gets the fan speed (in percentage) /// - /// public async Task GetFanSpeed() { await SendCommand(CommandByte.ReadWriteFanSpeed, 0x00, 0x00); @@ -120,7 +117,6 @@ public async Task GetFanSpeed() /// Sets the sensor fan speed (in percentage) /// /// - /// /// public async Task SetFanSpeed(int speedPercent) { @@ -137,7 +133,6 @@ public async Task SetFanSpeed(int speedPercent) /// /// Gets the sensor's current Temperature and Humidity readings /// - /// public async Task<(Units.Temperature temperature, RelativeHumidity humidity)> GetTemperatureAndHumidity() { await SendCommand(CommandByte.ReadTempAndHumidity); @@ -154,7 +149,6 @@ public async Task SetFanSpeed(int speedPercent) /// /// Gets the average particulate reading for the past 10 seconds /// - /// public async Task Get10SecondAverageReading() { await SendCommand(CommandByte.Read10sConcentrations); @@ -164,7 +158,6 @@ public async Task Get10SecondAverageReading() /// /// Gets the average particulate reading for the past 60 seconds /// - /// public async Task Get1MinuteAverageReading() { await SendCommand(CommandByte.Read60sConcentrations); @@ -174,7 +167,6 @@ public async Task Get1MinuteAverageReading() /// /// Gets the average particulate reading for the past 15 minutes /// - /// public async Task Get15MinueAverageReading() { await SendCommand(CommandByte.Read900sConcentrations); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs index cf564a451f..7810d590b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs @@ -3,7 +3,7 @@ using Meadow.Foundation.Sensors.Environmental; using System.Threading.Tasks; -namespace Pmsa003i_Sample +namespace NextPm_Sample { // Change F7FeatherV2 to F7FeatherV1 for V1.x boards public class MeadowApp : App From 11e32f157a944f9bb4ba032ee15f7b867df61d76 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Thu, 20 Apr 2023 15:12:33 -0500 Subject: [PATCH 064/141] spelling fix --- .../Sensors.Environmental.NextPm/Driver/NextPm.cs | 4 ++-- .../Samples/NextPm_Sample/MeadowApp.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs index e86d32436e..a961b3e1ab 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs @@ -167,7 +167,7 @@ public async Task Get1MinuteAverageReading() /// /// Gets the average particulate reading for the past 15 minutes /// - public async Task Get15MinueAverageReading() + public async Task Get15MinuteAverageReading() { await SendCommand(CommandByte.Read900sConcentrations); return new ParticulateReading(_readBuffer, 3); @@ -239,7 +239,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<( try { - conditions.reading15min = await Get15MinueAverageReading(); + conditions.reading15min = await Get15MinuteAverageReading(); } catch (TeraException) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs index 7810d590b5..8936ba49e8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs @@ -54,7 +54,7 @@ public override async Task Run() Resolver.Log.Info($" {read1m.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); Resolver.Log.Info($" {read1m.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - var read15m = await nextPm.Get15MinueAverageReading(); + var read15m = await nextPm.Get15MinuteAverageReading(); Resolver.Log.Info($"Past 15 minutes"); Resolver.Log.Info($" {read15m.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter"); Resolver.Log.Info($" {read15m.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter"); From dc1f7925cf3564e4fdcb8e595da5d3103614bfae Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Thu, 20 Apr 2023 15:17:59 -0500 Subject: [PATCH 065/141] Updated NetxtPM sample to using PollingSensor pattern --- .../Samples/NextPm_Sample/MeadowApp.cs | 40 ++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs index 8936ba49e8..500d4cd702 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Samples/NextPm_Sample/MeadowApp.cs @@ -21,10 +21,22 @@ public override Task Initialize() nextPm = new NextPm(port); + nextPm.Readings10sUpdated += NextPm_Readings10sUpdated; return Task.CompletedTask; } + private void NextPm_Readings10sUpdated(object sender, IChangeResult e) + { + Resolver.Log.Info($"Past 10 seconds"); + Resolver.Log.Info($" {e.New.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter"); + Resolver.Log.Info($" {e.New.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter"); + Resolver.Log.Info($" {e.New.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter"); + Resolver.Log.Info($" {e.New.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); + Resolver.Log.Info($" {e.New.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); + Resolver.Log.Info($" {e.New.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); + } + public override async Task Run() { Resolver.Log.Info("Run..."); @@ -32,36 +44,10 @@ public override async Task Run() var firmware = await nextPm.GetFirmwareVersion(); Resolver.Log.Info($"Firmware: 0x{firmware:X4}"); - // if the device was asleep this will fail because data is not yet available var tempAndHumidity = await nextPm.GetTemperatureAndHumidity(); Resolver.Log.Info($"Temp: {tempAndHumidity.temperature:0.0}C Humidity: {tempAndHumidity.humidity}%"); - var read10s = await nextPm.Get10SecondAverageReading(); - Resolver.Log.Info($"Past 10 seconds"); - Resolver.Log.Info($" {read10s.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter"); - Resolver.Log.Info($" {read10s.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter"); - Resolver.Log.Info($" {read10s.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter"); - Resolver.Log.Info($" {read10s.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read10s.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read10s.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - - var read1m = await nextPm.Get1MinuteAverageReading(); - Resolver.Log.Info($"Past 1 minute"); - Resolver.Log.Info($" {read1m.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter"); - Resolver.Log.Info($" {read1m.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter"); - Resolver.Log.Info($" {read1m.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter"); - Resolver.Log.Info($" {read1m.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read1m.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read1m.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - - var read15m = await nextPm.Get15MinuteAverageReading(); - Resolver.Log.Info($"Past 15 minutes"); - Resolver.Log.Info($" {read15m.CountOf1micronParticles.ParticlesPerLiter:0} 1 micron particles per liter"); - Resolver.Log.Info($" {read15m.CountOf2_5micronParticles.ParticlesPerLiter:0} 2.5 micron particles per liter"); - Resolver.Log.Info($" {read15m.CountOf10micronParticles.ParticlesPerLiter:0} 10 micron particles per liter"); - Resolver.Log.Info($" {read15m.EnvironmentalPM_1micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read15m.EnvironmentalPM_2_5micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); - Resolver.Log.Info($" {read15m.EnvironmentalPM_10micron.MicroGramsPerMetersCubed:0} ug/L^3 1 micron particles"); + nextPm.StartUpdating(); } From 55abfc9a4838841cc022fdd20457a5b0f581dcfd Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 20 Apr 2023 18:18:02 -0700 Subject: [PATCH 066/141] Minor performance optimizations and a fix a couple of AI bugs --- .../Audio.MicroAudio/Driver/GameSounds.cs | 120 +++++++++--------- .../Driver/Buffers/Buffer1bpp.cs | 12 +- .../Driver/Buffers/Buffer1bppV.cs | 6 +- .../Driver/Buffers/PixelBufferBase.cs | 2 +- .../Graphics.MicroGraphics/Driver/Image.cs | 8 +- .../Driver/Max7219.Display.cs | 7 +- .../Driver/Max7219.PixelBuffer.cs | 2 +- 7 files changed, 79 insertions(+), 78 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/GameSounds.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/GameSounds.cs index 3c9dbc211b..4d1ed96946 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/GameSounds.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Audio.MicroAudio/Driver/GameSounds.cs @@ -101,8 +101,8 @@ private async Task PlayJump() /// private async Task PlayHit() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -110,8 +110,8 @@ private async Task PlayHit() /// private async Task PlayLaser() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(1760), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(1760), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -119,10 +119,10 @@ private async Task PlayLaser() /// private async Task PlayExplosion() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(110), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(55), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(110), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(55), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -144,10 +144,10 @@ private async Task PlayGameOver() /// private async Task PlayVictory() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(659), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(1175), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(659), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(1175), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -155,15 +155,15 @@ private async Task PlayVictory() /// private async Task PlayCountdown() { - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 1)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 1)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(698.46), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(698.46), TimeSpan.FromMilliseconds(defaultDuration >> 1)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(587.33), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(587.33), TimeSpan.FromMilliseconds(defaultDuration >> 1)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -171,9 +171,9 @@ private async Task PlayCountdown() /// private async Task PlayPowerDown() { - await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(349.23), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(349.23), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -189,8 +189,8 @@ private async Task PlayButtonPress() /// private async Task PlayMenuNavigate() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -206,10 +206,10 @@ private async Task PlayCollectible() /// private async Task PlayBossBattle() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(554.37), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(554.37), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -217,9 +217,9 @@ private async Task PlayBossBattle() /// private async Task PlaySecretFound() { - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(1174.66), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(1396.91), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(1174.66), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(1396.91), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -227,10 +227,10 @@ private async Task PlaySecretFound() /// private async Task PlayLevelComplete() { - await toneGenerator.PlayTone(new Frequency(1047), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(1396.91), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(1760), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(2217.46), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(1047), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(1396.91), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(1760), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(2217.46), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -238,11 +238,11 @@ private async Task PlayLevelComplete() /// private async Task PlayWeaponSwitch() { - await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(349.23), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(349.23), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -250,9 +250,9 @@ private async Task PlayWeaponSwitch() /// private async Task PlayWarning() { - await toneGenerator.PlayTone(new Frequency(1047), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(1047), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -260,10 +260,10 @@ private async Task PlayWarning() /// private async Task PlayTeleport() { - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(523.25), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -271,10 +271,10 @@ private async Task PlayTeleport() /// private async Task PlayHealth() { - await toneGenerator.PlayTone(new Frequency(622.25), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(698.46), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(622.25), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(659.25), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(698.46), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -282,7 +282,7 @@ private async Task PlayHealth() /// private async Task PlayFootstep() { - await toneGenerator.PlayTone(new Frequency(196), TimeSpan.FromMilliseconds(defaultDuration / 8)); + await toneGenerator.PlayTone(new Frequency(196), TimeSpan.FromMilliseconds(defaultDuration >> 3)); } /// @@ -290,9 +290,9 @@ private async Task PlayFootstep() /// private async Task PlayActivation() { - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 4)); - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 2)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } /// @@ -300,10 +300,10 @@ private async Task PlayActivation() /// private async Task PlayEnemyDeath() { - await toneGenerator.PlayTone(new Frequency(1568), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(1244.51), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(1046.5), TimeSpan.FromMilliseconds(defaultDuration / 2)); - await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration / 2)); + await toneGenerator.PlayTone(new Frequency(1568), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(1244.51), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(1046.5), TimeSpan.FromMilliseconds(defaultDuration >> 1)); + await toneGenerator.PlayTone(new Frequency(783.99), TimeSpan.FromMilliseconds(defaultDuration >> 1)); } /// @@ -311,15 +311,15 @@ private async Task PlayEnemyDeath() /// public async Task PlaySplash() { - await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(880), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(440), TimeSpan.FromMilliseconds(defaultDuration >> 2)); await Task.Delay(TimeSpan.FromMilliseconds(defaultPause)); - await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration / 4)); + await toneGenerator.PlayTone(new Frequency(220), TimeSpan.FromMilliseconds(defaultDuration >> 2)); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs index 91f4bba1ab..f33fd11f87 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bpp.cs @@ -49,7 +49,8 @@ public Buffer1bpp(int width, int height, int pageSize) Width = width; Height = height; - int bufferSize = (width * height + 7) / 8; + int bufferSize = (height * width >> 3); + bufferSize += bufferSize % pageSize; Buffer = new byte[bufferSize]; @@ -63,9 +64,9 @@ public Buffer1bpp(int width, int height, int pageSize) /// true if pixel is set / enabled public virtual bool GetPixelIsEnabled(int x, int y) { - var index = (y * Width + x) >> 3; + var index = (y >> 3) * Width + x; - return (Buffer[index] & (1 << (y % 8))) != 0; + return (Buffer[index] & (1 << y % 8)) != 0; } /// @@ -87,7 +88,8 @@ public override Color GetPixel(int x, int y) /// is pixel enabled (on) public virtual void SetPixel(int x, int y, bool enabled) { - var index = (y * Width + x) >> 3; + var index = (y >> 3) * Width + x; + var bitMask = (byte)(1 << (y % 8)); Buffer[index] = enabled ? (byte)(Buffer[index] | bitMask) : (byte)(Buffer[index] & ~bitMask); @@ -177,7 +179,7 @@ public void Clear(bool enabled) /// y position of pixel public override void InvertPixel(int x, int y) { - var index = (y / 8 * Width) + x; + var index = (y >> 3) * Width + x; Buffer[index] = Buffer[index] ^= (byte)(1 << y % 8); } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs index 81d22e391c..d99d5543ad 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs @@ -46,7 +46,7 @@ public Buffer1bppV(int width, int height, int pageSize) width = (width + 7) & ~7; - int bufferSize = width * height / 8; + int bufferSize = (width * height) >> 3; bufferSize += bufferSize % pageSize; Buffer = new byte[bufferSize]; @@ -71,7 +71,7 @@ public override bool GetPixelIsEnabled(int x, int y) /// is pixel enabled (on) public override void SetPixel(int x, int y, bool enabled) { - int index = x / 8 + y * Width / 8; + int index = (x >> 3) + (y * Width) >> 3; byte bitMask = (byte)(0x80 >> (x % 8)); Buffer[index] = enabled ? (byte)(Buffer[index] | bitMask) : (byte)(Buffer[index] & ~bitMask); @@ -113,7 +113,7 @@ public override void Fill(int x, int y, int width, int height, Color color) /// y position of pixel public override void InvertPixel(int x, int y) { - Buffer[(x + y * Width) / 8] ^= (byte)~(0x80 >> (x % 8)); + Buffer[(x + y * Width) >> 3] ^= (byte)~(0x80 >> (x % 8)); } /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs index ad38e02347..ee22d868d3 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/PixelBufferBase.cs @@ -52,7 +52,7 @@ public int BitDepth /// /// Number of bytes in buffer /// - public int ByteCount => (Width * Height * BitDepth) / 8; + public int ByteCount => (Width * Height * BitDepth) >> 3; /// /// The buffer that holds the pixel data diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs index d8364a3877..1e98d9ae88 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Image.cs @@ -118,7 +118,7 @@ private void LoadBitmap(Stream source) source.Seek(-4, SeekOrigin.Current); source.Read(dib, 0, dib.Length); - var width = BitConverter.ToInt32(dib, 18 - 14 ); + var width = BitConverter.ToInt32(dib, 18 - 14); var height = BitConverter.ToInt32(dib, 22 - 14); var invertedRows = false; if (height < 0) @@ -150,9 +150,9 @@ private void LoadBitmap(Stream source) throw new NotSupportedException("Unsupported bitmap compression"); } - var bytesPerRow = (int)(width * (BitsPerPixel / 8f)); + var bytesPerRow = width * (BitsPerPixel >> 3); // BMP row length is evenly divisible by 4 - var mod = (bytesPerRow % 4); + var mod = bytesPerRow % 4; var rowPad = mod == 0 ? 0 : 4 - mod; var pixelBufferSize = height * bytesPerRow; var pixelData = new byte[pixelBufferSize]; @@ -222,7 +222,7 @@ private void ConvertRGBBufferToBGRBuffer(byte[] buffer) { byte temp; - for (int i = 0; i < buffer.Length; i+=3) + for (int i = 0; i < buffer.Length; i += 3) { // pull red temp = buffer[i]; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.Display.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.Display.cs index 3291bf7689..f76b4d9f22 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.Display.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.Display.cs @@ -1,6 +1,5 @@ -using System; +using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; -using Meadow.Foundation.Graphics; namespace Meadow.Foundation.Displays { @@ -90,7 +89,7 @@ public void DrawPixel(int x, int y, bool enabled) { var index = x % 8; - var display = y / 8 + (x / 8) * DigitRows; + var display = (y >> 3) + (x >> 3) * DigitRows; if (display > DeviceCount) { @@ -116,7 +115,7 @@ public void InvertPixel(int x, int y) { var index = x % 8; - var display = y / 8 + (x / 8) * DigitRows; + var display = (y >> 3) + (x >> 3) * DigitRows; if (display > DeviceCount) { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.PixelBuffer.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.PixelBuffer.cs index 899b9874a4..90b7adc69c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.PixelBuffer.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.PixelBuffer.cs @@ -12,7 +12,7 @@ public partial class Max7219 : IPixelBuffer /// /// The total bytes used for the display buffer /// - public int ByteCount => Width * Height / 8; + public int ByteCount => Width * Height >> 3; /// /// The backing buffer for the pixel buffer (not implemented) From f7073b7baefcd84c8f1f605f205217ad3d7702c6 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 20 Apr 2023 18:42:49 -0700 Subject: [PATCH 067/141] Minor cleanup --- .../Driver/Y4000.cs | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Y4000.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Y4000.cs index 7148411993..856d8ead64 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Y4000.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Y4000/Driver/Y4000.cs @@ -1,9 +1,8 @@ using Meadow.Hardware; using Meadow.Modbus; using Meadow.Units; -using System.Threading.Tasks; using System; -using System.Net; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Environmental { @@ -253,7 +252,7 @@ public async Task GetErrorFlag() /* * Get and Set time work but Get returns bad values * Leaving code here for future investigation - */ + */ /// /// Set the time on the device /// Stores: year, month, day, hour, minute and second @@ -295,14 +294,14 @@ async Task GetTime() /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(ConcentrationInWater? DisolvedOxygen, - ConcentrationInWater? Chlorophyl, - ConcentrationInWater? BlueGreenAlgae, - Conductivity? ElectricalConductivity, - PotentialHydrogen? PH, - Turbidity? Turbidity, - Units.Temperature? Temperature, - Voltage? OxidationReductionPotential)> + protected override async Task<(ConcentrationInWater? DisolvedOxygen, + ConcentrationInWater? Chlorophyl, + ConcentrationInWater? BlueGreenAlgae, + Conductivity? ElectricalConductivity, + PotentialHydrogen? PH, + Turbidity? Turbidity, + Units.Temperature? Temperature, + Voltage? OxidationReductionPotential)> ReadSensor() { (ConcentrationInWater? DisolvedOxygen, @@ -377,7 +376,7 @@ protected override void RaiseEventsAndNotify( { OxidationReductionPotentialUpdated?.Invoke(this, new ChangeResult(Redux, changeResult.Old?.OxidationReductionPotential)); } - + base.RaiseEventsAndNotify(changeResult); } } From 42bffa39d84d7460f130d36c9f984798b1ffcd61 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 20 Apr 2023 18:43:09 -0700 Subject: [PATCH 068/141] Add particle density support to Pmsa003i --- .../Driver/Pmsa003i.cs | 120 +++++++++--------- .../Samples/Pma003I_Sample/MeadowApp.cs | 24 ++-- 2 files changed, 71 insertions(+), 73 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs index ab04ac91e3..41d793981c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs @@ -17,20 +17,13 @@ public partial class Pmsa003i : Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - int? particles_0_3microns, - int? particles_0_5microns, - int? particles_10microns, - int? particles_25microns, - int? particles_50microns, - int? particles_100microns)> + ParticleDensity? ParticleDensity_0_3microns, + ParticleDensity? ParticleDensity_0_5microns, + ParticleDensity? ParticleDensity_10microns, + ParticleDensity? ParticleDensity_25microns, + ParticleDensity? ParticleDensity_50microns, + ParticleDensity? ParticleDensity_100microns)> { - public Concentration? Concentration { get; } - - /// - /// Raised when the Standard particulate matter PM2.5 density changes - /// - public event EventHandler> ConcentrationUpdated; - /// /// Raised when the Standard particulate matter PM1.0 density changes /// @@ -64,32 +57,32 @@ public partial class Pmsa003i : /// /// Raised when the number of of 0-0.3 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> CountOf0_3micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf0_3micronParticlesUpdated = delegate { }; /// /// Raised when the number of of 0.3-0.5 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> CountOf0_5micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf0_5micronParticlesUpdated = delegate { }; /// /// Raised when the number of of 0.5-10 micron particles changes /// - public event EventHandler> CountOf10micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf10micronParticlesUpdated = delegate { }; /// /// Raised when the number of of 10-25 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> CountOf25micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf25micronParticlesUpdated = delegate { }; /// /// Raised when the number of of 25-50 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> CountOf50micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf50micronParticlesUpdated = delegate { }; /// /// Raised when the number of 50-100 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> CountOf100micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf100micronParticlesUpdated = delegate { }; /// /// Standard particulate matter PM1.0 density @@ -122,29 +115,29 @@ public partial class Pmsa003i : public Density? PM10_0Env => Conditions.EnvironmentalParticulateMatter_10micron; /// - /// Number of 0 - 0.3 micron particles in 0.1 liters of air + /// Particle density of 0 - 0.3 micron particles inair /// - public int? CountOf0_3micronParticles => Conditions.particles_0_3microns; + public ParticleDensity? CountOf0_3micronParticles => Conditions.ParticleDensity_0_3microns; /// - /// Number of of 0.3 - 0.5 micron particles in 0.1 liters of air + /// Particle density of of 0.3 - 0.5 micron particles in air /// - public int? CountOf0_5micronParticles => Conditions.particles_0_5microns; + public ParticleDensity? CountOf0_5micronParticles => Conditions.ParticleDensity_0_5microns; /// - /// Number of of 0.5 - 10 micron particles in 0.1 liters of air + /// Particle density of of 0.5 - 10 micron particles in air /// - public int? CountOf10micronParticles => Conditions.particles_10microns; + public ParticleDensity? CountOf10micronParticles => Conditions.ParticleDensity_10microns; /// - /// Number of of 0.5 - 10 micron particles in 0.1 liters of air + /// Particle density of of 0.5 - 10 micron particles in air /// - public int? CountOf25micronParticles => Conditions.particles_25microns; + public ParticleDensity? CountOf25micronParticles => Conditions.ParticleDensity_25microns; /// - /// Number of of 10 - 50 micron particles in 0.1 liters of air + /// Particle density of of 10 - 50 micron particles in air /// - public int? CountOf50micronParticles => Conditions.particles_50microns; + public ParticleDensity? CountOf50micronParticles => Conditions.ParticleDensity_50microns; /// - /// Number of of 50 - 100 micron particles in 0.1 liters of air + /// Particle density of of 50 - 100 micron particles in air /// - public int? CountOf100micronParticles => Conditions.particles_100microns; + public ParticleDensity? CountOf100micronParticles => Conditions.ParticleDensity_100microns; /// /// Create a new PMSA003I sensor object @@ -173,6 +166,11 @@ public override void StopUpdating() base.StopUpdating(); } + /// + /// Read data from the sensor + /// + /// + /// protected override Task<( Density? StandardParticulateMatter_1micron, Density? StandardParticulateMatter_2_5micron, @@ -180,12 +178,12 @@ public override void StopUpdating() Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - int? particles_0_3microns, - int? particles_0_5microns, - int? particles_10microns, - int? particles_25microns, - int? particles_50microns, - int? particles_100microns)> ReadSensor() + ParticleDensity? ParticleDensity_0_3microns, + ParticleDensity? ParticleDensity_0_5microns, + ParticleDensity? ParticleDensity_10microns, + ParticleDensity? ParticleDensity_25microns, + ParticleDensity? ParticleDensity_50microns, + ParticleDensity? ParticleDensity_100microns)> ReadSensor() { var buffer = new byte[32]; Peripheral.Read(buffer); @@ -209,12 +207,12 @@ public override void StopUpdating() var pm10Environmental = new Density(BitConverter.ToUInt16(span[20..22]), Density.UnitType.MicroGramsPerMetersCubed); var pm25Environmental = new Density(BitConverter.ToUInt16(span[18..20]), Density.UnitType.MicroGramsPerMetersCubed); var pm100Environmental = new Density(BitConverter.ToUInt16(span[16..18]), Density.UnitType.MicroGramsPerMetersCubed); - var p03um = BitConverter.ToUInt16(span[14..16]); - var p05um = BitConverter.ToUInt16(span[12..14]); - var p10um = BitConverter.ToUInt16(span[10..12]); - var p25um = BitConverter.ToUInt16(span[8..10]); - var p50um = BitConverter.ToUInt16(span[6..8]); - var p100um = BitConverter.ToUInt16(span[4..6]); + var p03um = new ParticleDensity(BitConverter.ToUInt16(span[14..16]), ParticleDensity.UnitType.ParticlesPerCentiliter); + var p05um = new ParticleDensity(BitConverter.ToUInt16(span[12..14]), ParticleDensity.UnitType.ParticlesPerCentiliter); + var p10um = new ParticleDensity(BitConverter.ToUInt16(span[10..12]), ParticleDensity.UnitType.ParticlesPerCentiliter); + var p25um = new ParticleDensity(BitConverter.ToUInt16(span[8..10]), ParticleDensity.UnitType.ParticlesPerCentiliter); + var p50um = new ParticleDensity(BitConverter.ToUInt16(span[6..8]), ParticleDensity.UnitType.ParticlesPerCentiliter); + var p100um = new ParticleDensity(BitConverter.ToUInt16(span[4..6]), ParticleDensity.UnitType.ParticlesPerCentiliter); Conditions = (pm10Standard, pm25Standard, pm100Standard, pm10Environmental, pm25Environmental, pm100Environmental, p03um, p05um, p10um, p25um, p50um, p100um); @@ -233,12 +231,12 @@ protected override void RaiseEventsAndNotify( Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - int? particles_0_3microns, - int? particles_0_5microns, - int? particles_10microns, - int? particles_25microns, - int? particles_50microns, - int? particles_100microns)> changeResult) + ParticleDensity? ParticleDensity_0_3microns, + ParticleDensity? ParticleDensity_0_5microns, + ParticleDensity? ParticleDensity_10microns, + ParticleDensity? ParticleDensity_25microns, + ParticleDensity? ParticleDensity_50microns, + ParticleDensity? ParticleDensity_100microns)> changeResult) { if (changeResult.New.StandardParticulateMatter_1micron is { } SPM0_1) { @@ -265,29 +263,29 @@ protected override void RaiseEventsAndNotify( StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(EM0_10, changeResult.Old.Value.EnvironmentalParticulateMatter_10micron)); } - if (changeResult.New.particles_0_3microns is { } P_0_3) + if (changeResult.New.ParticleDensity_0_3microns is { } P_0_3) { - CountOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_3, changeResult.Old.Value.particles_0_3microns)); + CountOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_3, changeResult.Old.Value.ParticleDensity_0_3microns)); } - if (changeResult.New.particles_0_5microns is { } P_0_5) + if (changeResult.New.ParticleDensity_0_5microns is { } P_0_5) { - CountOf0_5micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); + CountOf0_5micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.ParticleDensity_0_5microns)); } - if (changeResult.New.particles_10microns is { } P_10) + if (changeResult.New.ParticleDensity_10microns is { } P_10) { - CountOf10micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); + CountOf10micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.ParticleDensity_10microns)); } - if (changeResult.New.particles_25microns is { } P_25) + if (changeResult.New.ParticleDensity_25microns is { } P_25) { - CountOf25micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); + CountOf25micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.ParticleDensity_25microns)); } - if (changeResult.New.particles_50microns is { } P_50) + if (changeResult.New.ParticleDensity_50microns is { } P_50) { - CountOf50micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); + CountOf50micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.ParticleDensity_50microns)); } - if (changeResult.New.particles_100microns is { } P_100) + if (changeResult.New.ParticleDensity_100microns is { } P_100) { - CountOf100micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); + CountOf100micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.ParticleDensity_100microns)); } base.RaiseEventsAndNotify(changeResult); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index 0302beb414..fcf2829ff1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -41,12 +41,12 @@ private void Pmsa003i_Updated(object sender, IChangeResult<( Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - int? particles_0_3microns, - int? particles_0_5microns, - int? particles_10microns, - int? particles_25microns, - int? particles_50microns, - int? particles_100microns)> e) + ParticleDensity? ParticleDensity_0_3microns, + ParticleDensity? ParticleDensity_0_5microns, + ParticleDensity? ParticleDensity_10microns, + ParticleDensity? ParticleDensity_25microns, + ParticleDensity? ParticleDensity_50microns, + ParticleDensity? ParticleDensity_100microns)> e) { Resolver.Log.Info($"Standard Particulate Matter 1 micron: {e.New.StandardParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); Resolver.Log.Info($"Standard Particulate Matter 2_5micron: {e.New.StandardParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); @@ -55,12 +55,12 @@ private void Pmsa003i_Updated(object sender, IChangeResult<( Resolver.Log.Info($"Environmental Particulate Matter 2.5 micron: {e.New.EnvironmentalParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); Resolver.Log.Info($"Environmental Particulate Matter 10 micron: {e.New.EnvironmentalParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); ; - Resolver.Log.Info($"Count of particles - 0.3 microns: {e.New.particles_0_3microns.Value} in 0.1 liters of air"); - Resolver.Log.Info($"Count of particles - 0.5 microns: {e.New.particles_0_5microns.Value} in 0.1 liters of air"); - Resolver.Log.Info($"Count of particles - 10 microns: {e.New.particles_10microns.Value} in 0.1 liters of air"); - Resolver.Log.Info($"Count of particles - 25 microns: {e.New.particles_25microns.Value} in 0.1 liters of air"); - Resolver.Log.Info($"Count of particles - 50 microns: {e.New.particles_50microns.Value} in 0.1 liters of air"); - Resolver.Log.Info($"Count of particles - 100 microns: {e.New.particles_100microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 0.3 microns: {e.New.ParticleDensity_0_3microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 0.5 microns: {e.New.ParticleDensity_0_5microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 10 microns: {e.New.ParticleDensity_10microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 25 microns: {e.New.ParticleDensity_25microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 50 microns: {e.New.ParticleDensity_50microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 100 microns: {e.New.ParticleDensity_100microns.Value.ParticlesPerCentiliter} in 0.1 liters of air"); } // From 5a9d6a765e6e3a61a7fc2d4570dd1459bbfc4df8 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 20 Apr 2023 18:45:08 -0700 Subject: [PATCH 069/141] Fix Pmsa003i sample folder and project name --- .../MeadowApp.cs | 0 .../Pmsa003I_Sample.csproj} | 0 .../meadow.config.yaml | 0 Source/Meadow.Foundation.sln | 18 +++++++++--------- 4 files changed, 9 insertions(+), 9 deletions(-) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/{Pma003I_Sample => Pmsa003I_Sample}/MeadowApp.cs (100%) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/{Pma003I_Sample/Pma003I_Sample.csproj => Pmsa003I_Sample/Pmsa003I_Sample.csproj} (100%) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/{Pma003I_Sample => Pmsa003I_Sample}/meadow.config.yaml (100%) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/MeadowApp.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/MeadowApp.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/Pmsa003I_Sample.csproj diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/meadow.config.yaml similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/meadow.config.yaml rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pmsa003I_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index df96017076..6d0a9f3df7 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1143,8 +1143,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003i", "Pmsa003i", "{AD EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ch1115", "Ch1115", "{753F764D-EA21-43A0-B761-6E9B43D8C90B}" @@ -1243,6 +1241,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{8A37 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NextPm_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.NextPm\Samples\NextPm_Sample\NextPm_Sample.csproj", "{0F63B848-5397-41F5-A6A9-4837ED647E1A}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pmsa003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pmsa003I_Sample\Pmsa003I_Sample.csproj", "{31D80302-FD83-4958-B379-DAC2BC91ABDA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2795,12 +2795,6 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Build.0 = Release|Any CPU - {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Release|Any CPU.Deploy.0 = Release|Any CPU {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {C182D69A-FE45-46BF-8522-76E0BC962FFB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -2957,6 +2951,12 @@ Global {0F63B848-5397-41F5-A6A9-4837ED647E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {0F63B848-5397-41F5-A6A9-4837ED647E1A}.Release|Any CPU.Build.0 = Release|Any CPU {0F63B848-5397-41F5-A6A9-4837ED647E1A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Release|Any CPU.Build.0 = Release|Any CPU + {31D80302-FD83-4958-B379-DAC2BC91ABDA}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3527,7 +3527,6 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} - {B2910299-B232-4CAB-AA13-591ABDDC0ED4} = {A3F37EFB-9686-4074-9962-5F731C52D919} {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} {753F764D-EA21-43A0-B761-6E9B43D8C90B} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {C182D69A-FE45-46BF-8522-76E0BC962FFB} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} @@ -3577,6 +3576,7 @@ Global {EDDED57B-FCCC-4F76-B94C-C5F793678E36} = {4F21565E-E855-479E-87D1-7F5F3BC96543} {8A37E554-5E29-4E3A-A4EF-6E360FBA359B} = {4F21565E-E855-479E-87D1-7F5F3BC96543} {0F63B848-5397-41F5-A6A9-4837ED647E1A} = {8A37E554-5E29-4E3A-A4EF-6E360FBA359B} + {31D80302-FD83-4958-B379-DAC2BC91ABDA} = {A3F37EFB-9686-4074-9962-5F731C52D919} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From a086fd1e234b12b2ccd85d28499fdce386c1ae84 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 20 Apr 2023 21:08:57 -0700 Subject: [PATCH 070/141] SpiPeripheral requires SPI speed and mode --- .../Communications/ByteCommsSensorBase.cs | 17 +++-- .../Communications/SpiPeripheral.cs | 60 +++++++++++----- .../MeadowApp.cs | 4 +- .../TextDisplayMenu_Sample/MeadowApp.cs | 5 +- .../Displays.Ch1115/Driver/Ch1115.cs | 41 ++++++++--- .../Displays.Max7219/Driver/Max7219.cs | 45 ++++++++---- .../Samples/Max7219_8x8x4_Sample/MeadowApp.cs | 2 +- .../Max7219_8x8x4x2_Sample/MeadowApp.cs | 6 +- .../Displays.Pcd8544/Driver/Pcd8544.cs | 22 +++++- .../Displays.Sh110x/Driver/Sh110x.cs | 23 +++++- .../Driver/Drivers/Ssd1306.cs | 2 +- .../Driver/Drivers/Ssd1309.cs | 11 --- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 21 ++++++ .../Displays.Ssd1327/Driver/Ssd1327.cs | 70 +++++++++---------- .../Displays.St7565/Driver/St7565.cs | 56 ++++++++++----- .../Displays.TftSpi/Driver/Drivers/Ili9341.cs | 4 +- .../Displays.TftSpi/Driver/Drivers/Ssd1351.cs | 6 -- .../Displays.TftSpi/Driver/Drivers/St7735.cs | 6 -- .../Displays.TftSpi/Driver/Drivers/St7789.cs | 16 +++-- .../Displays.TftSpi/Driver/TftSpiBase.cs | 53 +++++++++----- .../Samples/Gc9a01_Sample/MeadowApp.cs | 5 +- .../Samples/Hx8357b_Sample/MeadowApp.cs | 5 +- .../Samples/Hx8357d_Sample/MeadowApp.cs | 5 +- .../Samples/Ili9163_Sample/MeadowApp.cs | 5 +- .../Samples/Ili9341_Jpg_Sample/MeadowApp.cs | 2 +- .../Samples/Ili9341_Sample/MeadowApp.cs | 7 +- .../Samples/Ili9481_Sample/MeadowApp.cs | 5 +- .../Samples/Ili9486_Sample/MeadowApp.cs | 5 +- .../Samples/Ili9488_Sample/MeadowApp.cs | 5 +- .../Samples/Rm68140_Sample/MeadowApp.cs | 5 +- .../Samples/S6D02A1_Sample/MeadowApp.cs | 5 +- .../Samples/ST7789_Sample/MeadowApp.cs | 13 ++-- .../Samples/Ssd1331_Sample/MeadowApp.cs | 5 +- .../Samples/Ssd1351_Sample/MeadowApp.cs | 2 +- .../Samples/St7735_Sample/MeadowApp.cs | 2 +- .../Samples/St7796s_Sample/MeadowApp.cs | 5 +- .../Displays.ePaper/Driver/EPaperMonoBase.cs | 2 +- .../Driver/EPaperTriColorBase.cs | 2 +- .../Displays.ePaper/Driver/ePaperBase.cs | 23 +++++- .../Driver/Drivers/Epd5in65f.cs | 7 +- .../Driver/Drivers/Extras/Mcp23x0x.cs | 2 +- .../Driver/Mcp23xxx.SpiMcpDeviceComms.cs | 8 ++- .../Driver/Mcp23xxx.cs | 15 +++- .../ICs.IOExpanders.x74595/Driver/x74595.cs | 13 +++- .../Leds.Apa102/Driver/Apa102.cs | 11 ++- .../Apa102_Display_Sample/MeadowApp.cs | 22 +++--- .../Samples/Apa102_Sample/MeadowApp.cs | 15 ++-- .../Driver/Bme280.cs | 12 +++- .../Driver/Bme280SPI.cs | 13 ++-- .../Driver/Bme68x.cs | 12 +++- .../Driver/Bme68xSPI.cs | 9 +-- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs | 37 +++++++--- .../Driver/Drivers/Adxl362.cs | 12 +++- 53 files changed, 485 insertions(+), 281 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs index 2019c3706d..ebd966da75 100644 --- a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs +++ b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs @@ -1,5 +1,6 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using Meadow.Units; +using System; namespace Meadow.Foundation { @@ -45,15 +46,21 @@ protected ByteCommsSensorBase( /// /// SPI bus object /// Chip select port + /// The SPI bus speed + /// The SPI bus mode (0-3) /// Read buffer size /// Write buffer size /// Chip select mode protected ByteCommsSensorBase( - ISpiBus spiBus, IDigitalOutputPort? chipSelect, - int readBufferSize = 8, int writeBufferSize = 8, + ISpiBus spiBus, + IDigitalOutputPort? chipSelect, + Frequency busSpeed, + SpiClockConfiguration.Mode busMode = SpiClockConfiguration.Mode.Mode0, + int readBufferSize = 8, + int writeBufferSize = 8, ChipSelectMode chipSelectMode = ChipSelectMode.ActiveLow) { - Peripheral = new SpiPeripheral(spiBus, chipSelect, readBufferSize, writeBufferSize, chipSelectMode); + Peripheral = new SpiPeripheral(spiBus, chipSelect, busSpeed, busMode, readBufferSize, writeBufferSize, chipSelectMode); Init(readBufferSize, writeBufferSize); } diff --git a/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs b/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs index faf07fc748..1d3e5405a2 100644 --- a/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs +++ b/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs @@ -1,4 +1,5 @@ -using System; +using Meadow.Units; +using System; namespace Meadow.Hardware { @@ -16,13 +17,23 @@ public class SpiPeripheral : ISpiPeripheral /// /// The chip select mode (active high or active low) /// - ChipSelectMode chipSelectMode; + readonly ChipSelectMode chipSelectMode; /// /// the ISpiBus object /// public ISpiBus Bus { get; } + /// + /// SPI bus speed + /// + public Frequency BusSpeed { get; set; } + + /// + /// SPI bus mode + /// + public SpiClockConfiguration.Mode BusMode { get; set; } + /// /// Internal write buffer. Used in methods in which the buffers aren't /// passed in. @@ -39,18 +50,24 @@ public class SpiPeripheral : ISpiPeripheral /// /// The spi bus connected to the peripheral /// The chip select port + /// The SPI bus speed + /// The SPI bus mode (0-3) /// The size of the read buffer in bytes /// The size of the write buffer in bytes /// The chip select mode, active high or active low public SpiPeripheral( ISpiBus bus, IDigitalOutputPort? chipSelect, + Frequency busSpeed, + SpiClockConfiguration.Mode busMode = SpiClockConfiguration.Mode.Mode0, int readBufferSize = 8, int writeBufferSize = 8, ChipSelectMode csMode = ChipSelectMode.ActiveLow) { - this.Bus = bus; - this.ChipSelect = chipSelect; - this.chipSelectMode = csMode; + Bus = bus; + BusMode = busMode; + BusSpeed = busSpeed; + ChipSelect = chipSelect; + chipSelectMode = csMode; WriteBuffer = new byte[writeBufferSize]; ReadBuffer = new byte[readBufferSize]; } @@ -65,7 +82,7 @@ public SpiPeripheral( /// public void Read(Span readBuffer) { - Bus.Read(this.ChipSelect, readBuffer, this.chipSelectMode); + Bus.Read(ChipSelect, readBuffer, chipSelectMode); } /// @@ -76,7 +93,7 @@ public void Read(Span readBuffer) public void ReadRegister(byte address, Span readBuffer) { WriteBuffer.Span[0] = address; - Bus.Exchange(this.ChipSelect, WriteBuffer.Span[0..readBuffer.Length], readBuffer, this.chipSelectMode); + Bus.Exchange(ChipSelect, WriteBuffer.Span[0..readBuffer.Length], readBuffer, chipSelectMode); } /// @@ -87,7 +104,7 @@ public void ReadRegister(byte address, Span readBuffer) public byte ReadRegister(byte address) { WriteBuffer.Span[0] = address; - Bus.Exchange(this.ChipSelect, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1], this.chipSelectMode); + Bus.Exchange(ChipSelect, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1], chipSelectMode); return ReadBuffer.Span[0]; } @@ -117,7 +134,7 @@ public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.Lit public void Write(byte value) { WriteBuffer.Span[0] = value; - Bus.Write(ChipSelect, WriteBuffer.Span[0..1], this.chipSelectMode); + Bus.Write(ChipSelect, WriteBuffer.Span[0..1], chipSelectMode); } /// @@ -126,7 +143,7 @@ public void Write(byte value) /// Data to be written. public void Write(Span data) { - Bus.Write(this.ChipSelect, data, this.chipSelectMode); + Bus.Write(ChipSelect, data, chipSelectMode); } /// @@ -139,7 +156,7 @@ public void WriteRegister(byte address, byte value) // stuff the address and value into the write buffer WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; - Bus.Write(ChipSelect, WriteBuffer.Span[0..2], this.chipSelectMode); + Bus.Write(ChipSelect, WriteBuffer.Span[0..2], chipSelectMode); } /// @@ -152,7 +169,6 @@ public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrde { // split the 16 bit ushort into two bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -166,7 +182,6 @@ public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder. { // split the 32 bit ushort into four bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -180,7 +195,6 @@ public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder { // split the 64 bit ushort into eight bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -200,7 +214,6 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order "amount of data to fix."); } - // stuff the register address into the write buffer WriteBuffer.Span[0] = address; // stuff the bytes into the write buffer (starting at `1` index, @@ -221,8 +234,7 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order } break; } - // write it - this.Bus.Write(this.ChipSelect, WriteBuffer.Span[0..(writeBuffer.Length + 1)], this.chipSelectMode); + Bus.Write(ChipSelect, WriteBuffer.Span[0..(writeBuffer.Length + 1)], chipSelectMode); } /// @@ -233,6 +245,16 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order /// The duplex mode - half or full public void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) { + if (Bus.Configuration.SpiMode != BusMode) + { + Bus.Configuration.SetBusMode(BusMode); + } + + if (Bus.Configuration.Speed != BusSpeed) + { + Bus.Configuration.Speed = BusSpeed; + } + if (duplex == DuplexType.Half) { // Todo: we should move this functionality deeper into the stack @@ -253,14 +275,14 @@ public void Exchange(Span writeBuffer, Span readBuffer, DuplexType d writeBuffer.CopyTo(txBuffer); // write/read the data - Bus.Exchange(ChipSelect, txBuffer, rxBuffer, this.chipSelectMode); + Bus.Exchange(ChipSelect, txBuffer, rxBuffer, chipSelectMode); // move the rx data into the read buffer, starting it at zero rxBuffer[writeBuffer.Length..length].CopyTo(readBuffer); } else { - Bus.Exchange(ChipSelect, writeBuffer, readBuffer, this.chipSelectMode); + Bus.Exchange(ChipSelect, writeBuffer, readBuffer, chipSelectMode); } } } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs index 20eaf9e04c..50486c539f 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs @@ -32,9 +32,7 @@ public override Task Initialize() Resolver.Log.Info("Create Display with SPI..."); - var config = new SpiClockConfiguration(Ssd1309.DefaultSpiBusSpeed, Ssd1309.DefaultSpiClockMode); - - var bus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var bus = Device.CreateSpiBus(); ssd1309 = new Ssd1309 ( diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs index a2c6a5ac53..0021325fc9 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs @@ -4,7 +4,6 @@ using Meadow.Foundation.Displays.TextDisplayMenu; using Meadow.Foundation.Graphics; using Meadow.Foundation.Sensors.Buttons; -using Meadow.Hardware; using Meadow.Peripherals.Displays; using Meadow.Peripherals.Sensors.Buttons; using System.IO; @@ -27,9 +26,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var config = new SpiClockConfiguration(Ssd1309.DefaultSpiBusSpeed, Ssd1309.DefaultSpiClockMode); - - var bus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var bus = Device.CreateSpiBus(); ssd1309 = new Ssd1309 ( diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs index 9c2ded5a69..df29b1ec59 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs @@ -1,6 +1,7 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; using Meadow.Hardware; +using Meadow.Units; using System; using System.Threading; @@ -36,19 +37,39 @@ public partial class Ch1115 : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + /// /// SPI peripheral object /// - ISpiPeripheral spiPerihperal; + readonly ISpiPeripheral spiPeripheral; - IDigitalOutputPort dataCommandPort; - IDigitalOutputPort resetPort; + readonly IDigitalOutputPort dataCommandPort; + readonly IDigitalOutputPort resetPort; const bool Data = true; const bool Command = false; - Buffer1bpp imageBuffer; - byte[] pageBuffer; + readonly Buffer1bpp imageBuffer; + readonly byte[] pageBuffer; /// /// Create a new Ch1115 object @@ -84,7 +105,7 @@ public Ch1115(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPerihperal = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; @@ -194,7 +215,7 @@ public void SetContrast(byte contrast) private void SendCommand(byte command) { dataCommandPort.State = Command; - spiPerihperal.Write(command); + spiPeripheral.Write(command); } /// @@ -208,7 +229,7 @@ private void SendCommands(byte[] commands) Array.Copy(commands, 0, data, 1, commands.Length); dataCommandPort.State = Command; - spiPerihperal.Write(commands); + spiPeripheral.Write(commands); } const int StartColumnOffset = 0; @@ -228,7 +249,7 @@ public void Show() dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + spiPeripheral.Write(pageBuffer); } } @@ -259,7 +280,7 @@ public void Show(int left, int top, int right, int bottom) dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + spiPeripheral.Write(pageBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs index 285aa1a316..9fcb5e076b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs @@ -10,11 +10,6 @@ namespace Meadow.Foundation.Displays /// public partial class Max7219 { - /// - /// MAX7219 Spi Clock Frequency - /// - public static Frequency DefaultSpiBusSpeed = new Frequency(6000, Frequency.UnitType.Kilohertz); - /// /// Number of digits per Module /// @@ -40,7 +35,27 @@ public partial class Max7219 /// public int Length => DigitRows * DigitColumns; - private readonly ISpiPeripheral max7219; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(10000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + + private readonly ISpiPeripheral spiPeripheral; /// /// internal buffer used to write to registers for all devices. @@ -60,7 +75,7 @@ public partial class Max7219 /// SPI bus /// Chip select port /// Number of cascaded devices - /// Display mode of max7219 + /// Display mode of spiPeripheral public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceCount = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipselectPort, deviceCount, 1, maxMode) { @@ -73,10 +88,10 @@ public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceCoun /// Chip select port /// Number of devices cascaded vertically /// Number of devices cascaded horizontally - /// Display mode of max7219 + /// Display mode of spiPeripheral public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceRows, int deviceColumns, Max7219Mode maxMode = Max7219Mode.Display) { - max7219 = new SpiPeripheral(spiBus, chipselectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipselectPort, SpiBusSpeed, SpiBusMode); DigitRows = deviceRows; DigitColumns = deviceColumns * DigitsPerDevice; @@ -95,7 +110,7 @@ public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceRows /// Chip select pin /// Number of devices cascaded vertically /// Number of devices cascaded horizontally - /// Display mode of max7219 + /// Display mode of spiPeripheral public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceRows = 1, int deviceColumns = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipSelectPin.CreateDigitalOutputPort(), deviceRows, deviceColumns, maxMode) { } @@ -106,7 +121,7 @@ public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceRows = 1, int devic /// SPI bus /// Chip select pin /// Number of cascaded devices - /// Display mode of max7219 + /// Display mode of spiPeripheral public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceCount = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipSelectPin.CreateDigitalOutputPort(), deviceCount, 1, maxMode) { } @@ -191,7 +206,7 @@ public void TestDisplay(TimeSpan time) } /// - /// Set the display mode of the max7219 + /// Set the display mode of the spiPeripheral /// /// the mode public void SetMode(Max7219Mode maxMode) @@ -211,7 +226,7 @@ internal void SetRegister(Register register, byte data) writeBuffer[i++] = (byte)register; writeBuffer[i++] = data; } - max7219.Write(writeBuffer); + spiPeripheral.Write(writeBuffer); } /// @@ -224,7 +239,7 @@ internal void SetRegister(int deviceId, Register register, byte data) writeBuffer[deviceId * 2] = (byte)register; writeBuffer[deviceId * 2 + 1] = data; - max7219.Write(writeBuffer); + spiPeripheral.Write(writeBuffer); } /// @@ -317,7 +332,7 @@ public void WriteBuffer(byte[,] buffer) writeBuffer[i++] = (byte)((int)Register.Digit0 + digit); writeBuffer[i++] = buffer[deviceId, digit]; } - max7219.Write(writeBuffer); + spiPeripheral.Write(writeBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/MeadowApp.cs index 71739c282a..82c0e9545f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4_Sample/MeadowApp.cs @@ -17,7 +17,7 @@ public override Task Initialize() Resolver.Log.Info("Init..."); display = new Max7219( - Device.CreateSpiBus(Max7219.DefaultSpiBusSpeed), + Device.CreateSpiBus(), Device.Pins.D00, deviceCount: 4, maxMode: Max7219.Max7219Mode.Display); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/MeadowApp.cs index 40a1d160c0..275986285e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Samples/Max7219_8x8x4x2_Sample/MeadowApp.cs @@ -38,7 +38,7 @@ public override Task Initialize() Resolver.Log.Info("Init..."); - var spiBus = Device.CreateSpiBus(Max7219.DefaultSpiBusSpeed); + var spiBus = Device.CreateSpiBus(); display = new Max7219(spiBus, Device.Pins.D01, 4, 2, Max7219.Max7219Mode.Display); @@ -53,8 +53,8 @@ public override Task Initialize() void Show3dCube() { - int originY = (int)display.Width / 2; - int originX = (int)display.Height / 2; + int originY = display.Width / 2; + int originX = display.Height / 2; int angle = 0; while (true) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs index 80e7f35b08..2236eac78d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs @@ -46,6 +46,26 @@ public class Pcd8544 : IGraphicsDisplay /// public bool IsDisplayInverted { get; private set; } = false; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(4000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; readonly ISpiPeripheral spiPeripheral; @@ -93,7 +113,7 @@ public Pcd8544(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 3a4973b547..8c23724ba6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -1,6 +1,7 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; using Meadow.Hardware; +using Meadow.Units; using System; using System.Threading; @@ -31,6 +32,26 @@ public abstract partial class Sh110x : IGraphicsDisplay /// public int Height { get; protected set; } = 64; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(4000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + /// /// The connection type (I2C or SPI) /// @@ -127,7 +148,7 @@ public Sh110x(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); Width = width; Height = height; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index f139762fb5..c60eaa4572 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -40,7 +40,7 @@ public Ssd1306(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); connectionType = ConnectionType.SPI; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs index da8d4a1402..05e69772c8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs @@ -1,5 +1,4 @@ using Meadow.Hardware; -using Meadow.Units; namespace Meadow.Foundation.Displays { @@ -8,16 +7,6 @@ namespace Meadow.Foundation.Displays /// public class Ssd1309 : Ssd1306 { - /// - /// The default SPI clock mode - /// - public static SpiClockConfiguration.Mode DefaultSpiClockMode = SpiClockConfiguration.Mode.Mode0; - - /// - /// Default SPI frequency - /// - public static Frequency DefaultSpiBusSpeed = new Frequency(12000, Frequency.UnitType.Kilohertz); - /// /// Create a new Ssd1309 object /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index 68e413c66a..59766bee85 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -1,6 +1,7 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; using Meadow.Hardware; +using Meadow.Units; using System; namespace Meadow.Foundation.Displays @@ -35,6 +36,26 @@ public abstract partial class Ssd130xBase : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(8000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + /// /// SSD1306 SPI display /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs index 0f52a9a15a..170e2fee4f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs @@ -1,8 +1,9 @@ -using System; -using System.Threading; -using Meadow.Hardware; +using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; -using Meadow.Foundation.Graphics; +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Threading; namespace Meadow.Foundation.Displays { @@ -36,10 +37,29 @@ public partial class Ssd1327 : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(10000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + readonly ISpiPeripheral spiPeripheral; readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; - readonly IDigitalOutputPort chipSelectPort; readonly BufferGray4 imageBuffer; @@ -54,16 +74,8 @@ public partial class Ssd1327 : IGraphicsDisplay /// Data command pin /// Reset pin public Ssd1327(ISpiBus spiBus, IPin chipSelectPin, IPin dcPin, IPin resetPin) + : this(spiBus, chipSelectPin?.CreateDigitalOutputPort(false), dcPin?.CreateDigitalOutputPort(false), resetPin?.CreateDigitalOutputPort(true)) { - imageBuffer = new BufferGray4(Width, Height); - - dataCommandPort = dcPin.CreateDigitalOutputPort(false); - if (resetPin != null) { resetPort = resetPin.CreateDigitalOutputPort(true); } - if (chipSelectPin != null) { chipSelectPort = chipSelectPin.CreateDigitalOutputPort(false); } - - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); - - Initialize(); } /// @@ -78,11 +90,12 @@ public Ssd1327(ISpiBus spiBus, IDigitalOutputPort dataCommandPort, IDigitalOutputPort resetPort) { + imageBuffer = new BufferGray4(Width, Height); + this.dataCommandPort = dataCommandPort; - this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); Initialize(); } @@ -121,7 +134,7 @@ public void Clear(bool updateDisplay = false) { Array.Clear(imageBuffer.Buffer, 0, imageBuffer.ByteCount); - if(updateDisplay == true) + if (updateDisplay == true) { Show(); } @@ -200,7 +213,7 @@ void SetAddressWindow(byte x0, byte y0, byte x1, byte y1) { SendCommand(Command.SETCOLUMN); //Set Column Address SendCommand(x0); //Beginning. Note that you must divide the column by 2, since 1 byte in memory is 2 pixels - SendCommand((byte)(x1/2)); //End + SendCommand((byte)(x1 / 2)); //End SendCommand(Command.SETROW); //Set Row Address SendCommand(y0); //Beginning @@ -218,23 +231,6 @@ void SendCommand(byte command) spiPeripheral.Write(command); } - void SendData(int data) - { - SendData((byte)data); - } - - void SendData(byte data) - { - dataCommandPort.State = DataState; - spiPeripheral.Write(data); - } - - void SendData(byte[] data) - { - dataCommandPort.State = DataState; - spiPeripheral.Write(data); - } - /// /// Fill display buffer with a color /// @@ -281,7 +277,7 @@ public void WriteBuffer(int x, int y, IPixelBuffer displayBuffer) 0x00, // 0xA1, 0x00 (byte)Command.SETDISPLAYOFFSET, 0x00, // 0xA2, 0x00 - (byte)Command.DISPLAYALLOFF, + (byte)Command.DISPLAYALLOFF, (byte)Command.SETMULTIPLEX, 0x7F, // 0xA8, 0x7F (1/64) (byte)Command.PHASELEN, @@ -305,7 +301,7 @@ public void WriteBuffer(int x, int y, IPixelBuffer displayBuffer) 0x62, // 0xD5, 0x62 (byte)Command.CMDLOCK, 0x12, // 0xFD, 0x12 - (byte)Command.NORMALDISPLAY, + (byte)Command.NORMALDISPLAY, (byte)Command.DISPLAYON }; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs index b622c7c418..35cd2fff29 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs @@ -1,13 +1,14 @@ -using System; -using System.Threading; -using Meadow.Hardware; -using Meadow.Foundation.Graphics; +using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Threading; namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the ST7565 family of displays. + /// Provide an interface to the ST7565 family of displays /// public partial class St7565 : IGraphicsDisplay { @@ -37,18 +38,37 @@ public partial class St7565 : IGraphicsDisplay public IPixelBuffer PixelBuffer => imageBuffer; /// - /// SPI peripheral object + /// The SPI bus speed for the device /// - ISpiPeripheral spiPerihperal; + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(12000, Frequency.UnitType.Kilohertz); - IDigitalOutputPort dataCommandPort; - IDigitalOutputPort resetPort; + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + + /// + /// SPI peripheral object + /// + readonly ISpiPeripheral spiPeripheral; + readonly IDigitalOutputPort dataCommandPort; + readonly IDigitalOutputPort resetPort; const bool Data = true; const bool Command = false; - Buffer1bpp imageBuffer; - byte[] pageBuffer; + readonly Buffer1bpp imageBuffer; + readonly byte[] pageBuffer; /// /// Create a new ST7565 object @@ -84,7 +104,7 @@ public St7565(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPerihperal = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; @@ -162,7 +182,7 @@ public void SetContrast(byte contrast) private void SendCommand(byte command) { dataCommandPort.State = Command; - spiPerihperal.Write(command); + spiPeripheral.Write(command); } /// @@ -176,7 +196,7 @@ private void SendCommands(byte[] commands) Array.Copy(commands, 0, data, 1, commands.Length); dataCommandPort.State = Command; - spiPerihperal.Write(commands); + spiPeripheral.Write(commands); } const int StartColumnOffset = 0; @@ -197,7 +217,7 @@ public void Show() dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + spiPeripheral.Write(pageBuffer); } } @@ -216,7 +236,7 @@ public void Show(int left, int top, int right, int bottom) //so interate over all 8 pages and check if they're in range for (int page = 0; page < 8; page++) { - if(top > pageHeight*page || bottom < (page + 1) * pageHeight) + if (top > pageHeight * page || bottom < (page + 1) * pageHeight) { continue; } @@ -229,7 +249,7 @@ public void Show(int left, int top, int right, int bottom) dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPerihperal.Write(pageBuffer); + spiPeripheral.Write(pageBuffer); } } @@ -321,7 +341,7 @@ public void StartScrolling(ScrollDirection direction, byte startPage, byte endPa scrollDirection = 0x29; } - commands = new byte[] { 0xa3, 0x00, (byte) Height, scrollDirection, 0x00, startPage, 0x00, endPage, 0x01, 0x2f }; + commands = new byte[] { 0xa3, 0x00, (byte)Height, scrollDirection, 0x00, startPage, 0x00, endPage, 0x01, 0x2f }; } SendCommands(commands); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs index 1dd8403bdf..b3d5585d5e 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs @@ -10,9 +10,9 @@ namespace Meadow.Foundation.Displays public class Ili9341 : TftSpiBase { /// - /// The default SPI bus frequency + /// SPI bus speed /// - public static Frequency DefaultSpiBusSpeed = new Frequency(24000, Frequency.UnitType.Kilohertz); + protected override Frequency _spiBusSpeed { get; set; } = new Frequency(24000, Frequency.UnitType.Kilohertz); /// /// The default display color mode diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs index 26b79f7e6a..6524681036 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs @@ -1,6 +1,5 @@ using Meadow.Foundation.Graphics; using Meadow.Hardware; -using Meadow.Units; namespace Meadow.Foundation.Displays { @@ -9,11 +8,6 @@ namespace Meadow.Foundation.Displays /// public class Ssd1351 : TftSpiBase { - /// - /// The default SPI bus frequency - /// - public static Frequency DefaultSpiBusSpeed = new Frequency(12000, Frequency.UnitType.Kilohertz); - /// /// The default display color mode /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs index d3279aa2ad..2fda516e16 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs @@ -1,6 +1,5 @@ using Meadow.Foundation.Graphics; using Meadow.Hardware; -using Meadow.Units; namespace Meadow.Foundation.Displays { @@ -9,11 +8,6 @@ namespace Meadow.Foundation.Displays /// public class St7735 : TftSpiBase { - /// - /// The default SPI bus frequency - /// - public static Frequency DefaultSpiBusSpeed = new Frequency(12000, Frequency.UnitType.Kilohertz); - /// /// The default display color mode /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index 9a48a3d42c..9b129f4656 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -9,11 +9,6 @@ namespace Meadow.Foundation.Displays /// public class St7789 : TftSpiBase, IRotatableDisplay { - /// - /// The default SPI bus frequency - /// - public static Frequency DefaultSpiBusSpeed = new Frequency(48000, Frequency.UnitType.Kilohertz); - /// /// The default display color mode /// @@ -24,6 +19,17 @@ public class St7789 : TftSpiBase, IRotatableDisplay /// public override ColorMode SupportedColorModes => ColorMode.Format16bppRgb565 | ColorMode.Format12bppRgb444; + /// + /// SPI bus speed + /// + protected override Frequency _spiBusSpeed { get; set; } = new Frequency(48000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + protected override SpiClockConfiguration.Mode _piBusMode { get; set; } = SpiClockConfiguration.Mode.Mode3; + + private byte rowStart, rowStart2; private byte columnStart, columnStart2; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 237318b1d2..1072241276 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -1,6 +1,7 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; using Meadow.Hardware; +using Meadow.Units; using System; using System.Threading; @@ -45,6 +46,32 @@ public abstract partial class TftSpiBase : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiDisplay.BusSpeed = value; + } + /// + /// The SPI bus speed for the device + /// + protected virtual Frequency _spiBusSpeed { get; set; } = new Frequency(12000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiDisplay.BusMode = value; + } + /// + /// The SPI bus mode for the device + /// + protected virtual SpiClockConfiguration.Mode _piBusMode { get; set; } = SpiClockConfiguration.Mode.Mode0; + /// /// The data command port /// @@ -143,7 +170,7 @@ public TftSpiBase(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiDisplay = new SpiPeripheral(spiBus, chipSelectPort); + spiDisplay = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); CreateBuffer(colorMode, nativeWidth = width, nativeHeight = height); } @@ -156,42 +183,32 @@ public TftSpiBase(ISpiBus spiBus, public virtual bool IsColorTypeSupported(ColorMode colorType) { return (SupportedColorModes | colorType) != 0; - /* - if (SupportedColors) - - - if (mode == ColorType.Format12bppRgb444 || - mode == ColorType.Format16bppRgb565) - { - return true; - } - return false;*/ } /// /// Create an offscreen buffer for the display /// - /// The color mode + /// The color mode /// The width in pixels /// The height in pixels /// Throws an exception if the color mode isn't supported - protected void CreateBuffer(ColorMode colorType, int width, int height) + protected void CreateBuffer(ColorMode colorMode, int width, int height) { - if (IsColorTypeSupported(colorType) == false) + if (IsColorTypeSupported(colorMode) == false) { - throw new ArgumentException($"color mode {colorType} not supported"); + throw new ArgumentException($"color mode {colorMode} not supported"); } - if (colorType == ColorMode.Format24bppRgb888) + if (colorMode == ColorMode.Format24bppRgb888) { imageBuffer = new BufferRgb888(width, height); } - else if (colorType == ColorMode.Format16bppRgb565) + else if (colorMode == ColorMode.Format16bppRgb565) { imageBuffer = new BufferRgb565(width, height); } - else //Rgb444 + else { imageBuffer = new BufferRgb444(width, height); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/MeadowApp.cs index 205e2ec8a7..7a096b9962 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Gc9a01_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Gc9a01_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/MeadowApp.cs index 8bb6f15a1c..3d17ae9d19 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357b_Sample/MeadowApp.cs @@ -3,8 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System; using System.Diagnostics; using System.Threading; @@ -22,8 +20,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/MeadowApp.cs index 48d47254e3..612b5a2363 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Hx8357d_Sample/MeadowApp.cs @@ -3,8 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System; using System.Diagnostics; using System.Threading; @@ -22,8 +20,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/MeadowApp.cs index c73a6b656d..e8e2ad9252 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9163_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Ili9163_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/MeadowApp.cs index a51c01d0a7..b7c9fba4e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Jpg_Sample/MeadowApp.cs @@ -22,7 +22,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var spiBus = Device.CreateSpiBus(Ili9341.DefaultSpiBusSpeed); + var spiBus = Device.CreateSpiBus(); display = new Ili9341 ( diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/MeadowApp.cs index 709f57ea91..041e20ee90 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9341_Sample/MeadowApp.cs @@ -3,8 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System; using System.Threading; using System.Threading.Tasks; @@ -22,14 +20,11 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); - Resolver.Log.Info("Create display driver instance"); display = new Ili9341 ( - spiBus: spiBus, + spiBus: Device.CreateSpiBus(), chipSelectPin: Device.Pins.D13, dcPin: Device.Pins.D14, resetPin: Device.Pins.D15, diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/MeadowApp.cs index 9c7c0d4029..7dc529438d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9481_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Ili9481_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/MeadowApp.cs index 76747c5923..aa76b0625b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9486_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Ili9486_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/MeadowApp.cs index eb1128b7f1..2c65de9ea8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ili9488_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Ili9488_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/MeadowApp.cs index 38d6a4452a..a95d1ecff2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Rm68140_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.Rm68140_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/MeadowApp.cs index 48ef960502..ead06e0241 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/S6D02A1_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; -using Meadow.Units; using System.Threading.Tasks; namespace Displays.Tft.S6D02A1_Sample @@ -18,8 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(12000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/MeadowApp.cs index d34a9ce65d..8d221beb2f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/ST7789_Sample/MeadowApp.cs @@ -4,8 +4,6 @@ using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; -using Meadow.Hardware; -using Meadow.Units; using System; using System.Diagnostics; using System.Threading; @@ -39,8 +37,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Frequency(48000, Frequency.UnitType.Kilohertz), SpiClockConfiguration.Mode.Mode3); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); display = new St7789( spiBus: spiBus, @@ -312,7 +309,7 @@ void LineTest() for (int i = 1; i < 10; i++) { graphics.Stroke = i; - graphics.DrawHorizontalLine((int)graphics.Width - 5, 20 * i, (int)(10 - graphics.Width), Color.Green); + graphics.DrawHorizontalLine(graphics.Width - 5, 20 * i, 10 - graphics.Width, Color.Green); } graphics.Show(); Thread.Sleep(1500); @@ -325,7 +322,7 @@ void LineTest() for (int i = 1; i < 10; i++) { graphics.Stroke = i; - graphics.DrawVerticalLine(20 * i, 5, (int)(graphics.Height - 10), Color.Orange); + graphics.DrawVerticalLine(20 * i, 5, graphics.Height - 10, Color.Orange); } graphics.Show(); Thread.Sleep(1500); @@ -335,7 +332,7 @@ void LineTest() for (int i = 1; i < 10; i++) { graphics.Stroke = i; - graphics.DrawVerticalLine(20 * i, (int)(graphics.Height - 5), (int)(10 - graphics.Width), Color.Blue); + graphics.DrawVerticalLine(20 * i, graphics.Height - 5, 10 - graphics.Width, Color.Blue); } graphics.Show(); Thread.Sleep(1500); @@ -464,7 +461,7 @@ void StrokeTest() graphics.DrawLine(85, 125, 195, 235, Color.Silver); graphics.Stroke = 2; - graphics.DrawRectangle(2, 2, (int)(graphics.Width - 4), (int)(graphics.Height - 4), Color.DimGray, false); + graphics.DrawRectangle(2, 2, graphics.Width - 4, graphics.Height - 4, Color.DimGray, false); graphics.Show(); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/MeadowApp.cs index 2138bf6a13..af1dd5a09a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1331_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; using System.Threading.Tasks; namespace Displays.Tft.Ssd1331_Sample @@ -17,9 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Meadow.Units.Frequency(12000, Meadow.Units.Frequency.UnitType.Kilohertz), - SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/MeadowApp.cs index 79052d7c94..c7c33854a6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/Ssd1351_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var spiBus = Device.CreateSpiBus(Ssd1351.DefaultSpiBusSpeed); + var spiBus = Device.CreateSpiBus(); var display = new Ssd1351( spiBus: spiBus, diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/MeadowApp.cs index 7cb5720756..48ba59b2c9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7735_Sample/MeadowApp.cs @@ -17,7 +17,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var spiBus = Device.CreateSpiBus(St7735.DefaultSpiBusSpeed); + var spiBus = Device.CreateSpiBus(); //note - you may need to adjust the DisplayType for your specific St7735 var display = new St7735( diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/MeadowApp.cs index 7b79b082e9..c340fbae6f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Samples/St7796s_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using Meadow.Hardware; using System.Threading.Tasks; namespace Displays.Tft.St7796s_Sample @@ -17,9 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing ..."); - var config = new SpiClockConfiguration(new Meadow.Units.Frequency(12000, Meadow.Units.Frequency.UnitType.Kilohertz) - , SpiClockConfiguration.Mode.Mode0); - var spiBus = Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config); + var spiBus = Device.CreateSpiBus(); Resolver.Log.Info("Create display driver instance"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs index 90f475f3fa..5ca7a11458 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs @@ -92,7 +92,7 @@ public EPaperMonoBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); imageBuffer = new Buffer1bppV(width, height); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs index 2792a84571..3cd05275f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs @@ -103,7 +103,7 @@ public EPaperTriColorBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); this.width = width; this.height = height; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs index b6a1a362dc..66a8c050ff 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs @@ -1,4 +1,5 @@ using Meadow.Hardware; +using Meadow.Units; using System.Threading; namespace Meadow.Foundation.Displays @@ -8,6 +9,26 @@ namespace Meadow.Foundation.Displays /// public abstract class EPaperBase { + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + /// /// The command buffer /// @@ -68,7 +89,7 @@ protected virtual void Reset() resetPort.State = true; DelayMs(200); } - + /// /// Delay for a specified amount of time /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs index 364336bba4..773a6e6e1b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs @@ -1,7 +1,6 @@ using Meadow.Foundation.Graphics; using Meadow.Foundation.Graphics.Buffers; using Meadow.Hardware; -using System; namespace Meadow.Foundation.Displays { @@ -86,7 +85,7 @@ public Epd5in65f(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); imageBuffer = new BufferIndexed4(Width, Height); @@ -151,7 +150,7 @@ public void Clear(bool updateDisplay = false) { imageBuffer.Clear(); - if(updateDisplay) + if (updateDisplay) { Show(); } @@ -259,7 +258,7 @@ public void Fill(Color fillColor, bool updateDisplay = false) { Fill(fillColor); - if(updateDisplay) + if (updateDisplay) { Show(); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs index be7e0c0ed3..84ab32a892 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs @@ -49,7 +49,7 @@ protected Mcp23x0x(II2cBus i2cBus, byte address = 32, IDigitalInputPort interrup /// optional interupt port, needed for input interrupts /// Optional Meadow output port used to reset the mcp expander protected Mcp23x0x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - base(new SpiMcpDeviceComms(spiBus, chipSelectPort), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms + base(new SpiMcpDeviceComms(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms { Pins = new PinDefinitions(this) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs index 22995c38ef..1a3c9fb99a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs @@ -1,4 +1,5 @@ using Meadow.Hardware; +using Meadow.Units; namespace Meadow.Foundation.ICs.IOExpanders { @@ -6,8 +7,11 @@ public partial class Mcp23xxx { internal class SpiMcpDeviceComms : SpiPeripheral, IMcpDeviceComms { - public SpiMcpDeviceComms(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) - : base(spiBus, chipSelectPort) + public SpiMcpDeviceComms(ISpiBus spiBus, + IDigitalOutputPort chipSelectPort, + Frequency busSpeed, + SpiClockConfiguration.Mode busMode) + : base(spiBus, chipSelectPort, busSpeed, busMode) { } } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index b4e9d92bf5..385b0f3762 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -1,9 +1,9 @@ using Meadow.Hardware; +using Meadow.Units; using Meadow.Utilities; using System; using System.Collections.Generic; using System.Threading; -using static Meadow.Foundation.ICs.IOExpanders.Mcp23xxx; namespace Meadow.Foundation.ICs.IOExpanders { @@ -24,6 +24,17 @@ abstract partial class Mcp23xxx : IDigitalInputOutputController /// public abstract int NumberOfPins { get; } + /// + /// The SPI bus speed for the device + /// + public static Frequency SpiBusSpeed { get; } = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public static SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + + private readonly IMcpDeviceComms mcpDevice; private readonly IDigitalInputPort interruptPort; private readonly IDigitalOutputPort resetPort; @@ -61,7 +72,7 @@ protected Mcp23xxx(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - this(new SpiMcpDeviceComms(spiBus, chipSelectPort), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms + this(new SpiMcpDeviceComms(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms { } /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs index 3fd9d39d0f..eefd4916df 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs @@ -1,4 +1,5 @@ using Meadow.Hardware; +using Meadow.Units; using Meadow.Utilities; using System; using System.Linq; @@ -19,6 +20,16 @@ public partial class x74595 : IDigitalOutputController /// public PinDefinitions Pins { get; } + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + /// /// Number of chips required to implement this ShiftRegister. /// @@ -58,7 +69,7 @@ public x74595(ISpiBus spiBus, IPin pinChipSelect, int pins = 8) latchData = new byte[numberOfChips]; - spiPeripheral = new SpiPeripheral(spiBus, pinChipSelect?.CreateDigitalOutputPort()); + spiPeripheral = new SpiPeripheral(spiBus, pinChipSelect?.CreateDigitalOutputPort(), SpiBusSpeed, SpiBusMode); } else { diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs index aec36a96cb..f930b4f978 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs @@ -11,9 +11,14 @@ namespace Meadow.Foundation.Leds public partial class Apa102 : IApa102 { /// - /// Default SPI bus speed + /// The SPI bus speed for the device /// - public static Frequency DefaultSpiBusSpeed = new Frequency(6000, Frequency.UnitType.Kilohertz); + public Frequency SpiBusSpeed { get; set; } = new Frequency(6000, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode { get; set; } = SpiClockConfiguration.Mode.Mode0; /// /// SpiPeripheral object @@ -73,7 +78,7 @@ public Apa102(ISpiBus spiBus, IPin chipSelectPin, int numberOfLeds, PixelOrder p /// SPI chip select port (optional) public Apa102(ISpiBus spiBus, int numberOfLeds, PixelOrder pixelOrder = PixelOrder.BGR, IDigitalOutputPort chipSelectPort = null) { - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); this.numberOfLeds = numberOfLeds; endHeaderSize = this.numberOfLeds / 16; Brightness = 1.0f; diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs index fa94a611da..aeb01d8647 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Display_Sample/MeadowApp.cs @@ -3,8 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Graphics; using Meadow.Foundation.Leds; -using System; -using System.Threading; using System.Threading.Tasks; namespace Leds.Apa102_Display_Sample @@ -19,7 +17,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - display = new Apa102(Device.CreateSpiBus(Apa102.DefaultSpiBusSpeed), 32, 8, Apa102.PixelOrder.BGR); + display = new Apa102(Device.CreateSpiBus(), 32, 8, Apa102.PixelOrder.BGR); canvas = new MicroGraphics(display); Resolver.Log.Info("Hardware intitialized."); @@ -50,22 +48,28 @@ public override async Task Run() static class Colors { - public static Color AzureBlue { - get { + public static Color AzureBlue + { + get + { var azureBlue = Color.FromHex("#23abe3"); // make it way less bright return Color.FromHsba(azureBlue.Hue, azureBlue.Saturation, 0.025); } } - public static Color ChileanFire { - get { + public static Color ChileanFire + { + get + { var chileanFire = Color.FromHex("#ef7d3b"); // make it way less bright return Color.FromHsba(chileanFire.Hue, chileanFire.Saturation, 0.025); } } - public static Color PearGreen { - get { + public static Color PearGreen + { + get + { var PearGreen = Color.FromHex("#c9db31"); // make it way less bright return Color.FromHsba(PearGreen.Hue, PearGreen.Saturation, 0.025); diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/MeadowApp.cs index 29f31bcbdf..f98bf474c8 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Samples/Apa102_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation; using Meadow.Foundation.Leds; -using System; using System.Threading; using System.Threading.Tasks; @@ -19,7 +18,7 @@ public class MeadowApp : App public override Task Initialize() { Resolver.Log.Info("Initialize..."); - apa102 = new Apa102(Device.CreateSpiBus(Apa102.DefaultSpiBusSpeed), numberOfLeds, Apa102.PixelOrder.BGR); + apa102 = new Apa102(Device.CreateSpiBus(), numberOfLeds, Apa102.PixelOrder.BGR); return base.Initialize(); } @@ -65,7 +64,7 @@ void SetColor(Color color, float brightness) { Resolver.Log.Info($"SetColor(color:{color}"); - for (int i = 0; i < apa102.NumberOfLeds; i++) + for (int i = 0; i < apa102.NumberOfLeds; i++) { apa102.SetLed(i, color, brightness); } @@ -133,13 +132,13 @@ void WalkTheStrip(Color color, int numberOfTraverses) apa102.SetLed(index, color); last = index; - if(forward) { index++; } + if (forward) { index++; } else { index--; } apa102.Show(); - if(index == apa102.NumberOfLeds - 1) { forward = false; } - if(index == 0) { forward = true; } + if (index == apa102.NumberOfLeds - 1) { forward = false; } + if (index == 0) { forward = true; } Thread.Sleep(50); } @@ -157,13 +156,13 @@ void Start() apa102.SetLed(2, Color.Blue); apa102.Show(); Thread.Sleep(2000); - + apa102.SetLed(0, Color.Green); apa102.SetLed(1, Color.Yellow); apa102.SetLed(2, Color.Pink); apa102.Show(); Thread.Sleep(5000); - + apa102.Clear(true); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index a5c46e7676..f85dfed0bd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -109,6 +109,16 @@ public partial class Bme280 : /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + /// /// Initializes a new instance of the BME280 class /// @@ -137,7 +147,7 @@ public Bme280(ISpiBus spiBus, IPin chipSelectPin) : /// The port for the chip select pin public Bme280(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) { - bme280Comms = new Bme280Spi(spiBus, chipSelectPort); + bme280Comms = new Bme280Spi(spiBus, SpiBusSpeed, SpiBusMode, chipSelectPort); configuration = new Configuration(); // here to avoid the warning Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs index d8546153c5..1712a10c1e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs @@ -1,6 +1,6 @@ -using System; -using System.Linq; -using Meadow.Hardware; +using Meadow.Hardware; +using Meadow.Units; +using System; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -8,9 +8,9 @@ internal class Bme280Spi : Bme280Comms { ISpiPeripheral spiPeripheral; - internal Bme280Spi(ISpiBus spi, IDigitalOutputPort? chipSelect = null) + internal Bme280Spi(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - spiPeripheral = new SpiPeripheral(spi, chipSelect); + spiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode); } public override void ReadRegisters(byte startRegister, Span readBuffer) @@ -18,7 +18,8 @@ public override void ReadRegisters(byte startRegister, Span readBuffer) spiPeripheral.ReadRegister(startRegister, readBuffer); // skip past the byte where we clocked out the register address - for (int i = 1; i < readBuffer.Length; i++) { + for (int i = 1; i < readBuffer.Length; i++) + { readBuffer[i - 1] = readBuffer[i]; } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index 49a43a4116..c0a904341c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -155,6 +155,16 @@ public bool GasConversionIsEnabled } bool gasConversionIsEnabled = false; + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + /// /// Communication bus used to read and write to the BME68x sensor /// @@ -230,7 +240,7 @@ protected Bme68x(ISpiBus spiBus, IPin chipSelectPin) : /// The BMP68x configuration (optional) protected Bme68x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, Configuration? configuration = null) { - sensor = new Bme68xSPI(spiBus, chipSelectPort); + sensor = new Bme68xSPI(spiBus, SpiBusSpeed, SpiBusMode, chipSelectPort); this.configuration = configuration ?? new Configuration(); byte value = sensor.ReadRegister((byte)Registers.STATUS); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs index 39bc03ceda..84fbdba3a1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs @@ -1,5 +1,6 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using Meadow.Units; +using System; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -30,9 +31,9 @@ internal enum SpiRegisterPage : byte SpiRegisterPage currentPage = SpiRegisterPage.Page1; - internal Bme68xSPI(ISpiBus spi, IDigitalOutputPort? chipSelect = null) + internal Bme68xSPI(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - spiPeripheral = new SpiPeripheral(spi, chipSelect, 32, 32); + spiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode, 32, 32); } public override byte ReadRegister(byte address) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs index c2fc82dce6..cc4c825da4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs @@ -1,4 +1,5 @@ using Meadow.Hardware; +using Meadow.Units; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -7,6 +8,26 @@ namespace Meadow.Foundation.Sensors.Gnss { public partial class NeoM8 { + /// + /// The SPI bus speed for the device + /// + public Frequency SpiBusSpeed + { + get => _spiBusSpeed; + set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + } + Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => _piBusMode; + set => _piBusMode = spiPeripheral.BusMode = value; + } + SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; + readonly ISpiPeripheral spiPeripheral; const byte NULL_VALUE = 0xFF; @@ -14,15 +35,15 @@ public partial class NeoM8 /// /// Create a new NEOM8 object using SPI /// - public NeoM8(ISpiBus spiBus, - IDigitalOutputPort chipSelectPort, - IDigitalOutputPort resetPort = null, + public NeoM8(ISpiBus spiBus, + IDigitalOutputPort chipSelectPort, + IDigitalOutputPort resetPort = null, IDigitalInputPort ppsPort = null) { ResetPort = resetPort; PulsePerSecondPort = ppsPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); _ = InitializeSpi(); } @@ -34,7 +55,7 @@ public NeoM8(ISpiBus spiBus, IPin chipSelectPin = null, IPin resetPin = null, IP { var chipSelectPort = chipSelectPin.CreateDigitalOutputPort(); - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); if (resetPin != null) { @@ -65,13 +86,13 @@ async Task InitializeSpi() } async Task StartUpdatingSpi() - { + { byte[] data = new byte[BUFFER_SIZE]; static bool HasMoreData(byte[] data) { bool hasNullValue = false; - for(int i = 1; i < data.Length; i++) + for (int i = 1; i < data.Length; i++) { if (data[i] == NULL_VALUE) { hasNullValue = true; } if (data[i - 1] == NULL_VALUE && data[i] != NULL_VALUE) @@ -89,7 +110,7 @@ await Task.Run(() => spiPeripheral.Read(data); messageProcessor.Process(data); - if(HasMoreData(data) == false) + if (HasMoreData(data) == false) { Thread.Sleep(COMMS_SLEEP_MS); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index 4b4435cb98..14ddddf282 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -59,6 +59,16 @@ public partial class Adxl362 /// public Units.Temperature? Temperature => Conditions.Temperature; + /// + /// The SPI bus speed for the device + /// + public static Frequency SpiBusSpeed { get; } = new Frequency(8, Frequency.UnitType.Megahertz); + + /// + /// The SPI bus mode for the device + /// + public static SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + /// /// Indicate of data is ready to be read /// @@ -254,7 +264,7 @@ public byte FilterControl /// Spi Bus object /// Chip select pin public Adxl362(ISpiBus spiBus, IPin chipSelect) - : base(spiBus, chipSelect.CreateDigitalOutputPort()) + : base(spiBus, chipSelect.CreateDigitalOutputPort(), SpiBusSpeed, SpiBusMode) { } /// From 21f80b717a14d65898f861361df13144b48fda08 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 21 Apr 2023 20:26:45 -0700 Subject: [PATCH 071/141] Add ISpiDevice plus SpiPeripheral cleanup --- .../Displays.Ch1115/Driver/Ch1115.cs | 24 ++++++---- .../Displays.Max7219/Driver/Max7219.cs | 24 ++++++---- .../Displays.Pcd8544/Driver/Pcd8544.cs | 29 ++++++------ .../Samples/Pcd8544_Sample/MeadowApp.cs | 7 +-- .../Displays.Sh110x/Driver/Sh110x.cs | 24 ++++++---- .../Driver/Drivers/Ssd1306.cs | 2 +- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 24 ++++++---- .../Displays.Ssd1327/Driver/Ssd1327.cs | 24 ++++++---- .../Displays.St7565/Driver/St7565.cs | 24 ++++++---- .../Displays.TftSpi/Driver/Drivers/Ili9341.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/Ili9488.cs | 1 - .../Displays.TftSpi/Driver/Drivers/St7789.cs | 5 +-- .../Displays.TftSpi/Driver/TftSpiBase.cs | 26 ++++++----- .../Displays.ePaper/Driver/EPaperMonoBase.cs | 2 +- .../Driver/EPaperTriColorBase.cs | 2 +- .../Displays.ePaper/Driver/ePaperBase.cs | 22 +++++++--- .../Driver/Drivers/Epd5in65f.cs | 2 +- .../Driver/Drivers/Extras/Mcp23x0x.cs | 2 +- .../Driver/Mcp23xxx.cs | 44 ++++++++++++++----- .../ICs.IOExpanders.x74595/Driver/x74595.cs | 27 +++++++++--- .../Leds.Apa102/Driver/Apa102.cs | 26 +++++++++-- .../Driver/Bme280.cs | 26 +++++++++-- .../Driver/Bme280SPI.cs | 11 +++-- .../Driver/Bme68x.cs | 26 +++++++++-- .../Driver/Bme68xSPI.cs | 17 ++++--- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs | 36 ++++++++------- .../Driver/Drivers/Adxl362.cs | 42 ++++++++++++------ .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 10 ++--- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 7 ++- .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 3 +- .../Driver/Lsm303agr.cs | 2 +- .../Driver/Mcp960x.cs | 5 +++ 32 files changed, 352 insertions(+), 176 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs index df29b1ec59..bee8cc75b8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the Ch1115 family of displays. /// - public partial class Ch1115 : IGraphicsDisplay + public partial class Ch1115 : IGraphicsDisplay, ISpiDevice { /// /// The display color mode - 1 bit per pixel monochrome @@ -37,25 +37,33 @@ public partial class Ch1115 : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(375, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; /// /// SPI peripheral object @@ -105,7 +113,7 @@ public Ch1115(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs index 9fcb5e076b..ab8af65604 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Displays /// /// Max7219 LED matrix driver /// - public partial class Max7219 + public partial class Max7219 : ISpiDevice { /// /// Number of digits per Module @@ -35,25 +35,33 @@ public partial class Max7219 /// public int Length => DigitRows * DigitColumns; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(10000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; private readonly ISpiPeripheral spiPeripheral; @@ -91,7 +99,7 @@ public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceCoun /// Display mode of spiPeripheral public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceRows, int deviceColumns, Max7219Mode maxMode = Max7219Mode.Display) { - spiPeripheral = new SpiPeripheral(spiBus, chipselectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipselectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); DigitRows = deviceRows; DigitColumns = deviceColumns * DigitsPerDevice; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs index 2236eac78d..3a41183494 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs @@ -9,13 +9,8 @@ namespace Meadow.Foundation.Displays /// /// Represents a Pcd8544 monochrome display /// - public class Pcd8544 : IGraphicsDisplay + public class Pcd8544 : IGraphicsDisplay, ISpiDevice { - /// - /// Default SPI bus speed - /// - public static Frequency DEFAULT_SPEED = new Frequency(4000, Frequency.UnitType.Kilohertz); - /// /// Display color mode /// @@ -46,25 +41,33 @@ public class Pcd8544 : IGraphicsDisplay /// public bool IsDisplayInverted { get; private set; } = false; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(4000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(4000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; @@ -113,7 +116,7 @@ public Pcd8544(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/MeadowApp.cs index 45fb8973bd..884af1a519 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Samples/Pcd8544_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Displays; using Meadow.Foundation.Graphics; -using System; using System.Threading.Tasks; namespace Displays.Pcd8854_Sample @@ -17,11 +16,9 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var config = new Meadow.Hardware.SpiClockConfiguration(Pcd8544.DEFAULT_SPEED, Meadow.Hardware.SpiClockConfiguration.Mode.Mode0); - var display = new Pcd8544 ( - spiBus: Device.CreateSpiBus(Device.Pins.SCK, Device.Pins.MOSI, Device.Pins.MISO, config), + spiBus: Device.CreateSpiBus(), chipSelectPin: Device.Pins.D01, dcPin: Device.Pins.D00, resetPin: Device.Pins.D02 @@ -52,7 +49,7 @@ void CounterDemo(MicroGraphics graphics) graphics.CurrentFont = new Font12x20(); - while(true) + while (true) { graphics.Clear(); graphics.DrawText(0, 0, $"Count:"); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 8c23724ba6..5e34bf662f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the Sh110x family of displays /// - public abstract partial class Sh110x : IGraphicsDisplay + public abstract partial class Sh110x : IGraphicsDisplay, ISpiDevice { /// /// The display color mode - 1 bit per pixel monochrome @@ -32,25 +32,33 @@ public abstract partial class Sh110x : IGraphicsDisplay /// public int Height { get; protected set; } = 64; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(4000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(4000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; /// /// The connection type (I2C or SPI) @@ -148,7 +156,7 @@ public Sh110x(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Width = width; Height = height; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index c60eaa4572..834b5964a2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -40,7 +40,7 @@ public Ssd1306(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); connectionType = ConnectionType.SPI; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index 59766bee85..5fc9484316 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Displays /// /// Represents the SSD130x family of OLED displays /// - public abstract partial class Ssd130xBase : IGraphicsDisplay + public abstract partial class Ssd130xBase : IGraphicsDisplay, ISpiDevice { /// /// The display color mode @@ -36,28 +36,36 @@ public abstract partial class Ssd130xBase : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(8000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(8000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; /// - /// SSD1306 SPI display + /// SSD130x SPI display /// protected ISpiPeripheral spiPeripheral; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs index 170e2fee4f..46336ff2fe 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provides an interface to the Ssd1327 greyscale OLED display /// - public partial class Ssd1327 : IGraphicsDisplay + public partial class Ssd1327 : IGraphicsDisplay, ISpiDevice { /// /// The display color mode (4 bit per pixel grayscale) @@ -37,25 +37,33 @@ public partial class Ssd1327 : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(10000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; readonly ISpiPeripheral spiPeripheral; readonly IDigitalOutputPort dataCommandPort; @@ -95,7 +103,7 @@ public Ssd1327(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs index 35cd2fff29..a959a3aeb3 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the ST7565 family of displays /// - public partial class St7565 : IGraphicsDisplay + public partial class St7565 : IGraphicsDisplay, ISpiDevice { /// /// The display color mode - 1 bit per pixel monochrome @@ -37,25 +37,33 @@ public partial class St7565 : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(12000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(12000, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; /// /// SPI peripheral object @@ -104,7 +112,7 @@ public St7565(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs index b3d5585d5e..e62fb61d01 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs @@ -12,7 +12,7 @@ public class Ili9341 : TftSpiBase /// /// SPI bus speed /// - protected override Frequency _spiBusSpeed { get; set; } = new Frequency(24000, Frequency.UnitType.Kilohertz); + public override Frequency DefaultSpiBusSpeed => new Frequency(24000, Frequency.UnitType.Kilohertz); /// /// The default display color mode diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs index bc611976d7..e300ce2759 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs @@ -18,7 +18,6 @@ public class Ili9488 : TftSpiBase, IRotatableDisplay /// public override ColorMode SupportedColorModes => ColorMode.Format24bppRgb888; - /// /// Create a new Ili9488 display object /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index 9b129f4656..1e7a5b8557 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -22,13 +22,12 @@ public class St7789 : TftSpiBase, IRotatableDisplay /// /// SPI bus speed /// - protected override Frequency _spiBusSpeed { get; set; } = new Frequency(48000, Frequency.UnitType.Kilohertz); + public override Frequency DefaultSpiBusSpeed => new Frequency(48000, Frequency.UnitType.Kilohertz); /// /// The SPI bus mode for the device /// - protected override SpiClockConfiguration.Mode _piBusMode { get; set; } = SpiClockConfiguration.Mode.Mode3; - + public override SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode3; private byte rowStart, rowStart2; private byte columnStart, columnStart2; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 1072241276..a8568115c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Displays { - public abstract partial class TftSpiBase : IGraphicsDisplay + public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiDevice { //these displays typically support 16 & 18 bit, some also include 8, 9, 12 and/or 24 bit color @@ -46,31 +46,33 @@ public abstract partial class TftSpiBase : IGraphicsDisplay /// public IPixelBuffer PixelBuffer => imageBuffer; + /// + /// The default SPI bus speed for the device + /// + public virtual Frequency DefaultSpiBusSpeed => new Frequency(12000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiDisplay.BusSpeed = value; + get => spiDisplay.BusSpeed; + set => spiDisplay.BusSpeed = value; } + /// - /// The SPI bus speed for the device + /// The default SPI bus mode for the device /// - protected virtual Frequency _spiBusSpeed { get; set; } = new Frequency(12000, Frequency.UnitType.Kilohertz); + public virtual SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiDisplay.BusMode = value; + get => spiDisplay.BusMode; + set => spiDisplay.BusMode = value; } - /// - /// The SPI bus mode for the device - /// - protected virtual SpiClockConfiguration.Mode _piBusMode { get; set; } = SpiClockConfiguration.Mode.Mode0; /// /// The data command port @@ -170,7 +172,7 @@ public TftSpiBase(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiDisplay = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiDisplay = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); CreateBuffer(colorMode, nativeWidth = width, nativeHeight = height); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs index 5ca7a11458..375222d28d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs @@ -92,7 +92,7 @@ public EPaperMonoBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bppV(width, height); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs index 3cd05275f8..91db59c687 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs @@ -103,7 +103,7 @@ public EPaperTriColorBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); this.width = width; this.height = height; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs index 66a8c050ff..08929c434c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs @@ -7,27 +7,35 @@ namespace Meadow.Foundation.Displays /// /// Represents a base ePaper display driver /// - public abstract class EPaperBase + public abstract class EPaperBase : ISpiDevice { + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(375, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; /// /// The command buffer diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs index 773a6e6e1b..443f99c5ca 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs @@ -85,7 +85,7 @@ public Epd5in65f(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new BufferIndexed4(Width, Height); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs index 84ab32a892..e5c79903e1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.cs @@ -49,7 +49,7 @@ protected Mcp23x0x(II2cBus i2cBus, byte address = 32, IDigitalInputPort interrup /// optional interupt port, needed for input interrupts /// Optional Meadow output port used to reset the mcp expander protected Mcp23x0x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - base(new SpiMcpDeviceComms(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms + base(spiBus, chipSelectPort, interruptPort, resetPort) { Pins = new PinDefinitions(this) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index 385b0f3762..20e9bd6c10 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// Provide an interface to connect to a MCP2xxx port expander /// - abstract partial class Mcp23xxx : IDigitalInputOutputController + abstract partial class Mcp23xxx : IDigitalInputOutputController, ISpiDevice { /// /// Raised when the value of any pin configured for input interrupts changes @@ -24,25 +24,43 @@ abstract partial class Mcp23xxx : IDigitalInputOutputController /// public abstract int NumberOfPins { get; } + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => _defaultSpiBusSpeed; + private static Frequency _defaultSpiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public static Frequency SpiBusSpeed { get; } = new Frequency(375, Frequency.UnitType.Kilohertz); + public Frequency SpiBusSpeed + { + get => (mcpDevice as SpiMcpDeviceComms).BusSpeed; + set => (mcpDevice as SpiMcpDeviceComms).BusSpeed = value; + } /// - /// The SPI bus mode for the device + /// The default SPI bus mode for the device /// - public static SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode DefaultSpiBusMode => _defaultSpiBusMode; + private static SpiClockConfiguration.Mode _defaultSpiBusMode = SpiClockConfiguration.Mode.Mode0; + /// + /// The SPI bus mode for the device + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => (mcpDevice as SpiMcpDeviceComms).BusMode; + set => (mcpDevice as SpiMcpDeviceComms).BusMode = value; + } private readonly IMcpDeviceComms mcpDevice; private readonly IDigitalInputPort interruptPort; private readonly IDigitalOutputPort resetPort; private readonly IDictionary inputPorts; - // state - byte ioDirA, ioDirB; - byte olatA, olatB; + private byte ioDirA, ioDirB; + private byte olatA, olatB; /// /// object for using lock() to do thread sync @@ -58,7 +76,7 @@ abstract partial class Mcp23xxx : IDigitalInputOutputController /// Optional Meadow output port used to reset the mcp expander protected Mcp23xxx(II2cBus i2cBus, byte address, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - this(new I2cMcpDeviceComms(i2cBus, address), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms + this(new I2cMcpDeviceComms(i2cBus, address), interruptPort, resetPort) { } /// @@ -72,8 +90,10 @@ protected Mcp23xxx(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - this(new SpiMcpDeviceComms(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode), interruptPort, resetPort) // use the internal constructor that takes an IMcpDeviceComms - { } + this(new SpiMcpDeviceComms(spiBus, chipSelectPort, _defaultSpiBusSpeed, _defaultSpiBusMode), interruptPort, resetPort) + { + + } /// /// Mcp23xxx base class @@ -86,7 +106,7 @@ internal Mcp23xxx(IMcpDeviceComms device, IDigitalOutputPort resetPort = null) { if (resetPort != null) - { //disable and enable the mcp before initializing + { this.resetPort = resetPort; ResetMcp(); } @@ -101,6 +121,8 @@ internal Mcp23xxx(IMcpDeviceComms device, } inputPorts = new Dictionary(); + + IByteCommunications comms; mcpDevice = device; Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs index eefd4916df..1dc61f0d24 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs @@ -13,22 +13,40 @@ namespace Meadow.Foundation.ICs.IOExpanders /// Control the outputs from a 74595 shift register (or a chain of shift registers) /// using a SPI interface. /// - public partial class x74595 : IDigitalOutputController + public partial class x74595 : IDigitalOutputController, ISpiDevice { /// /// The pin definitions /// public PinDefinitions Pins { get; } + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + public Frequency SpiBusSpeed + { + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// - public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode SpiBusMode + { + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; + } /// /// Number of chips required to implement this ShiftRegister. @@ -62,14 +80,13 @@ public x74595(ISpiBus spiBus, IPin pinChipSelect, int pins = 8) { Pins = new PinDefinitions(this); - // if ((pins > 0) && ((pins % 8) == 0)) if (pins == 8) { numberOfChips = pins / 8; latchData = new byte[numberOfChips]; - spiPeripheral = new SpiPeripheral(spiBus, pinChipSelect?.CreateDigitalOutputPort(), SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, pinChipSelect?.CreateDigitalOutputPort(), DefaultSpiBusSpeed, DefaultSpiBusMode); } else { diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs index f930b4f978..f6b2f955ec 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs @@ -8,17 +8,35 @@ namespace Meadow.Foundation.Leds /// Represents APA102/Dotstar Led(s). /// /// Based on logic from https://github.com/adafruit/Adafruit_CircuitPython_DotStar/blob/master/adafruit_dotstar.py - public partial class Apa102 : IApa102 + public partial class Apa102 : IApa102, ISpiDevice { + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(6000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public Frequency SpiBusSpeed { get; set; } = new Frequency(6000, Frequency.UnitType.Kilohertz); + public Frequency SpiBusSpeed + { + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// - public SpiClockConfiguration.Mode SpiBusMode { get; set; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode SpiBusMode + { + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; + } /// /// SpiPeripheral object @@ -78,7 +96,7 @@ public Apa102(ISpiBus spiBus, IPin chipSelectPin, int numberOfLeds, PixelOrder p /// SPI chip select port (optional) public Apa102(ISpiBus spiBus, int numberOfLeds, PixelOrder pixelOrder = PixelOrder.BGR, IDigitalOutputPort chipSelectPort = null) { - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); this.numberOfLeds = numberOfLeds; endHeaderSize = this.numberOfLeds / 16; Brightness = 1.0f; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index f85dfed0bd..570fb80a4f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -36,7 +36,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Bme280 : PollingSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure)>, - ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor + ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiDevice { /// /// Temperature changed event @@ -109,15 +109,33 @@ public partial class Bme280 : /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + public Frequency SpiBusSpeed + { + get => ((Bme280Spi)bme280Comms).SpiPeripheral.BusSpeed; + set => ((Bme280Spi)bme280Comms).SpiPeripheral.BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// - public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode SpiBusMode + { + get => ((Bme280Spi)bme280Comms).SpiPeripheral.BusMode; + set => ((Bme280Spi)bme280Comms).SpiPeripheral.BusMode = value; + } /// /// Initializes a new instance of the BME280 class @@ -147,7 +165,7 @@ public Bme280(ISpiBus spiBus, IPin chipSelectPin) : /// The port for the chip select pin public Bme280(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) { - bme280Comms = new Bme280Spi(spiBus, SpiBusSpeed, SpiBusMode, chipSelectPort); + bme280Comms = new Bme280Spi(spiBus, DefaultSpiBusSpeed, DefaultSpiBusMode, chipSelectPort); configuration = new Configuration(); // here to avoid the warning Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs index 1712a10c1e..20249a5bb0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs @@ -6,16 +6,19 @@ namespace Meadow.Foundation.Sensors.Atmospheric { internal class Bme280Spi : Bme280Comms { - ISpiPeripheral spiPeripheral; + /// + /// The SPI peripheral object + /// + internal ISpiPeripheral SpiPeripheral; internal Bme280Spi(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - spiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode); + SpiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode); } public override void ReadRegisters(byte startRegister, Span readBuffer) { - spiPeripheral.ReadRegister(startRegister, readBuffer); + SpiPeripheral.ReadRegister(startRegister, readBuffer); // skip past the byte where we clocked out the register address for (int i = 1; i < readBuffer.Length; i++) @@ -26,7 +29,7 @@ public override void ReadRegisters(byte startRegister, Span readBuffer) public override void WriteRegister(Register register, byte value) { - spiPeripheral.WriteRegister(((byte)register), value); + SpiPeripheral.WriteRegister((byte)register, value); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index c0a904341c..391b1d4e49 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -21,7 +21,7 @@ public abstract partial class Bme68x : RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)>, - ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor + ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiDevice { /// /// Raised when the temperature value changes @@ -155,15 +155,33 @@ public bool GasConversionIsEnabled } bool gasConversionIsEnabled = false; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public Frequency SpiBusSpeed { get; } = new Frequency(10, Frequency.UnitType.Megahertz); + public Frequency SpiBusSpeed + { + get => ((Bme68xSPI)sensor).SpiPeripheral.BusSpeed; + set => ((Bme68xSPI)sensor).SpiPeripheral.BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// - public SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode SpiBusMode + { + get => ((Bme68xSPI)sensor).SpiPeripheral.BusMode; + set => ((Bme68xSPI)sensor).SpiPeripheral.BusMode = value; + } /// /// Communication bus used to read and write to the BME68x sensor @@ -240,7 +258,7 @@ protected Bme68x(ISpiBus spiBus, IPin chipSelectPin) : /// The BMP68x configuration (optional) protected Bme68x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, Configuration? configuration = null) { - sensor = new Bme68xSPI(spiBus, SpiBusSpeed, SpiBusMode, chipSelectPort); + sensor = new Bme68xSPI(spiBus, DefaultSpiBusSpeed, DefaultSpiBusMode, chipSelectPort); this.configuration = configuration ?? new Configuration(); byte value = sensor.ReadRegister((byte)Registers.STATUS); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs index 84fbdba3a1..b0467dcb74 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs @@ -27,13 +27,16 @@ internal enum SpiRegisterPage : byte Page1 = 0x00, } - ISpiPeripheral spiPeripheral; + /// + /// The SPI peripheral object + /// + internal ISpiPeripheral SpiPeripheral; SpiRegisterPage currentPage = SpiRegisterPage.Page1; internal Bme68xSPI(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - spiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode, 32, 32); + SpiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode, 32, 32); } public override byte ReadRegister(byte address) @@ -43,7 +46,7 @@ public override byte ReadRegister(byte address) //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return spiPeripheral.ReadRegister(address); + return SpiPeripheral.ReadRegister(address); } public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) @@ -53,7 +56,7 @@ public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = Byte //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return spiPeripheral.ReadRegisterAsUShort(address, order); + return SpiPeripheral.ReadRegisterAsUShort(address, order); } public override void ReadRegister(byte startRegister, Span readBuffer) @@ -63,7 +66,7 @@ public override void ReadRegister(byte startRegister, Span readBuffer) //adjust register for paging if (startRegister > 0x7F) { startRegister -= 0x7F; } - spiPeripheral.ReadRegister(startRegister, readBuffer); + SpiPeripheral.ReadRegister(startRegister, readBuffer); return; } @@ -75,7 +78,7 @@ public override void WriteRegister(byte register, byte value) //adjust register for paging if (register > 0x7F) { register -= 0x7F; } - spiPeripheral.WriteRegister(register, value); + SpiPeripheral.WriteRegister(register, value); } void SetPageForRegister(byte register) @@ -86,7 +89,7 @@ void SetPageForRegister(byte register) //swap the page currentPage = (currentPage == SpiRegisterPage.Page0) ? SpiRegisterPage.Page1 : SpiRegisterPage.Page0; //write the page to the status register - spiPeripheral.WriteRegister(0x73, (byte)currentPage); + SpiPeripheral.WriteRegister(0x73, (byte)currentPage); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs index cc4c825da4..db48d2c9c4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs @@ -6,27 +6,35 @@ namespace Meadow.Foundation.Sensors.Gnss { - public partial class NeoM8 + public partial class NeoM8 : ISpiDevice { + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => new Frequency(375, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => _spiBusSpeed; - set => _spiBusSpeed = spiPeripheral.BusSpeed = value; + get => spiPeripheral.BusSpeed; + set => spiPeripheral.BusSpeed = value; } - Frequency _spiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => _piBusMode; - set => _piBusMode = spiPeripheral.BusMode = value; + get => spiPeripheral.BusMode; + set => spiPeripheral.BusMode = value; } - SpiClockConfiguration.Mode _piBusMode = SpiClockConfiguration.Mode.Mode0; readonly ISpiPeripheral spiPeripheral; @@ -43,7 +51,7 @@ public NeoM8(ISpiBus spiBus, ResetPort = resetPort; PulsePerSecondPort = ppsPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); _ = InitializeSpi(); } @@ -55,17 +63,11 @@ public NeoM8(ISpiBus spiBus, IPin chipSelectPin = null, IPin resetPin = null, IP { var chipSelectPort = chipSelectPin.CreateDigitalOutputPort(); - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, SpiBusSpeed, SpiBusMode); + spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); - if (resetPin != null) - { - resetPin.CreateDigitalOutputPort(true); - } + resetPin?.CreateDigitalOutputPort(true); - if (ppsPin != null) - { - ppsPin.CreateDigitalInputPort(InterruptMode.EdgeRising, ResistorMode.InternalPullDown); - } + ppsPin?.CreateDigitalInputPort(InterruptMode.EdgeRising, ResistorMode.InternalPullDown); _ = InitializeSpi(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index 14ddddf282..8cb6781115 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -24,7 +24,7 @@ namespace Meadow.Foundation.Sensors.Motion /// public partial class Adxl362 : ByteCommsSensorBase<(Acceleration3D? Acceleration3D, Units.Temperature? Temperature)>, - IAccelerometer, ITemperatureSensor + IAccelerometer, ITemperatureSensor, ISpiDevice { /// /// Raised when the acceleration value changes @@ -59,15 +59,35 @@ public partial class Adxl362 /// public Units.Temperature? Temperature => Conditions.Temperature; + /// + /// The default SPI bus speed for the device + /// + public Frequency DefaultSpiBusSpeed => _defaultSpiBusSpeed; + private static Frequency _defaultSpiBusSpeed = new Frequency(8000, Frequency.UnitType.Kilohertz); + /// /// The SPI bus speed for the device /// - public static Frequency SpiBusSpeed { get; } = new Frequency(8, Frequency.UnitType.Megahertz); + public Frequency SpiBusSpeed + { + get => ((SpiPeripheral)Peripheral).BusSpeed; + set => ((SpiPeripheral)Peripheral).BusSpeed = value; + } + + /// + /// The default SPI bus mode for the device + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => _defaultSpiBusMode; + private static SpiClockConfiguration.Mode _defaultSpiBusMode = SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// - public static SpiClockConfiguration.Mode SpiBusMode { get; } = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode SpiBusMode + { + get => ((SpiPeripheral)Peripheral).BusMode; + set => ((SpiPeripheral)Peripheral).BusMode = value; + } /// /// Indicate of data is ready to be read @@ -98,8 +118,7 @@ public bool FIFOReady } /// - /// Indicate if there are at least the desired number - /// of samples in the FIFO buffer + /// Indicate if there are at least the desired number of samples in the FIFO buffer /// public bool FIFOWatermark { @@ -128,8 +147,7 @@ public bool FIFOOverrun } /// - /// Indicate if any activity has been detected over the - /// specified threshold + /// Indicate if any activity has been detected over the specified threshold /// public bool ActivityDetected { @@ -143,8 +161,7 @@ public bool ActivityDetected } /// - /// Indicate if the sensor has detected inactivity or a - /// free fall condition + /// Indicate if the sensor has detected inactivity or a free fall condition /// public bool InactivityDetected { @@ -223,9 +240,8 @@ public byte ActivityInactivityControl } /// - /// Set the value of the self test register. Setting this to true will put - /// the device into self test mode, setting this to false will turn off the - /// self test + /// Set the value of the self test register - setting this to true will put the device into + /// self test mode, setting this to false will turn off the self test /// public bool SelfTest { @@ -264,7 +280,7 @@ public byte FilterControl /// Spi Bus object /// Chip select pin public Adxl362(ISpiBus spiBus, IPin chipSelect) - : base(spiBus, chipSelect.CreateDigitalOutputPort(), SpiBusSpeed, SpiBusMode) + : base(spiBus, chipSelect.CreateDigitalOutputPort(), _defaultSpiBusSpeed, _defaultSpiBusMode) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index 8f2c129d7c..56c3ee9081 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a BMI270 interial measurement unit (IMU) /// public partial class Bmi270 : - ByteCommsSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)> + PollingSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)> { /// /// Event raised when linear acceleration changes @@ -53,7 +53,7 @@ public partial class Bmi270 : /// public AngularVelocityRange CurrentAngularVelocityRange { get; private set; } - readonly II2cPeripheral i2cPeripheral; + readonly II2cPeripheral i2cPeripheral; /// /// Create a new Bmi270 instance @@ -92,7 +92,7 @@ void Initialize() //upload a configuration file to register INIT_DATA ushort index = 0; ushort length = 128; - byte[] dmaLocation = new byte[2]; + byte[] dmaLocation = new byte[2]; while (index < bmi270_config_file.Length) //8096 { /* Store 0 to 3 bits of address in first byte */ @@ -240,7 +240,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce tempC = -41 + (tempRaw - 0x8000) * degreePerByte; } - if(tempRaw == 0x8000) + if (tempRaw == 0x8000) { //means we have an invalid temperature reading conditions.Temperature = null; } @@ -258,7 +258,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce /// The power mode public void SetPowerMode(PowerMode powerMode) { - switch(powerMode) + switch (powerMode) { case PowerMode.Suspend: i2cPeripheral.WriteRegister(PWR_CTRL, 0x00); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index 00a064790a..5d1770bf81 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -47,21 +47,20 @@ public partial class Hmc5883 : ByteCommsSensorBase /// Gain /// Measuring mode /// Output rate - /// Samples amount + /// Sample amount /// Measurement configuration public Hmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Default, GainLevels gain = GainLevels.Gain1090, MeasuringModes measuringMode = MeasuringModes.Continuous, DataOutputRates outputRate = DataOutputRates.Rate15, - SampleAmounts samplesAmount = SampleAmounts.One, + SampleAmounts sampleAmount = SampleAmounts.One, MeasurementConfigurations measurementConfig = MeasurementConfigurations.Normal) : base(i2cBus, address) { - this.gain = (byte)gain; this.measuringMode = (byte)measuringMode; this.outputRate = (byte)outputRate; - this.sampleAmount = (byte)samplesAmount; + this.sampleAmount = (byte)sampleAmount; this.measurementConfig = (byte)measurementConfig; Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 610ab626e4..8bfd7fd196 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -10,8 +10,7 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a LIS2MDL is a low-power, high-performance 3-axis magnetometer from STMicroelectronics /// with a fixed full range of ±50 gauss and a 16-bit resolution /// - public partial class Lis2Mdl : - ByteCommsSensorBase, IMagnetometer + public partial class Lis2Mdl : PollingSensorBase, IMagnetometer { /// /// Event raised when magnetic field changes diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index a5aca9f309..5131139e08 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a LSM303AGR is a system-in-package (SiP) that combines a 3D linear acceleration sensor and a 3D magnetic sensor /// public partial class Lsm303agr : - ByteCommsSensorBase<(Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D)>, IMagnetometer, IAccelerometer + PollingSensorBase<(Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D)>, IMagnetometer, IAccelerometer { /// /// Event raised when acceleration changes diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs index 8cd86ca51e..18a428809f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs @@ -48,6 +48,11 @@ public abstract partial class Mcp960x : ByteCommsSensorBase<(Units.Temperature? public Mcp960x(II2cBus i2cBus, byte address) : base(i2cBus, address) { + if (Peripheral == null) + { + throw new NullReferenceException("Mcp960x peripheral did not initialize"); + } + Peripheral.WriteRegister(DEVICECONFIG, 0x80); } From 341583c342ae1af469c54d7a3c14200af962bd8d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 21 Apr 2023 20:43:13 -0700 Subject: [PATCH 072/141] Remove bespoke bus abstraction in Mcp23xxx --- .../Driver/Mcp23xxx.I2cMcpDeviceComms.cs | 15 ------- .../Driver/Mcp23xxx.IMcpDeviceComms.cs | 15 ------- .../Driver/Mcp23xxx.SpiMcpDeviceComms.cs | 19 -------- .../Driver/Mcp23xxx.cs | 45 +++++++++---------- 4 files changed, 20 insertions(+), 74 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.I2cMcpDeviceComms.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.IMcpDeviceComms.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.I2cMcpDeviceComms.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.I2cMcpDeviceComms.cs deleted file mode 100644 index 8d3715adaf..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.I2cMcpDeviceComms.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Meadow.Hardware; - -namespace Meadow.Foundation.ICs.IOExpanders -{ - public partial class Mcp23xxx - { - internal class I2cMcpDeviceComms : I2cPeripheral, IMcpDeviceComms - { - public I2cMcpDeviceComms(II2cBus i2cBus, byte peripheralAddress) - : base(i2cBus, peripheralAddress) - { - } - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.IMcpDeviceComms.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.IMcpDeviceComms.cs deleted file mode 100644 index e40b026ff6..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.IMcpDeviceComms.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace Meadow.Foundation.ICs.IOExpanders -{ - public partial class Mcp23xxx - { - internal interface IMcpDeviceComms - { - byte ReadRegister(byte address); - void WriteRegister(byte address, byte value); - - void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian); - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs deleted file mode 100644 index 1a3c9fb99a..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.SpiMcpDeviceComms.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Meadow.Hardware; -using Meadow.Units; - -namespace Meadow.Foundation.ICs.IOExpanders -{ - public partial class Mcp23xxx - { - internal class SpiMcpDeviceComms : SpiPeripheral, IMcpDeviceComms - { - public SpiMcpDeviceComms(ISpiBus spiBus, - IDigitalOutputPort chipSelectPort, - Frequency busSpeed, - SpiClockConfiguration.Mode busMode) - : base(spiBus, chipSelectPort, busSpeed, busMode) - { - } - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index 20e9bd6c10..d475fd0948 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -27,37 +27,35 @@ abstract partial class Mcp23xxx : IDigitalInputOutputController, ISpiDevice /// /// The default SPI bus speed for the device /// - public Frequency DefaultSpiBusSpeed => _defaultSpiBusSpeed; - private static Frequency _defaultSpiBusSpeed = new Frequency(375, Frequency.UnitType.Kilohertz); + public Frequency DefaultSpiBusSpeed => new Frequency(375, Frequency.UnitType.Kilohertz); /// /// The SPI bus speed for the device /// public Frequency SpiBusSpeed { - get => (mcpDevice as SpiMcpDeviceComms).BusSpeed; - set => (mcpDevice as SpiMcpDeviceComms).BusSpeed = value; + get => (mcpDevice as ISpiPeripheral).BusSpeed; + set => (mcpDevice as ISpiPeripheral).BusSpeed = value; } /// /// The default SPI bus mode for the device /// - public SpiClockConfiguration.Mode DefaultSpiBusMode => _defaultSpiBusMode; - private static SpiClockConfiguration.Mode _defaultSpiBusMode = SpiClockConfiguration.Mode.Mode0; + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; /// /// The SPI bus mode for the device /// public SpiClockConfiguration.Mode SpiBusMode { - get => (mcpDevice as SpiMcpDeviceComms).BusMode; - set => (mcpDevice as SpiMcpDeviceComms).BusMode = value; + get => (mcpDevice as ISpiPeripheral).BusMode; + set => (mcpDevice as ISpiPeripheral).BusMode = value; } - private readonly IMcpDeviceComms mcpDevice; - private readonly IDigitalInputPort interruptPort; - private readonly IDigitalOutputPort resetPort; - private readonly IDictionary inputPorts; + private readonly IByteCommunications mcpDevice; + private IDigitalInputPort interruptPort; + private IDigitalOutputPort resetPort; + private IDictionary inputPorts; private byte ioDirA, ioDirB; private byte olatA, olatB; @@ -75,9 +73,11 @@ public SpiClockConfiguration.Mode SpiBusMode /// Optional interupt port, needed for input interrupts (pins 1-8) /// Optional Meadow output port used to reset the mcp expander protected Mcp23xxx(II2cBus i2cBus, byte address, - IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) : - this(new I2cMcpDeviceComms(i2cBus, address), interruptPort, resetPort) - { } + IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) + { + mcpDevice = new I2cPeripheral(i2cBus, address); + Initialize(interruptPort, resetPort); + } /// /// Mcpxxx base class contructor @@ -89,20 +89,18 @@ protected Mcp23xxx(II2cBus i2cBus, byte address, protected Mcp23xxx(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, - IDigitalOutputPort resetPort = null) : - this(new SpiMcpDeviceComms(spiBus, chipSelectPort, _defaultSpiBusSpeed, _defaultSpiBusMode), interruptPort, resetPort) + IDigitalOutputPort resetPort = null) { - + mcpDevice = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + Initialize(interruptPort, resetPort); } /// - /// Mcp23xxx base class + /// Initialize /// - /// /// optional interupt port, needed for input interrupts (pins 1-8) /// Optional Meadow output port used to reset the mcp expander - internal Mcp23xxx(IMcpDeviceComms device, - IDigitalInputPort interruptPort = null, + void Initialize(IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) { if (resetPort != null) @@ -122,9 +120,6 @@ internal Mcp23xxx(IMcpDeviceComms device, inputPorts = new Dictionary(); - IByteCommunications comms; - mcpDevice = device; - Initialize(); } From c733b8b00756c4c1c4843c78844b24dc7224d1bc Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 21 Apr 2023 20:49:37 -0700 Subject: [PATCH 073/141] Consolidate Initialize methods --- .../Driver/Mcp23xxx.cs | 100 ++++++++---------- 1 file changed, 46 insertions(+), 54 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index d475fd0948..c43a49853a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -96,19 +96,13 @@ protected Mcp23xxx(ISpiBus spiBus, } /// - /// Initialize + /// Initializes the Mcp23xxx /// /// optional interupt port, needed for input interrupts (pins 1-8) /// Optional Meadow output port used to reset the mcp expander void Initialize(IDigitalInputPort interruptPort = null, - IDigitalOutputPort resetPort = null) + IDigitalOutputPort resetPort = null) { - if (resetPort != null) - { - this.resetPort = resetPort; - ResetMcp(); - } - // TODO: more interrupt // check the interrupt mode and make sure it's correct // raise an exception if not. also, doc in constructor what we expect from an interrupt port @@ -118,9 +112,52 @@ void Initialize(IDigitalInputPort interruptPort = null, interruptPort.Changed += InterruptPortChanged; } + if (resetPort != null) + { + this.resetPort = resetPort; + ResetMcp(); + } + inputPorts = new Dictionary(); - Initialize(); + mcpDevice.WriteRegister(MapRegister(Registers.IODIR_IODirection, PortBank.A), 0xFF); + mcpDevice.WriteRegister(MapRegister(Registers.GPIO, PortBank.A), 0x00); + mcpDevice.WriteRegister(MapRegister(Registers.IPOL_InputPolarity, PortBank.A), 0x00); + mcpDevice.WriteRegister(MapRegister(Registers.GPINTEN_InterruptOnChange), 0x00); + + if (NumberOfPins == 16) + { //write the following registers as well (assume device is interleaving) + mcpDevice.WriteRegister(MapRegister(Registers.IODIR_IODirection, PortBank.B), 0xFF); + mcpDevice.WriteRegister(MapRegister(Registers.GPIO, PortBank.B), 0x00); + mcpDevice.WriteRegister(MapRegister(Registers.IPOL_InputPolarity, PortBank.B), 0x00); + mcpDevice.WriteRegister(MapRegister(Registers.GPINTEN_InterruptOnChange, PortBank.B), 0x00); + } + + // save our state + ioDirA = ioDirB = 0xFF; + olatA = olatB = 0x00; + + if (interruptPort != null) + { + bool intHigh = true; + + if (interruptPort.Resistor == ResistorMode.InternalPullUp || + interruptPort.Resistor == ResistorMode.ExternalPullUp) + { + intHigh = false; + } + + byte iocon = 0x00; + iocon = BitHelpers.SetBit(iocon, 0x01, intHigh); //set interrupt pin to active high (true), low (false) + iocon = BitHelpers.SetBit(iocon, 0x02, false); //don't set interrupt to open drain (should be the default) + + mcpDevice.WriteRegister(MapRegister(Registers.IOCON_IOConfiguration), iocon); + + if (NumberOfPins == 16) + { + mcpDevice.WriteRegister(MapRegister(Registers.IOCON_IOConfiguration, PortBank.B), iocon); + } + } } /// @@ -166,51 +203,6 @@ private void InterruptPortChanged(object sender, DigitalPortResult e) InputChanged?.Invoke(this, new IOExpanderInputChangedEventArgs(interruptFlag, (ushort)(currentStatesB << 8 | currentStates))); } - /// - /// Initializes the Mcp23xxx - /// - protected virtual void Initialize() - { - mcpDevice.WriteRegister(MapRegister(Registers.IODIR_IODirection, PortBank.A), 0xFF); - mcpDevice.WriteRegister(MapRegister(Registers.GPIO, PortBank.A), 0x00); - mcpDevice.WriteRegister(MapRegister(Registers.IPOL_InputPolarity, PortBank.A), 0x00); - mcpDevice.WriteRegister(MapRegister(Registers.GPINTEN_InterruptOnChange), 0x00); - - if (NumberOfPins == 16) - { //write the following registers as well (assume device is interleaving) - mcpDevice.WriteRegister(MapRegister(Registers.IODIR_IODirection, PortBank.B), 0xFF); - mcpDevice.WriteRegister(MapRegister(Registers.GPIO, PortBank.B), 0x00); - mcpDevice.WriteRegister(MapRegister(Registers.IPOL_InputPolarity, PortBank.B), 0x00); - mcpDevice.WriteRegister(MapRegister(Registers.GPINTEN_InterruptOnChange, PortBank.B), 0x00); - } - - // save our state - ioDirA = ioDirB = 0xFF; - olatA = olatB = 0x00; - - if (interruptPort != null) - { - bool intHigh = true; - - if (interruptPort.Resistor == ResistorMode.InternalPullUp || - interruptPort.Resistor == ResistorMode.ExternalPullUp) - { - intHigh = false; - } - - byte iocon = 0x00; - iocon = BitHelpers.SetBit(iocon, 0x01, intHigh); //set interrupt pin to active high (true), low (false) - iocon = BitHelpers.SetBit(iocon, 0x02, false); //don't set interrupt to open drain (should be the default) - - mcpDevice.WriteRegister(MapRegister(Registers.IOCON_IOConfiguration), iocon); - - if (NumberOfPins == 16) - { - mcpDevice.WriteRegister(MapRegister(Registers.IOCON_IOConfiguration, PortBank.B), iocon); - } - } - } - /// /// Checks if a pin exists on the Mcpxxxxx /// From 7458bbd744090a22d24ea6f981c513af6cfcbea1 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Sat, 22 Apr 2023 09:47:25 -0500 Subject: [PATCH 074/141] Create develop-ci.yml --- .github/workflows/develop-ci.yml | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/develop-ci.yml diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml new file mode 100644 index 0000000000..c29af0d9ba --- /dev/null +++ b/.github/workflows/develop-ci.yml @@ -0,0 +1,45 @@ +name: Develop Build + +on: + workflow_dispatch: + push: + branches: [ develop ] + +jobs: + build: + + runs-on: windows-latest + + steps: + - name: Checkout Meadow.Contracts + uses: actions/checkout@v3 + with: + repository: WildernessLabs/Meadow.Contracts + path: Meadow.Contracts + + - name: Checkout Meadow.Logging + uses: actions/checkout@v3 + with: + repository: WildernessLabs/Meadow.Logging + path: Meadow.Logging + + - name: Checkout Meadow.Units + uses: actions/checkout@v3 + with: + repository: WildernessLabs/Meadow.Units + path: Meadow.Units + + - name: Checkout Meadow.Foundation + uses: actions/checkout@v3 + with: + path: Meadow.Foundation + ref: develop + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v1 + with: + dotnet-version: + 6.0.x + + - name: Build Meadow.Contracts + run: dotnet build -c Release Meadow.Foundation/Source/Meadow.Foundation.sln From 04a7512da9290b4a61cded5a4e75cd5e6f9bcb99 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Sat, 22 Apr 2023 11:03:32 -0500 Subject: [PATCH 075/141] Update develop-ci.yml --- .github/workflows/develop-ci.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml index c29af0d9ba..cce29bf9f8 100644 --- a/.github/workflows/develop-ci.yml +++ b/.github/workflows/develop-ci.yml @@ -29,6 +29,18 @@ jobs: repository: WildernessLabs/Meadow.Units path: Meadow.Units + - name: Checkout Meadow.Core + uses: actions/checkout@v3 + with: + repository: WildernessLabs/Meadow.Core + path: Meadow.Core + + - name: Checkout MQTTnet + uses: actions/checkout@v3 + with: + repository: WildernessLabs/MQTTnet + path: MQTTnet + - name: Checkout Meadow.Foundation uses: actions/checkout@v3 with: @@ -41,5 +53,5 @@ jobs: dotnet-version: 6.0.x - - name: Build Meadow.Contracts + - name: Build Meadow Foundation run: dotnet build -c Release Meadow.Foundation/Source/Meadow.Foundation.sln From f0a60d747f4ae3e6e22f88fc67d84c63197cbbf1 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Sat, 22 Apr 2023 11:08:05 -0500 Subject: [PATCH 076/141] adding modbus to the CI Action --- .github/workflows/develop-ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml index cce29bf9f8..1c2703bf8c 100644 --- a/.github/workflows/develop-ci.yml +++ b/.github/workflows/develop-ci.yml @@ -41,6 +41,12 @@ jobs: repository: WildernessLabs/MQTTnet path: MQTTnet + - name: Checkout Meadow.Modbus + uses: actions/checkout@v3 + with: + repository: WildernessLabs/Meadow.Modbus + path: Meadow.Modbus + - name: Checkout Meadow.Foundation uses: actions/checkout@v3 with: From 34a014e00f3c5d6a0de7382a7072e410de485cf7 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Sat, 22 Apr 2023 11:12:22 -0500 Subject: [PATCH 077/141] CI build updated to .NET 7 --- .github/workflows/develop-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml index 1c2703bf8c..e80a071757 100644 --- a/.github/workflows/develop-ci.yml +++ b/.github/workflows/develop-ci.yml @@ -57,7 +57,7 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: - 6.0.x + 7.0.x - name: Build Meadow Foundation run: dotnet build -c Release Meadow.Foundation/Source/Meadow.Foundation.sln From 47e30e567fdbbedbb144ab4de3ece0eb1b918dd5 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Sat, 22 Apr 2023 12:03:21 -0500 Subject: [PATCH 078/141] CI build should use `develop` branches, not `main` --- .github/workflows/develop-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml index e80a071757..963d6437d2 100644 --- a/.github/workflows/develop-ci.yml +++ b/.github/workflows/develop-ci.yml @@ -16,24 +16,28 @@ jobs: with: repository: WildernessLabs/Meadow.Contracts path: Meadow.Contracts + ref: develop - name: Checkout Meadow.Logging uses: actions/checkout@v3 with: repository: WildernessLabs/Meadow.Logging path: Meadow.Logging + ref: develop - name: Checkout Meadow.Units uses: actions/checkout@v3 with: repository: WildernessLabs/Meadow.Units path: Meadow.Units + ref: develop - name: Checkout Meadow.Core uses: actions/checkout@v3 with: repository: WildernessLabs/Meadow.Core path: Meadow.Core + ref: develop - name: Checkout MQTTnet uses: actions/checkout@v3 From 1b66303d4265b028782bcae86d45225c02f64402 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 14:30:39 -0700 Subject: [PATCH 079/141] Remove unessesary Task.Run calls and async decorations --- .../Communications/I2cPeripheral.cs | 39 ++-- .../PollingSensorBase.cs | 15 +- .../Sensors/Buttons/PushButton.cs | 4 +- .../Driver/Emc2101.cs | 51 +++--- .../Driver/AdafruitMPRLS.cs | 13 +- .../Driver/Bh1900Nux.cs | 20 +- .../Driver/Bme280.cs | 171 +++++------------- .../Driver/Bme68x.cs | 7 +- .../Driver/Bmp180.cs | 107 +++++------ .../Driver/Ccs811.cs | 17 +- .../Driver/Drivers/Htu21d.cs | 57 +++--- .../Driver/Drivers/Htu31d.cs | 45 ++--- .../Driver/Mpl3115a2.cs | 76 ++------ .../Driver/Ms5611.cs | 15 +- .../Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs | 33 ++-- .../Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs | 31 ++-- .../Driver/Si70xx.cs | 51 +++--- .../Sensors.Atmospheric.Th02/Driver/Th02.cs | 83 ++++----- .../Driver/Ags01Db.cs | 23 +-- .../Driver/Ens160.cs | 15 +- .../Driver/NextPm.cs | 83 ++++----- .../Driver/Scd4xBase.cs | 65 ++----- .../Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs | 16 +- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs | 5 +- .../Sensors.Hid.As5013/Driver/As5013.cs | 13 +- .../Driver/WiiExtensionControllerBase.cs | 8 +- .../Sensors.Light.Bh1745/Driver/Bh1745.cs | 43 ++--- .../Sensors.Light.Bh1750/Driver/Bh1750.cs | 42 ++--- .../Sensors.Light.Max44009/Driver/Max44009.cs | 23 +-- .../Sensors.Light.Si1145/Driver/Si1145.cs | 46 ++--- .../Sensors.Light.Tsl2591/Driver/Tsl2591.cs | 41 ++--- .../Sensors.Light.Veml7700/Driver/Veml7700.cs | 124 ++++++------- .../Sensors.LoadCell.Hx711/Driver/Hx711.cs | 46 ++--- .../Driver/Nau7802.cs | 55 +++--- .../Driver/Adxl3xxBase.cs | 13 +- .../Driver/Drivers/Adxl345.cs | 34 ++-- .../Driver/Drivers/Adxl362.cs | 61 ++----- .../Driver/Apds9960.cs | 53 +++--- .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 153 ++++++++-------- .../Sensors.Motion.Bno055/Driver/Bno055.cs | 135 +++++++------- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 15 +- .../Sensors.Motion.Hmc5883/Driver/Qmc5883.cs | 21 +-- .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 12 +- .../Driver/Lsm303agr.cs | 15 +- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 27 ++- .../Driver/Mma7660fc.cs | 25 +-- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 3 +- .../Sensors.Motion.Mpu6050/Driver/Mpu6050.cs | 59 +++--- .../Sensors.Power.Ina260/Driver/Ina260.cs | 15 +- .../Sensors.Temperature.Lm75/Driver/Lm75.cs | 39 ++-- .../Driver/Mcp960x.cs | 11 +- .../Driver/Mcp9808.cs | 28 ++- 52 files changed, 945 insertions(+), 1257 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs b/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs index 303155f794..3e6a2019ae 100644 --- a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs +++ b/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs @@ -29,6 +29,13 @@ public class I2cPeripheral : II2cPeripheral /// protected Memory ReadBuffer { get; } + /// + /// Initializes a new instance of the I2cPeripheral class + /// + /// The II2cBus used for communication with the peripheral + /// The address of the peripheral on the I2C bus + /// The size of the buffer used for reading data from the peripheral. Defaults to 8 bytes + /// The size of the buffer used for writing data to the peripheral. Defaults to 8 bytes public I2cPeripheral(II2cBus bus, byte peripheralAddress, int readBufferSize = 8, int writeBufferSize = 8) { Bus = bus; @@ -47,7 +54,7 @@ public I2cPeripheral(II2cBus bus, byte peripheralAddress, int readBufferSize = 8 /// public void Read(Span readBuffer) { - Bus.Read(this.Address, readBuffer); + Bus.Read(Address, readBuffer); } /// @@ -58,7 +65,7 @@ public void Read(Span readBuffer) public void ReadRegister(byte address, Span readBuffer) { WriteBuffer.Span[0] = address; - Bus.Exchange(this.Address, WriteBuffer.Span[0..1], readBuffer); + Bus.Exchange(Address, WriteBuffer.Span[0..1], readBuffer); } /// @@ -68,7 +75,7 @@ public void ReadRegister(byte address, Span readBuffer) public byte ReadRegister(byte address) { WriteBuffer.Span[0] = address; - Bus.Exchange(this.Address, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); + Bus.Exchange(Address, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); return ReadBuffer.Span[0]; } @@ -81,7 +88,7 @@ public byte ReadRegister(byte address) public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) { WriteBuffer.Span[0] = address; - Bus.Exchange(this.Address, WriteBuffer[0..1].Span, ReadBuffer[0..2].Span); + Bus.Exchange(Address, WriteBuffer[0..1].Span, ReadBuffer[0..2].Span); if (order == ByteOrder.LittleEndian) { return (ushort)(ReadBuffer.Span[0] | (ReadBuffer.Span[1] << 8)); @@ -98,19 +105,15 @@ public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.Lit /// Value to be written (8-bits). public void Write(byte value) { - // stuff the value into the write buffer WriteBuffer.Span[0] = value; - this.Bus.Write(this.Address, WriteBuffer.Span[0..1]); + Bus.Write(Address, WriteBuffer.Span[0..1]); } /// /// Write an array of bytes to the peripheral. /// /// Values to be written. - public void Write(Span data) - { - this.Bus.Write(this.Address, data); - } + public void Write(Span data) => Bus.Write(Address, data); /// /// Write data a register in the peripheral. @@ -122,7 +125,7 @@ public void WriteRegister(byte address, byte value) // stuff the address and value into the write buffer WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; - this.Bus.Write(this.Address, WriteBuffer.Span[0..2]); + Bus.Write(Address, WriteBuffer.Span[0..2]); } /// @@ -205,14 +208,22 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order break; } // write it - this.Bus.Write(Address, WriteBuffer.Span[0..(writeBuffer.Length + 1)]); + Bus.Write(Address, WriteBuffer.Span[0..(writeBuffer.Length + 1)]); } + /// + /// Exchanges data with an I2C device through a specified write and read buffer + /// + /// A span of bytes that represents the data to be written to the device + /// A span of bytes where the data read from the device will be stored + /// An optional parameter that specifies the duplex type of the communication. + /// It defaults to half-duplex. + /// Thrown when duplex is set to full-duplex, as I2C only supports half-duplex communication public void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) { if (duplex == DuplexType.Full) { throw new ArgumentException("I2C doesn't support full-duplex communications. Only half-duplex is available because it only has a single data line."); } - Bus.Exchange(this.Address, writeBuffer, readBuffer); + Bus.Exchange(Address, writeBuffer, readBuffer); } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/PollingSensorBase.cs b/Source/Meadow.Foundation.Core/PollingSensorBase.cs index 318e4331ef..9847dc131a 100644 --- a/Source/Meadow.Foundation.Core/PollingSensorBase.cs +++ b/Source/Meadow.Foundation.Core/PollingSensorBase.cs @@ -26,14 +26,14 @@ public abstract class PollingSensorBase /// The default is 5 seconds. public override void StartUpdating(TimeSpan? updateInterval = null) { - lock (samplingLock) + lock (samplingLock) { if (IsSampling) { return; } IsSampling = true; // if an update interval has been passed in, override the default - if(updateInterval is { } ui) { base.UpdateInterval = ui; } + if (updateInterval is { } ui) { base.UpdateInterval = ui; } base.SamplingTokenSource = new CancellationTokenSource(); CancellationToken ct = SamplingTokenSource.Token; @@ -41,11 +41,11 @@ public override void StartUpdating(TimeSpan? updateInterval = null) UNIT oldConditions; ChangeResult result; - Task.Run(async () => + var t = new Task(async () => { - while (true) + while (true) { - if (ct.IsCancellationRequested) + if (ct.IsCancellationRequested) { observers.ForEach(x => x.OnCompleted()); IsSampling = false; @@ -61,7 +61,8 @@ public override void StartUpdating(TimeSpan? updateInterval = null) await Task.Delay(UpdateInterval); } - }, SamplingTokenSource.Token); + }, SamplingTokenSource.Token, TaskCreationOptions.LongRunning); + t.Start(); } } @@ -70,7 +71,7 @@ public override void StartUpdating(TimeSpan? updateInterval = null) /// public override void StopUpdating() { - lock (samplingLock) + lock (samplingLock) { if (!IsSampling) { return; } diff --git a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs index d401d3cc00..16d9936665 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs @@ -141,7 +141,7 @@ public PushButton(IDigitalInputPort inputPort) bool currentState = DigitalIn.State; - _ = Task.Run(async () => + var t = new Task(async () => { while (!ctsPolling.Token.IsCancellationRequested) { @@ -152,7 +152,7 @@ public PushButton(IDigitalInputPort inputPort) await Task.Delay(ButtonPollingInterval); } - }); + }, ctsPolling.Token, TaskCreationOptions.LongRunning); } } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs index 59361c35db..f29f8ef009 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs @@ -160,7 +160,7 @@ public Emc2101(II2cBus i2cBus, byte address = (byte)Address.Default) void Initialize() { EnableTachInput(true); - + InvertFanSpeed(false); PwmFrequencyScaler = 0x1F; ConfigurePwmClock(true, false); @@ -185,7 +185,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Temperature? Interna { ExternalTemperatureUpdated?.Invoke(this, new ChangeResult(tempEx, changeResult.Old?.ExternalTemperature)); } - if(changeResult.New.FanSpeed is { } fanSpeed) + if (changeResult.New.FanSpeed is { } fanSpeed) { FanSpeedUpdated?.Invoke(this, new ChangeResult(fanSpeed, changeResult.Old?.FanSpeed)); } @@ -199,28 +199,25 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Temperature? Interna /// The latest sensor reading protected override Task<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> ReadSensor() { - return Task.Run(() => - { - (Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed) conditions; - - //internal temperature - conditions.InternalTemperature = new Temperature(i2cPeripheral.ReadRegister((byte)Registers.InternalTemperature), Temperature.UnitType.Celsius); - - //external temperature - byte lsb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureLSB); - byte msb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureMSB); - short raw = (short)(msb << 8 | lsb); - raw >>= 5; - conditions.ExternalTemperature = new Temperature(raw * TemperatureBit, Temperature.UnitType.Celsius); - - //fan speed - lsb = i2cPeripheral.ReadRegister((byte)Registers.TachLSB); - msb = i2cPeripheral.ReadRegister((byte)Registers.TachMSB); - short speed = (short)(msb << 8 | lsb); - conditions.FanSpeed = new AngularVelocity(FanRpmNumerator / speed, AngularVelocity.UnitType.RevolutionsPerMinute); - - return conditions; - }); + (Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed) conditions; + + //internal temperature + conditions.InternalTemperature = new Temperature(i2cPeripheral.ReadRegister((byte)Registers.InternalTemperature), Temperature.UnitType.Celsius); + + //external temperature + byte lsb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureLSB); + byte msb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureMSB); + short raw = (short)(msb << 8 | lsb); + raw >>= 5; + conditions.ExternalTemperature = new Temperature(raw * TemperatureBit, Temperature.UnitType.Celsius); + + //fan speed + lsb = i2cPeripheral.ReadRegister((byte)Registers.TachLSB); + msb = i2cPeripheral.ReadRegister((byte)Registers.TachMSB); + short speed = (short)(msb << 8 | lsb); + conditions.FanSpeed = new AngularVelocity(FanRpmNumerator / speed, AngularVelocity.UnitType.RevolutionsPerMinute); + + return Task.FromResult(conditions); } /// @@ -286,13 +283,13 @@ public void ConfigureFanSpinup(FanSpinupDrive spinupDrive, FanSpinupTime spinupT /// The LUT index to set /// the temperature threshhold /// the fan PWM duty cycle - public void SetLookupTable(LutIndex index, - Temperature temperatureThreshhold, + public void SetLookupTable(LutIndex index, + Temperature temperatureThreshhold, float pwmDutyCycle) { pwmDutyCycle = Math.Clamp(pwmDutyCycle, 0, 1); - if(temperatureThreshhold.Celsius > MaxLutTemperature) + if (temperatureThreshhold.Celsius > MaxLutTemperature) { temperatureThreshhold = new Units.Temperature(MaxLutTemperature, Units.Temperature.UnitType.Celsius); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs index f868283c67..1f8df45c0e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs @@ -3,6 +3,7 @@ using Meadow.Units; using Meadow.Utilities; using System; +using System.Threading; using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric @@ -82,21 +83,21 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, /// Convenience method to get the current Pressure. For frequent reads, use /// StartSampling() and StopSampling() in conjunction with the SampleBuffer. /// - protected override async Task<(Pressure? Pressure, Pressure? RawPsiMeasurement)> ReadSensor() + protected override Task<(Pressure? Pressure, Pressure? RawPsiMeasurement)> ReadSensor() { - return await Task.Run(async () => + return Task.Run(() => { //Send the command to the sensor to tell it to do the thing. Peripheral.Write(mprlsMeasurementCommand); - //Datasheet says wait 5 ms. - await Task.Delay(5); + //Datasheet says wait 5ms + Thread.Sleep(5); while (true) { Peripheral.Read(ReadBuffer.Span[0..1]); - //From section 6.5 of the datasheet. + //From section 6.5 of the datasheet IsDevicePowered = BitHelpers.GetBitValue(ReadBuffer.Span[0], 6); IsDeviceBusy = BitHelpers.GetBitValue(ReadBuffer.Span[0], 5); HasMemoryIntegrityFailed = BitHelpers.GetBitValue(ReadBuffer.Span[0], 2); @@ -112,7 +113,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, throw new InvalidOperationException("Sensor internal memory integrity check failed!"); } - if (!(IsDeviceBusy)) + if (!IsDeviceBusy) { break; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs index 6d0576862c..4a9660c6cb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs @@ -1,6 +1,5 @@ using Meadow.Hardware; using Meadow.Peripherals.Sensors; -using Meadow.Units; using System; using System.Threading.Tasks; @@ -208,19 +207,16 @@ private Units.Temperature RegisterToTemp(Memory data) /// Read the temperature /// /// The current temperature value - protected override async Task ReadSensor() + protected override Task ReadSensor() { - return await Task.Run(() => - { - // 12-bit data - // Negative numbers are represented in binary twos complement format. The - // Temperature Register is 0x0000 until the first conversion complete after a software - // reset or power - on. - // Measurement Temperature Value [°C] = Temperature Data [11:0] x 0.0625 - Peripheral?.ReadRegister((byte)Register.Temperature, ReadBuffer.Span[0..2]); + // 12-bit data + // Negative numbers are represented in binary twos complement format. The + // Temperature Register is 0x0000 until the first conversion complete after a software + // reset or power - on. + // Measurement Temperature Value [°C] = Temperature Data [11:0] x 0.0625 + Peripheral?.ReadRegister((byte)Register.Temperature, ReadBuffer.Span[0..2]); - return RegisterToTemp(ReadBuffer); - }); + return Task.FromResult(RegisterToTemp(ReadBuffer)); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index 570fb80a4f..fe18e6a55d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -220,7 +220,6 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T { //TODO: set an update flag on the oversample properties and set // these once, unless the update flag has been set. - // update configuration configuration.TemperatureOverSampling = TemperatureSampleCount; configuration.PressureOversampling = PressureSampleCount; configuration.HumidityOverSampling = HumiditySampleCount; @@ -234,131 +233,55 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T await Task.Delay(100); //give the BME280 time to read new values } - return await Task.Run(() => + (Units.Temperature Temperature, RelativeHumidity Humidity, Pressure Pressure) conditions; + + bme280Comms.ReadRegisters(0xf7, readBuffer.Span[0..8]); + + var adcTemperature = (readBuffer.Span[3] << 12) | (readBuffer.Span[4] << 4) | ((readBuffer.Span[5] >> 4) & 0x0f); + var tvar1 = (((adcTemperature >> 3) - (compensationData.T1 << 1)) * compensationData.T2) >> 11; + var tvar2 = (((((adcTemperature >> 4) - compensationData.T1) * + ((adcTemperature >> 4) - compensationData.T1)) >> 12) * compensationData.T3) >> 14; + var tfine = tvar1 + tvar2; + + conditions.Temperature = new Units.Temperature((float)(((tfine * 5) + 128) >> 8) / 100, TU.Celsius); + + long pvar1 = tfine - 128000; + var pvar2 = pvar1 * pvar1 * compensationData.P6; + pvar2 += (pvar1 * compensationData.P5) << 17; + pvar2 += (long)compensationData.P4 << 35; + pvar1 = ((pvar1 * pvar1 * compensationData.P8) >> 8) + ((pvar1 * compensationData.P2) << 12); + pvar1 = ((((long)1 << 47) + pvar1) * compensationData.P1) >> 33; + if (pvar1 == 0) + { + conditions.Pressure = new Pressure(0, PU.Pascal); + } + else { + var adcPressure = (readBuffer.Span[0] << 12) | (readBuffer.Span[1] << 4) | ((readBuffer.Span[2] >> 4) & 0x0f); + long pressure = 1048576 - adcPressure; + pressure = (((pressure << 31) - pvar2) * 3125) / pvar1; + pvar1 = (compensationData.P9 * (pressure >> 13) * (pressure >> 13)) >> 25; + pvar2 = (compensationData.P8 * pressure) >> 19; + pressure = ((pressure + pvar1 + pvar2) >> 8) + ((long)compensationData.P7 << 4); + conditions.Pressure = new Pressure((double)pressure / 256, PU.Pascal); + } + + var adcHumidity = (readBuffer.Span[6] << 8) | readBuffer.Span[7]; + var v_x1_u32r = tfine - 76800; + + v_x1_u32r = ((((adcHumidity << 14) - (compensationData.H4 << 20) - (compensationData.H5 * v_x1_u32r)) + + 16384) >> 15) * + ((((((((v_x1_u32r * compensationData.H6) >> 10) * + (((v_x1_u32r * compensationData.H3) >> 11) + 32768)) >> 10) + 2097152) * + compensationData.H2) + 8192) >> 14); + v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * compensationData.H1) >> 4); + + v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; + v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; + // + conditions.Humidity = new RelativeHumidity((v_x1_u32r >> 12) / 1024, HU.Percent); - (Units.Temperature Temperature, RelativeHumidity Humidity, Pressure Pressure) conditions; - - // readily read the readings from the reading register into the read buffer - bme280Comms.ReadRegisters(0xf7, readBuffer.Span[0..8]); - // - // Temperature calculation from section 4.2.3 of the datasheet. - // - // Returns temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC. - // t_fine carries fine temperature as global value: - // - // BME280_S32_t t_fine; - // BME280_S32_t BME280_compensate_T_int32(BME280_S32_t adc_T) - // { - // BME280_S32_t var1, var2, T; - // var1 = ((((adc_T>>3) - ((BME280_S32_t)dig_T1<<1))) * ((BME280_S32_t)dig_T2)) >> 11; - // var2 = (((((adc_T>>4) - ((BME280_S32_t)dig_T1)) * ((adc_T>>4) - ((BME280_S32_t)dig_T1))) >> 12) * - // ((BME280_S32_t)dig_T3)) >> 14; - // t_fine = var1 + var2; - // T = (t_fine * 5 + 128) >> 8; - // return T; - // } - // - var adcTemperature = (readBuffer.Span[3] << 12) | (readBuffer.Span[4] << 4) | ((readBuffer.Span[5] >> 4) & 0x0f); - var tvar1 = (((adcTemperature >> 3) - (compensationData.T1 << 1)) * compensationData.T2) >> 11; - var tvar2 = (((((adcTemperature >> 4) - compensationData.T1) * - ((adcTemperature >> 4) - compensationData.T1)) >> 12) * compensationData.T3) >> 14; - var tfine = tvar1 + tvar2; - // - conditions.Temperature = new Units.Temperature((float)(((tfine * 5) + 128) >> 8) / 100, TU.Celsius); - // - // Pressure calculation from section 4.2.3 of the datasheet. - // - // Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24 integer bits and 8 fractional bits). - // Output value of “24674867” represents 24674867/256 = 96386.2 Pa = 963.862 hPa - // - // BME280_U32_t BME280_compensate_P_int64(BME280_S32_t adc_P) - // { - // BME280_S64_t var1, var2, p; - // var1 = ((BME280_S64_t)t_fine) - 128000; - // var2 = var1 * var1 * (BME280_S64_t)dig_P6; - // var2 = var2 + ((var1*(BME280_S64_t)dig_P5)<<17); - // var2 = var2 + (((BME280_S64_t)dig_P4)<<35); - // var1 = ((var1 * var1 * (BME280_S64_t)dig_P3)>>8) + ((var1 * (BME280_S64_t)dig_P2)<<12); - // var1 = (((((BME280_S64_t)1)<<47)+var1))*((BME280_S64_t)dig_P1)>>33; - // if (var1 == 0) - // { - // return 0; // avoid exception caused by division by zero - // } - // p = 1048576-adc_P; - // p = (((p<<31)-var2)*3125)/var1; - // var1 = (((BME280_S64_t)dig_P9) * (p>>13) * (p>>13)) >> 25; - // var2 = (((BME280_S64_t)dig_P8) * p) >> 19; - // p = ((p + var1 + var2) >> 8) + (((BME280_S64_t)dig_P7)<<4); - // return (BME280_U32_t)p; - // } - // - long pvar1 = tfine - 128000; - var pvar2 = pvar1 * pvar1 * compensationData.P6; - pvar2 += (pvar1 * compensationData.P5) << 17; - pvar2 += (long)compensationData.P4 << 35; - pvar1 = ((pvar1 * pvar1 * compensationData.P8) >> 8) + ((pvar1 * compensationData.P2) << 12); - pvar1 = ((((long)1 << 47) + pvar1) * compensationData.P1) >> 33; - if (pvar1 == 0) - { - conditions.Pressure = new Pressure(0, PU.Pascal); - } - else - { - var adcPressure = (readBuffer.Span[0] << 12) | (readBuffer.Span[1] << 4) | ((readBuffer.Span[2] >> 4) & 0x0f); - long pressure = 1048576 - adcPressure; - pressure = (((pressure << 31) - pvar2) * 3125) / pvar1; - pvar1 = (compensationData.P9 * (pressure >> 13) * (pressure >> 13)) >> 25; - pvar2 = (compensationData.P8 * pressure) >> 19; - pressure = ((pressure + pvar1 + pvar2) >> 8) + ((long)compensationData.P7 << 4); - // - conditions.Pressure = new Pressure((double)pressure / 256, PU.Pascal); - } - // - // Humidity calculations from section 4.2.3 of the datasheet. - // - // Returns humidity in %RH as unsigned 32 bit integer in Q22.10 format (22 integer and 10 fractional bits). - // Output value of “47445” represents 47445/1024 = 46.333 %RH - // - // BME280_U32_t bme280_compensate_H_int32(BME280_S32_t adc_H) - // { - // BME280_S32_t v_x1_u32r; - // v_x1_u32r = (t_fine - ((BME280_S32_t)76800)); - // v_x1_u32r = (((((adc_H << 14) - (((BME280_S32_t)dig_H4) << 20) - (((BME280_S32_t)dig_H5) * v_x1_u32r)) + - // ((BME280_S32_t)16384)) >> 15) * (((((((v_x1_u32r * ((BME280_S32_t)dig_H6)) >> 10) * (((v_x1_u32r * - // ((BME280_S32_t)dig_H3)) >> 11) + ((BME280_S32_t)32768))) >> 10) + ((BME280_S32_t)2097152)) * - // ((BME280_S32_t)dig_H2) + 8192) >> 14)); - // v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((BME280_S32_t)dig_H1)) >> 4)); - // v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r); - // v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r); - // return (BME280_U32_t)(v_x1_u32r>>12); - // } - // - var adcHumidity = (readBuffer.Span[6] << 8) | readBuffer.Span[7]; - var v_x1_u32r = tfine - 76800; - - v_x1_u32r = ((((adcHumidity << 14) - (compensationData.H4 << 20) - (compensationData.H5 * v_x1_u32r)) + - 16384) >> 15) * - ((((((((v_x1_u32r * compensationData.H6) >> 10) * - (((v_x1_u32r * compensationData.H3) >> 11) + 32768)) >> 10) + 2097152) * - compensationData.H2) + 8192) >> 14); - v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * compensationData.H1) >> 4); - - //v_x1_u32r = (((((adcHumidity << 14) - (((int) _compensationData.H4) << 20) - (((int) _compensationData.H5) * v_x1_u32r)) + - // ((int) 16384)) >> 15) * (((((((v_x1_u32r * ((int) _compensationData.H6)) >> 10) * (((v_x1_u32r * - // ((int) _compensationData.H3)) >> 11) + ((int) 32768))) >> 10) + ((int) 2097152)) * - // ((int) _compensationData.H2) + 8192) >> 14)); - //v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((int) _compensationData.H1)) >> 4)); - // - // Makes sure the humidity reading is in the range [0..100]. - // - v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; - v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; - // - conditions.Humidity = new RelativeHumidity((v_x1_u32r >> 12) / 1024, HU.Percent); - - return conditions; - }); + return conditions; } /// /// Update the configuration for the BME280. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index 391b1d4e49..4e2653f49e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -414,15 +414,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> ReadSensor() + protected override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> ReadSensor() { configuration.TemperatureOversample = TemperatureOversampleMode; configuration.PressureOversample = PressureOversampleMode; configuration.HumidityOversample = HumidityOversampleMode; - return await Task.Run(() => + return Task.Run(() => { - (Units.Temperature Temperature, RelativeHumidity Humidity, Pressure Pressure, Resistance GasResistance) conditions; + (Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance) conditions; //set onetime measurement SetPowerMode(PowerMode.Forced); @@ -472,7 +472,6 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T conditions.Pressure = CompensatePressure(rawPressure); conditions.Humidity = CompensateHumidity(rawHumidity); - return conditions; }); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs index 407e13a8e1..70f67e8281 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -18,14 +18,14 @@ public partial class Bmp180 : /// Raised when the temperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; - + /// /// Raised when the pressure value changes /// public event EventHandler> PressureUpdated = delegate { }; // Oversampling for measurements - private byte oversamplingSetting; + private readonly byte oversamplingSetting; // These wait times correspond to the oversampling settings private readonly byte[] pressureWaitTime = { 5, 8, 14, 26 }; @@ -95,62 +95,47 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// protected override Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() { - return Task.Run(() => + (Units.Temperature? Temperature, Pressure? Pressure) conditions; + + long x1, x2, x3, b4, b5, b6, b7, p; + long ut = ReadUncompensatedTemperature(); + long up = ReadUncompensatedPressure(); + + // calculate the compensated temperature + x1 = (ut - _ac6) * _ac5 >> 15; + x2 = (_mc << 11) / (x1 + _md); + b5 = x1 + x2; + + conditions.Temperature = new Units.Temperature((float)((b5 + 8) >> 4) / 10, Units.Temperature.UnitType.Celsius); + + // calculate the compensated pressure + b6 = b5 - 4000; + x1 = (_b2 * (b6 * b6 >> 12)) >> 11; + x2 = _ac2 * b6 >> 11; + x3 = x1 + x2; + var b3 = oversamplingSetting switch { - (Units.Temperature? Temperature, Pressure? Pressure) conditions; - - long x1, x2, x3, b3, b4, b5, b6, b7, p; - - long ut = ReadUncompensatedTemperature(); - - long up = ReadUncompensatedPressure(); - - // calculate the compensated temperature - x1 = (ut - _ac6) * _ac5 >> 15; - x2 = (_mc << 11) / (x1 + _md); - b5 = x1 + x2; - - conditions.Temperature = new Units.Temperature((float)((b5 + 8) >> 4) / 10, Units.Temperature.UnitType.Celsius); - - // calculate the compensated pressure - b6 = b5 - 4000; - x1 = (_b2 * (b6 * b6 >> 12)) >> 11; - x2 = _ac2 * b6 >> 11; - x3 = x1 + x2; - - switch (oversamplingSetting) - { - case 0: - b3 = ((_ac1 * 4 + x3) + 2) >> 2; - break; - case 1: - b3 = ((_ac1 * 4 + x3) + 2) >> 1; - break; - case 2: - b3 = ((_ac1 * 4 + x3) + 2); - break; - case 3: - b3 = ((_ac1 * 4 + x3) + 2) << 1; - break; - default: - throw new Exception("Oversampling setting must be 0-3"); - } - x1 = _ac3 * b6 >> 13; - x2 = (_b1 * (b6 * b6 >> 12)) >> 16; - x3 = ((x1 + x2) + 2) >> 2; - b4 = (_ac4 * (x3 + 32768)) >> 15; - b7 = (up - b3) * (50000 >> oversamplingSetting); - p = (b7 < 0x80000000 ? (b7 * 2) / b4 : (b7 / b4) * 2); - x1 = (p >> 8) * (p >> 8); - x1 = (x1 * 3038) >> 16; - x2 = (-7357 * p) >> 16; - - int value = (int)(p + ((x1 + x2 + 3791) >> 4)); - - conditions.Pressure = new Pressure(value, Units.Pressure.UnitType.Pascal); - - return conditions; - }); + 0 => ((_ac1 * 4 + x3) + 2) >> 2, + 1 => ((_ac1 * 4 + x3) + 2) >> 1, + 2 => ((_ac1 * 4 + x3) + 2), + 3 => ((_ac1 * 4 + x3) + 2) << 1, + _ => throw new Exception("Oversampling setting must be 0-3"), + }; + x1 = _ac3 * b6 >> 13; + x2 = (_b1 * (b6 * b6 >> 12)) >> 16; + x3 = ((x1 + x2) + 2) >> 2; + b4 = (_ac4 * (x3 + 32768)) >> 15; + b7 = (up - b3) * (50000 >> oversamplingSetting); + p = (b7 < 0x80000000 ? (b7 * 2) / b4 : (b7 / b4) * 2); + x1 = (p >> 8) * (p >> 8); + x1 = (x1 * 3038) >> 16; + x2 = (-7357 * p) >> 16; + + int value = (int)(p + ((x1 + x2 + 3791) >> 4)); + + conditions.Pressure = new Pressure(value, Units.Pressure.UnitType.Pascal); + + return Task.FromResult(conditions); } private long ReadUncompensatedTemperature() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs index 82ba5f3317..47faf002f1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs @@ -153,19 +153,16 @@ void Reset() /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(Concentration? Co2, Concentration? Voc)> ReadSensor() + protected override Task<(Concentration? Co2, Concentration? Voc)> ReadSensor() { - return await Task.Run(() => - { - // data is really in just the first 4, but this gets us status and raw data as well - Peripheral?.ReadRegister((byte)Register.ALG_RESULT_DATA, _readingBuffer); + // data is really in just the first 4, but this gets us status and raw data as well + Peripheral?.ReadRegister((byte)Register.ALG_RESULT_DATA, _readingBuffer); - (Concentration co2, Concentration voc) state; - state.co2 = new Concentration(_readingBuffer[0] << 8 | _readingBuffer[1], Concentration.UnitType.PartsPerMillion); - state.voc = new Concentration(_readingBuffer[2] << 8 | _readingBuffer[3], Concentration.UnitType.PartsPerBillion); + (Concentration? co2, Concentration? voc) state; + state.co2 = new Concentration(_readingBuffer[0] << 8 | _readingBuffer[1], Concentration.UnitType.PartsPerMillion); + state.voc = new Concentration(_readingBuffer[2] << 8 | _readingBuffer[3], Concentration.UnitType.PartsPerBillion); - return state; - }); + return Task.FromResult(state); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs index d8b228e476..99cd0933df 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs @@ -33,11 +33,11 @@ public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? /// /// Initialize HTU21D /// - protected void Initialize () + protected void Initialize() { Peripheral?.Write((byte)Registers.SOFT_RESET); - - Thread.Sleep(100); + + Thread.Sleep(100); SetResolution(SensorResolution.TEMP11_HUM11); } @@ -48,34 +48,29 @@ protected void Initialize () /// The latest sensor reading protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() { - (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - return await Task.Run(() => - { - // humidity - Peripheral?.Write((byte)Registers.HUMDITY_MEASURE_NOHOLD); - Thread.Sleep(20); // Maximum conversion time is 12ms (page 5 of the datasheet) - - Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) - var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - var humidity = (125 * (float)humidityReading / 65536) - 6; - humidity = Math.Clamp(humidity, 0, 100); - conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); - - // temperature - Peripheral?.Write((byte)Registers.TEMPERATURE_MEASURE_NOHOLD); - Thread.Sleep(20); // Maximum conversion time is 12ms (page 5 of the datasheet) - - Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) - var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); - - return conditions; - }); + Peripheral?.Write((byte)Registers.HUMDITY_MEASURE_NOHOLD); + await Task.Delay(20); // Maximum conversion time is 12ms (page 5 of the datasheet) + + Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + var humidity = (125 * (float)humidityReading / 65536) - 6; + humidity = Math.Clamp(humidity, 0, 100); + conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); + + Peripheral?.Write((byte)Registers.TEMPERATURE_MEASURE_NOHOLD); + await Task.Delay(20); // Maximum conversion time is 12ms (page 5 of the datasheet) + + Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); + + return conditions; } - - /// - /// Turn the heater on or off + + /// + /// Turn the heater on or off /// /// Heater status, true = turn heater on, false = turn heater off. public void Heater(bool heaterOn) @@ -91,8 +86,8 @@ public void Heater(bool heaterOn) } Peripheral.WriteRegister((byte)Registers.WRITE_HEATER_REGISTER, register); } - - //Set sensor resolution + + //Set sensor resolution /*******************************************************************************************/ //Sets the sensor resolution to one of four levels //Page 12: diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs index 8ee64cdfda..4239aba1da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs @@ -29,50 +29,45 @@ public Htu31d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? /// Read atmospheric data from sensor /// /// - protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + protected async override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() { - (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - return await Task.Run(() => - { - Peripheral?.Write((byte)Commands.Conversion); - Thread.Sleep(20); // Maximum conversion time is 20ms - Peripheral?.ReadRegister((byte)Commands.ReadTempHumidity, ReadBuffer.Span[0..5]);// 2 bytes for temp, checksum, 2 bytes humidity, checksum + Peripheral?.Write((byte)Commands.Conversion); + await Task.Delay(20); // Maximum conversion time is 20ms + Peripheral?.ReadRegister((byte)Commands.ReadTempHumidity, ReadBuffer.Span[0..5]);// 2 bytes for temp, checksum, 2 bytes humidity, checksum - // temperature - var temperatureReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); + var temperatureReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); - // humidity - var humidityReading = (ushort)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]); - var humidity = (125 * (float)humidityReading / 65536) - 6; - humidity = Math.Clamp(humidity, 0, 100); - conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); + var humidityReading = (ushort)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]); + var humidity = (125 * (float)humidityReading / 65536) - 6; + humidity = Math.Clamp(humidity, 0, 100); + conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); - return conditions; - }); + return conditions; } - + /// - /// Turn the heater on or off + /// Turn the heater on or off /// /// Heater status, true = turn heater on, false = turn heater off public void Heater(bool heaterOn) { - if(heaterOn) - { + if (heaterOn) + { Peripheral?.WriteRegister((byte)Commands.HeaterOn, 1); - } - else + } + else { Peripheral?.WriteRegister((byte)Commands.HeaterOff, 1); } } - + /// /// Reset the sensor /// - public void Reset() + public void Reset() { Peripheral?.WriteRegister((byte)Commands.Reset, 1); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs index 6472078044..8de544b40c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs @@ -1,9 +1,8 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -91,29 +90,22 @@ public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected override async Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() { - return await Task.Run(() => + (Units.Temperature? Temperature, Pressure? Pressure) conditions; + // Force the sensor to make a reading by setting the OST bit in Control + // register 1 (see 7.17.1 of the datasheet). + Standby = false; + // Pause until both temperature and pressure readings are available + while ((Status & 0x06) != 0x06) { - (Units.Temperature? Temperature, Pressure? Pressure) conditions; - // - // Force the sensor to make a reading by setting the OST bit in Control - // register 1 (see 7.17.1 of the datasheet). - // - Standby = false; - // - // Pause until both temperature and pressure readings are available. - // - while ((Status & 0x06) != 0x06) - { - Thread.Sleep(5); - } + await Task.Delay(5); + } - Thread.Sleep(100); - Peripheral?.ReadRegister(Registers.PressureMSB, ReadBuffer.Span); - conditions.Pressure = new Pressure(DecodePresssure(ReadBuffer.Span[0], ReadBuffer.Span[1], ReadBuffer.Span[2]), Units.Pressure.UnitType.Pascal); - conditions.Temperature = new Units.Temperature(DecodeTemperature(ReadBuffer.Span[3], ReadBuffer.Span[4]), Units.Temperature.UnitType.Celsius); + await Task.Delay(100); + Peripheral?.ReadRegister(Registers.PressureMSB, ReadBuffer.Span); + conditions.Pressure = new Pressure(DecodePresssure(ReadBuffer.Span[0], ReadBuffer.Span[1], ReadBuffer.Span[2]), Units.Pressure.UnitType.Pascal); + conditions.Temperature = new Units.Temperature(DecodeTemperature(ReadBuffer.Span[3], ReadBuffer.Span[4]), Units.Temperature.UnitType.Celsius); - return conditions; - }); + return conditions; } /// @@ -152,25 +144,6 @@ private float DecodePresssure(byte msb, byte csb, byte lsb) return (float)(pressure / 64.0); } - /// - /// Encode the pressure into the sensor reading byes. - /// This method is used to allow the target pressure and pressure window - /// properties to be set. - /// - /// Pressure in Pascals to encode. - /// Array holding the three byte values for the sensor. - private byte[] EncodePressure(double pressure) - { - var result = new byte[3]; - var temp = (uint)(pressure * 64); - result[2] = (byte)(temp & 0xff); - temp >>= 8; - result[1] = (byte)(temp & 0xff); - temp >>= 8; - result[0] = (byte)(temp & 0xff); - return result; - } - /// /// Decode the two bytes representing the temperature into degrees C. /// @@ -185,23 +158,6 @@ private float DecodeTemperature(byte msb, byte lsb) return (float)(temperature / 256.0); } - /// - /// Encode a temperature into sensor reading bytes. - /// This method is needed in order to allow the temperature target - /// and window properties to work. - /// - /// Temperature to encode. - /// Temperature tuple containing the two bytes for the sensor. - private byte[] EncodeTemperature(double temperature) - { - var result = new byte[2]; - var temp = (ushort)(temperature * 256); - result[1] = (byte)(temp & 0xff); - temp >>= 8; - result[0] = (byte)(temp & 0xff); - return result; - } - /// /// Reset the sensor /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs index dff77efe67..ffc41684c1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// /// Represents an Ms5611 pressure and temperature sensor /// - public partial class Ms5611: + public partial class Ms5611 : ByteCommsSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, ITemperatureSensor, IBarometricPressureSensor { @@ -69,17 +69,14 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() + protected override Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() { - return await Task.Run(() => { + (Units.Temperature? Temperature, Pressure? Pressure) conditions; - (Units.Temperature Temperature, Pressure Pressure) conditions; + conditions.Temperature = new Units.Temperature(ReadTemperature(), Units.Temperature.UnitType.Celsius); + conditions.Pressure = new Pressure(ReadPressure(), Units.Pressure.UnitType.Millibar); - conditions.Temperature = new Units.Temperature(ReadTemperature(), Units.Temperature.UnitType.Celsius); - conditions.Pressure = new Pressure(ReadPressure(), Units.Pressure.UnitType.Millibar); - - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs index c45f354849..4ea6675dc1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs @@ -1,8 +1,8 @@ -using System; +using Meadow.Hardware; +using Meadow.Units; +using System; using System.Threading; using System.Threading.Tasks; -using Meadow.Hardware; -using Meadow.Units; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -76,27 +76,24 @@ public bool RunSelfTest() /// Reads data from the sensor /// /// The latest sensor reading - protected async override Task ReadSensor() + protected override Task ReadSensor() { - return await Task.Run(() => + if (_compensationData != null) { - if(_compensationData != null) - { - Peripheral?.Write(_compensationData); - } - else - { - Peripheral?.Write(sgp40_measure_raw_signal_uncompensated); - } + Peripheral?.Write(_compensationData); + } + else + { + Peripheral?.Write(sgp40_measure_raw_signal_uncompensated); + } - Thread.Sleep(30); // per the data sheet + Thread.Sleep(30); // per the data sheet - Peripheral?.Read(ReadBuffer.Span[0..3]); + Peripheral?.Read(ReadBuffer.Span[0..3]); - var data = ReadBuffer.Span[0..3].ToArray(); + var data = ReadBuffer.Span[0..3].ToArray(); - return data[0] << 8 | data[1]; - }); + return Task.FromResult(data[0] << 8 | data[1]); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs index 262a873aac..8e2261ecf0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -108,24 +108,21 @@ protected int GetDelayForPrecision(Precision precision) /// /// Get a reading from the sensor and set the Temperature and Humidity properties. /// - protected async override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + protected override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() { - (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - return await Task.Run(() => - { - Peripheral?.Write((byte)ReadPrecision); - Thread.Sleep(GetDelayForPrecision(ReadPrecision)); - Peripheral?.Read(ReadBuffer.Span[0..5]); + Peripheral?.Write((byte)ReadPrecision); + Thread.Sleep(GetDelayForPrecision(ReadPrecision)); + Peripheral?.Read(ReadBuffer.Span[0..5]); - var temperature = (175 * (float)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]) / 65535) - 45; - var humidity = (125 * (float)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]) / 65535) - 6; + var temperature = (175 * (float)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]) / 65535) - 45; + var humidity = (125 * (float)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]) / 65535) - 6; - conditions.Humidity = new RelativeHumidity(humidity); - conditions.Temperature = new Units.Temperature(temperature, Units.Temperature.UnitType.Celsius); + conditions.Humidity = new RelativeHumidity(humidity); + conditions.Temperature = new Units.Temperature(temperature, Units.Temperature.UnitType.Celsius); - return conditions; - }); + return Task.FromResult(conditions); } async Task ISensor.Read() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs index 6d98648bd1..77a017a632 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; using HU = Meadow.Units.RelativeHumidity.UnitType; using TU = Meadow.Units.Temperature.UnitType; @@ -21,7 +21,7 @@ public partial class Si70xx : /// Raised when the temperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; - + /// /// Raised when the humidity value changes /// @@ -128,33 +128,30 @@ protected void Initialize() { (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; - return await Task.Run(() => + Peripheral?.Write(HUMDITY_MEASURE_NOHOLD); + await Task.Delay(25); // Maximum conversion time is 12ms (page 5 of the datasheet). + Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) + var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Humidity = new RelativeHumidity(((125 * (float)humidityReading) / 65536) - 6, HU.Percent); + if (conditions.Humidity < new RelativeHumidity(0, HU.Percent)) { - Peripheral?.Write(HUMDITY_MEASURE_NOHOLD); - Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) - var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Humidity = new RelativeHumidity(((125 * (float)humidityReading) / 65536) - 6, HU.Percent); - if (conditions.Humidity < new RelativeHumidity(0, HU.Percent)) - { - conditions.Humidity = new RelativeHumidity(0, HU.Percent); - } - else + conditions.Humidity = new RelativeHumidity(0, HU.Percent); + } + else + { + if (conditions.Humidity > new RelativeHumidity(100, HU.Percent)) { - if (conditions.Humidity > new RelativeHumidity(100, HU.Percent)) - { - conditions.Humidity = new RelativeHumidity(100, HU.Percent); - } + conditions.Humidity = new RelativeHumidity(100, HU.Percent); } + } - Peripheral?.Write(TEMPERATURE_MEASURE_NOHOLD); - Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) - var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), TU.Celsius); + Peripheral?.Write(TEMPERATURE_MEASURE_NOHOLD); + Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). + Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) + var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Temperature = new Units.Temperature((float)((175.72 * temperatureReading / 65536) - 46.85), TU.Celsius); - return conditions; - }); + return conditions; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs index 66333be82b..6274c6687d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -64,47 +64,44 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// /// Calculates the compensated pressure and temperature. /// - protected override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + protected async override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() { - return Task.Run(() => + (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; + + // Read the humidity + Peripheral?.WriteRegister((byte)Registers.Config, MeasureHumidity); + + // Maximum conversion time should be 40ms + while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) + { + await Task.Delay(40); + } + + byte[] data = new byte[2]; + + Peripheral?.ReadRegister((byte)Registers.DataHigh, data); + int temp = data[0] << 8; + temp |= data[1]; + temp >>= 4; + + conditions.Humidity = new RelativeHumidity(temp / 16.0 - 24); + + // Read the temperature + Peripheral?.WriteRegister((byte)Registers.Config, MeasureTemperature); + + // Maximum conversion time should be 40ms + while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) { - (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - - // Read the humidity - Peripheral?.WriteRegister((byte)Registers.Config, MeasureHumidity); - - // Maximum conversion time should be 40ms - while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) - { - Thread.Sleep(40); - } - - byte[] data = new byte[2]; - - Peripheral?.ReadRegister((byte)Registers.DataHigh, data); - int temp = data[0] << 8; - temp |= data[1]; - temp >>= 4; - - conditions.Humidity = new RelativeHumidity(temp / 16.0 - 24); - - // Read the temperature - Peripheral?.WriteRegister((byte)Registers.Config, MeasureTemperature); - - // Maximum conversion time should be 40ms - while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) - { - Thread.Sleep(40); - } - - Peripheral?.ReadRegister((byte)Registers.DataHigh, data); - temp = data[0] << 8; - temp |= data[1]; - temp >>= 2; //drop the two unused bits (14 bit value) - conditions.Temperature = new Units.Temperature(temp / 32.0 - 50, Units.Temperature.UnitType.Celsius); - - return conditions; - }); + Thread.Sleep(40); + } + + Peripheral?.ReadRegister((byte)Registers.DataHigh, data); + temp = data[0] << 8; + temp |= data[1]; + temp >>= 2; //drop the two unused bits (14 bit value) + conditions.Temperature = new Units.Temperature(temp / 32.0 - 50, Units.Temperature.UnitType.Celsius); + + return conditions; } async Task ISensor.Read() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs index 933acd97c2..ca23d8d866 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs @@ -1,7 +1,7 @@ -using System; -using System.Threading.Tasks; using Meadow.Hardware; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Environmental { @@ -44,23 +44,20 @@ public Ags01Db(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// Get ASG01DB VOC Gas Concentration and /// Update the Concentration property. /// - protected override Task ReadSensor() + protected override Task ReadSensor() { - return Task.Run(() => - { - WriteBuffer.Span[0] = ASG_DATA_MSB; - WriteBuffer.Span[1] = ASG_DATA_LSB; + WriteBuffer.Span[0] = ASG_DATA_MSB; + WriteBuffer.Span[1] = ASG_DATA_LSB; - Peripheral.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span); + Peripheral.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span); - var value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; + var value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; - var voc = value / 10.0;//should be ppm + var voc = value / 10.0;//ppm - Concentration = new Concentration(voc, Units.Concentration.UnitType.PartsPerMillion); + Concentration = new Concentration(voc, Units.Concentration.UnitType.PartsPerMillion); - return Concentration.Value; - }); + return Task.FromResult(Concentration.Value); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs index ede5f4585c..eeb03ce7c4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs @@ -246,20 +246,17 @@ public override void StopUpdating() /// Get Scdx40 C02 Gas Concentration and /// Update the Concentration property /// - protected override async Task<(Concentration? CO2Concentration, + protected override Task<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> ReadSensor() { - return await Task.Run(() => - { - (Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration) conditions; + (Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration) conditions; - conditions.CO2Concentration = GetCO2Concentration(); - conditions.EthanolConcentration = GetEthanolConcentration(); - conditions.TVOCConcentration = GetTotalVolotileOrganicCompounds(); + conditions.CO2Concentration = GetCO2Concentration(); + conditions.EthanolConcentration = GetEthanolConcentration(); + conditions.TVOCConcentration = GetTotalVolotileOrganicCompounds(); - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs index a961b3e1ab..88f43e0985 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/NextPm.cs @@ -214,54 +214,51 @@ protected override void RaiseEventsAndNotify(IChangeResult<( { (ParticulateReading? reading10s, ParticulateReading? reading1min, ParticulateReading? reading15min, Units.Temperature? temperature, RelativeHumidity? humidity) conditions; - return await Task.Run(async () => + // data sheet indicates you should always read all 4 bytes, in order, for valid data + try { - // data sheet indicates you should always read all 4 bytes, in order, for valid data - try - { - conditions.reading10s = await Get10SecondAverageReading(); - } - catch (TeraException) - { - // data likely not ready, or device is asleep - conditions.reading10s = null; - } + conditions.reading10s = await Get10SecondAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading10s = null; + } - try - { - conditions.reading1min = await Get1MinuteAverageReading(); - } - catch (TeraException) - { - // data likely not ready, or device is asleep - conditions.reading1min = null; - } + try + { + conditions.reading1min = await Get1MinuteAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading1min = null; + } - try - { - conditions.reading15min = await Get15MinuteAverageReading(); - } - catch (TeraException) - { - // data likely not ready, or device is asleep - conditions.reading15min = null; - } + try + { + conditions.reading15min = await Get15MinuteAverageReading(); + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.reading15min = null; + } - try - { - var th = await GetTemperatureAndHumidity(); - conditions.temperature = th.temperature; - conditions.humidity = th.humidity; - } - catch (TeraException) - { - // data likely not ready, or device is asleep - conditions.temperature = null; - conditions.humidity = null; - } + try + { + var th = await GetTemperatureAndHumidity(); + conditions.temperature = th.temperature; + conditions.humidity = th.humidity; + } + catch (TeraException) + { + // data likely not ready, or device is asleep + conditions.temperature = null; + conditions.humidity = null; + } - return conditions; - }); + return conditions; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs index ab7d5a5ebb..7b44a29c36 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs @@ -1,10 +1,10 @@ -using System; -using System.Threading; -using System.Threading.Tasks; using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Peripherals.Sensors.Environmental; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Environmental { @@ -12,7 +12,7 @@ namespace Meadow.Foundation.Sensors.Environmental /// Base class for SCD4x series of C02 sensors /// public abstract partial class Scd4xBase - : ByteCommsSensorBase<(Concentration? Concentration, + : ByteCommsSensorBase<(Concentration? Concentration, Units.Temperature? Temperature, RelativeHumidity? Humidity)>, ITemperatureSensor, IHumiditySensor, IConcentrationSensor @@ -119,7 +119,7 @@ public byte[] GetSerialNumber() return ret; } - + /// /// Is there sensor measurement data ready /// Sensor returns data ~5 seconds in normal operation and ~30 seconds in low power mode @@ -193,30 +193,27 @@ void SendCommand(Commands command) /// protected override async Task<(Concentration? Concentration, Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() { - return await Task.Run(() => - { - while(IsDataReady() == false) - { - Thread.Sleep(500); - } + while (IsDataReady() == false) + { + await Task.Delay(500); + } - (Concentration Concentration, Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + (Concentration Concentration, Units.Temperature Temperature, RelativeHumidity Humidity) conditions; - SendCommand(Commands.ReadMeasurement); - Thread.Sleep(1); - Peripheral.Read(ReadBuffer.Span[0..9]); + SendCommand(Commands.ReadMeasurement); + Thread.Sleep(1); + Peripheral.Read(ReadBuffer.Span[0..9]); - int value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; - conditions.Concentration = new Concentration(value, Units.Concentration.UnitType.PartsPerMillion); + int value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; + conditions.Concentration = new Concentration(value, Units.Concentration.UnitType.PartsPerMillion); - conditions.Temperature = CalcTemperature(ReadBuffer.Span[3], ReadBuffer.Span[4]); + conditions.Temperature = CalcTemperature(ReadBuffer.Span[3], ReadBuffer.Span[4]); - value = ReadBuffer.Span[6] << 8 | ReadBuffer.Span[8]; - double humidiy = 100 * value / 65536.0; - conditions.Humidity = new RelativeHumidity(humidiy, RelativeHumidity.UnitType.Percent); + value = ReadBuffer.Span[6] << 8 | ReadBuffer.Span[8]; + double humidiy = 100 * value / 65536.0; + conditions.Humidity = new RelativeHumidity(humidiy, RelativeHumidity.UnitType.Percent); - return conditions; - }); + return conditions; } Units.Temperature CalcTemperature(byte valueHigh, byte valueLow) @@ -247,28 +244,6 @@ protected void RaiseChangedAndNotify(IChangeResult<(Concentration? Concentration base.RaiseEventsAndNotify(changeResult); } - byte GetCrc(byte value1, byte value2) - { - static byte CrcCalc(byte crc, byte value) - { - crc ^= value; - for (byte crcBit = 8; crcBit > 0; --crcBit) - { - if ((crc & 0x80) > 0) - { - crc = (byte)((crc << 1) ^ 0x31); - } - else - { - crc <<= 1; - } - } - return crc; - } - - return CrcCalc(CrcCalc(0xFF, value1), value2); - } - async Task ISensor.Read() => (await Read()).Temperature.Value; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs index 7aead6f425..ef7d5bb1a2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs @@ -18,14 +18,14 @@ public partial class NeoM8 /// /// Create a new NeoM8 object using I2C /// - public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IPin resetPin = null, IPin ppsPin = null) + public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IPin resetPin = null, IPin ppsPin = null) { - if(resetPin != null) + if (resetPin != null) { resetPort = resetPin.CreateDigitalOutputPort(true); } - if(ppsPin != null) + if (ppsPin != null) { ppsPort = ppsPin.CreateDigitalInputPort(InterruptMode.EdgeRising, ResistorMode.InternalPullDown); } @@ -62,7 +62,7 @@ async Task InitializeI2c(II2cBus i2cBus, byte address) async Task StartUpdatingI2c() { - await Task.Run(() => + var t = new Task(() => { int len; @@ -70,9 +70,9 @@ await Task.Run(() => { len = i2CPeripheral.ReadRegisterAsUShort(0xFD, ByteOrder.BigEndian); - if(len > 0) + if (len > 0) { - if(len > 0) + if (len > 0) { var data = i2cBuffer.Slice(0, Math.Min(len, BUFFER_SIZE)).Span; @@ -82,7 +82,9 @@ await Task.Run(() => } Thread.Sleep(COMMS_SLEEP_MS); } - }); + }, TaskCreationOptions.LongRunning); + t.Start(); + await t; } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs index db48d2c9c4..536905cbc5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs @@ -105,7 +105,7 @@ static bool HasMoreData(byte[] data) return !hasNullValue; } - await Task.Run(() => + var t = new Task(() => { while (true) { @@ -117,7 +117,8 @@ await Task.Run(() => Thread.Sleep(COMMS_SLEEP_MS); } } - }); + }, TaskCreationOptions.LongRunning); + await t; } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs index 4e900dba3c..fbe6d8b765 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Hid /// Represents an AS5013 Hall navigation sensor /// for analog joysticks /// - public partial class As5013 + public partial class As5013 : SamplingSensorBase, IAnalogJoystick { /// @@ -50,13 +50,13 @@ public DigitalJoystickPosition? DigitalPosition { get { - if(IsSampling == false) + if (IsSampling == false) { Update(); } return GetDigitalJoystickPosition(); } - } + } readonly II2cPeripheral i2CPeripheral; @@ -70,7 +70,7 @@ public As5013(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalIn { i2CPeripheral = new I2cPeripheral(i2cBus, address); - if(interruptPort != null) + if (interruptPort != null) { interruptPort.Changed += (s, e) => Interrupt?.Invoke(s, EventArgs.Empty); } @@ -106,14 +106,15 @@ public override void StartUpdating(TimeSpan? updateInterval) SamplingTokenSource = new CancellationTokenSource(); - Task.Run(() => + var t = new Task(() => { while (!SamplingTokenSource.IsCancellationRequested) { Update(); Thread.Sleep((int)UpdateInterval.TotalMilliseconds); } - }, SamplingTokenSource.Token); + }, SamplingTokenSource.Token, TaskCreationOptions.LongRunning); + t.Start(); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs index d01bcc8d26..002fde489a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs @@ -1,5 +1,4 @@ using Meadow.Hardware; -using Meadow.Peripherals.Sensors; using System; using System.Threading; using System.Threading.Tasks; @@ -103,14 +102,15 @@ public void StartUpdating(TimeSpan? updateInterval) SamplingTokenSource = new CancellationTokenSource(); CancellationToken ct = SamplingTokenSource.Token; - Task.Run(() => + var t = new Task(() => { - while(ct.IsCancellationRequested == false) + while (ct.IsCancellationRequested == false) { Update(); Thread.Sleep(updateInterval.Value); } - }); + }, ct, TaskCreationOptions.LongRunning); + t.Start(); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs index a4ea3346f3..49a38db82b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs @@ -36,7 +36,7 @@ public partial class Bh1745 /// The current Illuminance value /// public Illuminance? Illuminance => Conditions.AmbientLight; - + /// /// Interrupt reset status /// @@ -258,38 +258,31 @@ public Bh1745(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// The latest sensor reading protected override Task<(Illuminance? AmbientLight, Color? Color, bool Valid)> ReadSensor() { - return Task.Run(() => - { - (Illuminance? AmbientLight, Color? Color, bool Valid) conditions; + (Illuminance? AmbientLight, Color? Color, bool Valid) conditions; - // get the ambient light - var clearData = ReadClearDataRegister(); + // get the ambient light + var clearData = ReadClearDataRegister(); - if (clearData == 0) { conditions.Color = Color.Black; } + if (clearData == 0) { conditions.Color = Color.Black; } - // apply channel multipliers and normalize - double compensatedRed = ReadRedDataRegister() * CompensationMultipliers.Red / (int)MeasurementTime * 360; - double compensatedGreen = ReadGreenDataRegister() * CompensationMultipliers.Green / (int)MeasurementTime * 360; - double compensatedBlue = ReadBlueDataRegister() * CompensationMultipliers.Blue / (int)MeasurementTime * 360; - double compensatedClear = clearData * CompensationMultipliers.Clear / (int)MeasurementTime * 360; + // apply channel multipliers and normalize + double compensatedRed = ReadRedDataRegister() * CompensationMultipliers.Red / (int)MeasurementTime * 360; + double compensatedGreen = ReadGreenDataRegister() * CompensationMultipliers.Green / (int)MeasurementTime * 360; + double compensatedBlue = ReadBlueDataRegister() * CompensationMultipliers.Blue / (int)MeasurementTime * 360; + double compensatedClear = clearData * CompensationMultipliers.Clear / (int)MeasurementTime * 360; - // scale relative to clear - int red = (int)Math.Min(255, compensatedRed / compensatedClear * 255); - int green = (int)Math.Min(255, compensatedGreen / compensatedClear * 255); - int blue = (int)Math.Min(255, compensatedBlue / compensatedClear * 255); + // scale relative to clear + int red = (int)Math.Min(255, compensatedRed / compensatedClear * 255); + int green = (int)Math.Min(255, compensatedGreen / compensatedClear * 255); + int blue = (int)Math.Min(255, compensatedBlue / compensatedClear * 255); - conditions.Color = Color.FromRgb(red, green, blue); + conditions.Color = Color.FromRgb(red, green, blue); - // TODO: honestly, no idea what this comes back as - // need to test when i get a sensor and compare to other light - // sensors - conditions.AmbientLight = new Illuminance(compensatedClear, Units.Illuminance.UnitType.Lux); + conditions.AmbientLight = new Illuminance(compensatedClear, Units.Illuminance.UnitType.Lux); - // WTH - conditions.Valid = ReadMeasurementIsValid(); + conditions.Valid = ReadMeasurementIsValid(); - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs index a5e68f32e3..16cd2ecbf1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs @@ -1,11 +1,10 @@ using Meadow.Hardware; using Meadow.Peripherals.Sensors.Light; using Meadow.Units; -using IU = Meadow.Units.Illuminance.UnitType; using System; using System.Buffers.Binary; using System.Threading.Tasks; -using System.Threading; +using IU = Meadow.Units.Illuminance.UnitType; namespace Meadow.Foundation.Sensors.Light { @@ -68,36 +67,33 @@ private void Initialize() /// Read the current luminocity /// /// The current Illuminance value - protected override Task ReadSensor() + protected async override Task ReadSensor() { - return Task.Run(() => + if (MeasuringMode == MeasuringModes.OneTimeHighResolutionMode || + MeasuringMode == MeasuringModes.OneTimeHighResolutionMode2 || + MeasuringMode == MeasuringModes.OneTimeLowResolutionMode) { - if (MeasuringMode == MeasuringModes.OneTimeHighResolutionMode || - MeasuringMode == MeasuringModes.OneTimeHighResolutionMode2 || - MeasuringMode == MeasuringModes.OneTimeLowResolutionMode) - { - Peripheral.Write((byte)Commands.PowerOn); - } + Peripheral.Write((byte)Commands.PowerOn); + } - Peripheral.Write((byte)MeasuringMode); + Peripheral.Write((byte)MeasuringMode); - //wait for the measurement to complete before reading - Thread.Sleep(GetMeasurementTime(MeasuringMode)); + //wait for the measurement to complete before reading + await Task.Delay(GetMeasurementTime(MeasuringMode)); - Peripheral.Read(ReadBuffer.Span[0..2]); + Peripheral.Read(ReadBuffer.Span[0..2]); - ushort raw = BinaryPrimitives.ReadUInt16BigEndian(ReadBuffer.Span[0..2]); + ushort raw = BinaryPrimitives.ReadUInt16BigEndian(ReadBuffer.Span[0..2]); - double result = raw / (1.2 * lightTransmittance); + double result = raw / (1.2 * lightTransmittance); - if (MeasuringMode == MeasuringModes.ContinuouslyHighResolutionMode2 || - MeasuringMode == MeasuringModes.OneTimeHighResolutionMode2) - { - result *= 2; - } + if (MeasuringMode == MeasuringModes.ContinuouslyHighResolutionMode2 || + MeasuringMode == MeasuringModes.OneTimeHighResolutionMode2) + { + result *= 2; + } - return new Illuminance(result, IU.Lux); - }); + return new Illuminance(result, IU.Lux); } TimeSpan GetMeasurementTime(MeasuringModes mode) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs index 27adaebccc..4e6a1ececf 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs @@ -1,7 +1,7 @@ -using System; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Light { @@ -16,7 +16,7 @@ public partial class Max44009 : ByteCommsSensorBase /// The I2C bus /// The I2C address public Max44009(II2cBus i2cBus, byte address = (byte)Addresses.Default) - : base (i2cBus, address) + : base(i2cBus, address) { Initialize(); } @@ -35,19 +35,16 @@ protected void Initialize() /// The latest sensor reading protected override Task ReadSensor() { - return Task.Run(() => { - - Peripheral.ReadRegister(0x03, ReadBuffer.Span[0..2]); + Peripheral.ReadRegister(0x03, ReadBuffer.Span[0..2]); - var exponent = (ReadBuffer.Span[0] >> 4); - if (exponent == 0x0f) throw new Exception("Out of range"); + var exponent = (ReadBuffer.Span[0] >> 4); + if (exponent == 0x0f) throw new Exception("Out of range"); - int mantissa = ((ReadBuffer.Span[0] & 0x0F) >> 4) | (ReadBuffer.Span[1] & 0x0F); + int mantissa = ((ReadBuffer.Span[0] & 0x0F) >> 4) | (ReadBuffer.Span[1] & 0x0F); - var luminance = Math.Pow(2, exponent) * mantissa * 0.72; + var luminance = Math.Pow(2, exponent) * mantissa * 0.72; - return new Illuminance(luminance, Illuminance.UnitType.Lux); - }); + return Task.FromResult(new Illuminance(luminance, Illuminance.UnitType.Lux)); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs index 218a9f04c8..92afb2129d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs @@ -1,8 +1,8 @@ -using System; +using Meadow.Hardware; +using Meadow.Units; +using System; using System.Threading; using System.Threading.Tasks; -using Meadow.Hardware; -using Meadow.Units; namespace Meadow.Foundation.Sensors.Light { @@ -34,38 +34,28 @@ public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) /// Read data from the sensor /// /// Returns visible, ultraviolet index and ifrared data - protected async override Task<(Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared)> ReadSensor() + protected override Task<(Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared)> ReadSensor() { - return await Task.Run(() => - { - (Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared) conditions; + (Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared) conditions; - // ultraviolet (UV) index - Peripheral.ReadRegister(0x2C, ReadBuffer.Span[0..2]); - int rawUVIndex = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; - conditions.UltravioletIndex = rawUVIndex / 100.0; + // ultraviolet (UV) index + Peripheral.ReadRegister(0x2C, ReadBuffer.Span[0..2]); + int rawUVIndex = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; + conditions.UltravioletIndex = rawUVIndex / 100.0; - // Infrared - Peripheral.ReadRegister(0x22, ReadBuffer.Span[0..2]); - int rawInfrared = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; - conditions.Infrared = new Illuminance(rawInfrared, Illuminance.UnitType.Lux); + // Infrared + Peripheral.ReadRegister(0x22, ReadBuffer.Span[0..2]); + int rawInfrared = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; + conditions.Infrared = new Illuminance(rawInfrared, Illuminance.UnitType.Lux); - // Visible - Peripheral.ReadRegister(0x24, ReadBuffer.Span[0..2]); - int rawVisible = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; - conditions.VisibleLight = new Illuminance(rawVisible, Illuminance.UnitType.Lux); + // Visible + Peripheral.ReadRegister(0x24, ReadBuffer.Span[0..2]); + int rawVisible = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; + conditions.VisibleLight = new Illuminance(rawVisible, Illuminance.UnitType.Lux); - return conditions; - }); + return Task.FromResult(conditions); } - //public double GetProximity() - //{ - // byte[] data = Peripheral.ReadRegisters(0x26, 2); - // int result = (data[1] << 8) | data[0]; - // return result; - //} - private void Initialize() { Reset(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs index 022314fa5b..32ed298d5e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs @@ -119,34 +119,31 @@ public Tsl2591(II2cBus i2cBus, /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(Illuminance? FullSpectrum, Illuminance? Infrared, Illuminance? VisibleLight, Illuminance? Integrated)> ReadSensor() + protected override Task<(Illuminance? FullSpectrum, Illuminance? Infrared, Illuminance? VisibleLight, Illuminance? Integrated)> ReadSensor() { - (Illuminance FullSpectrum, Illuminance Infrared, Illuminance VisibleLight, Illuminance Integrated) conditions; + (Illuminance? FullSpectrum, Illuminance? Infrared, Illuminance? VisibleLight, Illuminance? Integrated) conditions; - return await Task.Run(() => - { - // data sheet indicates you should always read all 4 bytes, in order, for valid data - var channel0 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH0DataL | Register.Command)); - var channel1 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH1DataL | Register.Command)); + // data sheet indicates you should always read all 4 bytes, in order, for valid data + var channel0 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH0DataL | Register.Command)); + var channel1 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH1DataL | Register.Command)); - conditions.FullSpectrum = new Illuminance(channel0, IU.Lux); - conditions.Infrared = new Illuminance(channel1, IU.Lux); - conditions.VisibleLight = new Illuminance(channel0 - channel1, IU.Lux); + conditions.FullSpectrum = new Illuminance(channel0, IU.Lux); + conditions.Infrared = new Illuminance(channel1, IU.Lux); + conditions.VisibleLight = new Illuminance(channel0 - channel1, IU.Lux); - double countsPerLux; + double countsPerLux; - if ((channel0 == 0xffff) || (channel1 == 0xffff)) - { - conditions.Integrated = new Illuminance(-1, IU.Lux); - } - else - { - countsPerLux = (IntegrationTimeInMilliseconds(IntegrationTime) * GainMultiplier(Gain)) / 408.0; - conditions.Integrated = new Illuminance((channel0 - channel1) * (1 - (channel1 / channel0)) / countsPerLux, IU.Lux); - } + if ((channel0 == 0xffff) || (channel1 == 0xffff)) + { + conditions.Integrated = new Illuminance(-1, IU.Lux); + } + else + { + countsPerLux = (IntegrationTimeInMilliseconds(IntegrationTime) * GainMultiplier(Gain)) / 408.0; + conditions.Integrated = new Illuminance((channel0 - channel1) * (1 - (channel1 / channel0)) / countsPerLux, IU.Lux); + } - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs index b4e6cc7218..2ff52664ce 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs @@ -1,10 +1,8 @@ -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors.Light; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Light { @@ -17,7 +15,7 @@ public partial class Veml7700 : ByteCommsSensorBase, ILightSensor, /// Raised when the luminosity value changes /// public event EventHandler> LuminosityUpdated = delegate { }; - + /// /// Raised when the high range is exceeded /// @@ -63,81 +61,77 @@ public Veml7700(II2cBus i2cBus) /// The latest sensor reading protected async override Task ReadSensor() { - return await Task.Run(async () => - { - Illuminance illuminance = new Illuminance(0); + Illuminance illuminance = new Illuminance(0); - if (_firstRead) - { - WriteRegister(Registers.AlsConf0, 0); - //--//--// - await Task.Delay(5); - _firstRead = false; - } + if (_firstRead) + { + WriteRegister(Registers.AlsConf0, 0); + //--//--// + await Task.Delay(5); + _firstRead = false; + } - // priming read - var data = ReadRegister(DataSource == SensorTypes.Ambient ? Registers.Als : Registers.White); + // priming read + var data = ReadRegister(DataSource == SensorTypes.Ambient ? Registers.Als : Registers.White); - while (true) - { - _outOfRange = false; + while (true) + { + _outOfRange = false; - // Resolver.Log.Info($"{DataSource} DATA A: 0x{data:x4}"); + // Resolver.Log.Info($"{DataSource} DATA A: 0x{data:x4}"); - if (data > DATA_CEILING) - { // Too bright! - if (_gain > 1) + if (data > DATA_CEILING) + { // Too bright! + if (_gain > 1) + { + await SetGain(--_gain); + } + else if (data > DATA_CEILING) + { + // we're at min gain, have to speed integration time + if (++_integrationTime >= 4) { - await SetGain(--_gain); + // everything is maxed out + RangeExceededHigh?.Invoke(this, EventArgs.Empty); + _outOfRange = true; } - else if (data > DATA_CEILING) + else { - // we're at min gain, have to speed integration time - if (++_integrationTime >= 4) - { - // everything is maxed out - RangeExceededHigh?.Invoke(this, EventArgs.Empty); - _outOfRange = true; - } - else - { - await SetIntegrationTime(_integrationTime); - } + await SetIntegrationTime(_integrationTime); } } + } + else if (data < DATA_FLOOR) + { + // Too dim! + if (_gain < 4) + { + await SetGain(++_gain); + } else if (data < DATA_FLOOR) { - // Too dim! - if (_gain < 4) + // we're at max gain, have to slow integration time + if (--_integrationTime <= -2) { - await SetGain(++_gain); + RangeExceededLow?.Invoke(this, EventArgs.Empty); + _outOfRange = true; } - else if (data < DATA_FLOOR) + else { - // we're at max gain, have to slow integration time - if (--_integrationTime <= -2) - { - RangeExceededLow?.Invoke(this, EventArgs.Empty); - _outOfRange = true; - } - else - { - await SetIntegrationTime(_integrationTime); - } + await SetIntegrationTime(_integrationTime); } } + } - if ((data >= DATA_FLOOR && data <= DATA_CEILING) || _outOfRange) - { - return ScaleDataToIluminance(data, _gain, _integrationTime); - } - - await DelayForIntegrationTime(_integrationTime); - - data = ReadRegister(DataSource == SensorTypes.Ambient ? Registers.Als : Registers.White); + if ((data >= DATA_FLOOR && data <= DATA_CEILING) || _outOfRange) + { + return ScaleDataToIluminance(data, _gain, _integrationTime); } - }); + await DelayForIntegrationTime(_integrationTime); + + data = ReadRegister(DataSource == SensorTypes.Ambient ? Registers.Als : Registers.White); + } } private Illuminance ScaleDataToIluminance(ushort data, int gain, int integrationTime) @@ -155,11 +149,11 @@ private Illuminance ScaleDataToIluminance(ushort data, int gain, int integration case 4: // 2 scale = 2; break; - case 3: // 1 - default: + case 3: // 1 + default: scale = 1; break; - } + } switch (integrationTime) { @@ -324,7 +318,7 @@ private ushort ReadRegister(Registers register) private void WriteRegister(Registers register, ushort value) { Peripheral.WriteRegister((byte)register, value, ByteOrder.LittleEndian); - } + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs index 2225b695ec..4c8eea86fd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs @@ -194,32 +194,36 @@ public void SetCalibrationFactor(int factor, Mass knownValue) /// protected override Task ReadSensor() { - if (_gramsPerAdcUnit == 0) + //ReadADC() call may block so wrap the logic in a Task + return Task.Run(() => { - throw new Exception("Calibration factor has not been set"); - } + if (_gramsPerAdcUnit == 0) + { + throw new Exception("Calibration factor has not been set"); + } - // get an ADC conversion - var raw = ReadADC(); - // subtract the tare - var adc = raw - TareValue; + // get an ADC conversion + var raw = ReadADC(); + // subtract the tare + var adc = raw - TareValue; - // two's complement - int value; - if ((raw & 0x800000) != 0) - { - value = (int)(~adc + 1) * -1; - } - else - { - value = (int)adc; - } + // two's complement + int value; + if ((raw & 0x800000) != 0) + { + value = (int)(~adc + 1) * -1; + } + else + { + value = (int)adc; + } - // convert to grams - var grams = value * _gramsPerAdcUnit; + // convert to grams + var grams = value * _gramsPerAdcUnit; - // convert to desired units - return Task.FromResult(new Mass(grams, Units.Mass.UnitType.Grams)); + // convert to desired units + return new Mass(grams, Units.Mass.UnitType.Grams); + }); } private void CalculateRegisterValues(IPin sck, IPin dout) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs index 7e57421183..e4fe7232e8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.LoadCell { @@ -93,12 +93,12 @@ private void PowerOn() Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); Thread.Sleep(1); // make sure it has time to do it's thing _currentPU_CTRL &= ~PU_CTRL_BITS.RR; - + Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // turn on the analog and digital power _currentPU_CTRL |= (PU_CTRL_BITS.PUD | PU_CTRL_BITS.PUA); - + Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // wait for power-up ready var timeout = 100; @@ -130,7 +130,7 @@ private void PowerOn() // turn on cycle start _currentPU_CTRL = (PU_CTRL_BITS)(Peripheral?.ReadRegister((byte)Register.PU_CTRL) ?? 0); _currentPU_CTRL |= PU_CTRL_BITS.CS; - + Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); @@ -151,7 +151,7 @@ private void EnableCh2DecouplingCap() { // app note - enable ch2 decoupling cap var pga_pwr = Peripheral?.ReadRegister((byte)Register.PGA_PWR) ?? 0; pga_pwr |= 1 << 7; - + Peripheral?.WriteRegister((byte)Register.PGA_PWR, pga_pwr); } @@ -160,10 +160,10 @@ private void SetLDO(LdoVoltage value) var ctrl1 = Peripheral?.ReadRegister((byte)Register.CTRL1) ?? 0; ctrl1 &= 0b11000111; // clear LDO ctrl1 |= (byte)((byte)value << 3); - + Peripheral?.WriteRegister((byte)Register.CTRL1, ctrl1); _currentPU_CTRL |= PU_CTRL_BITS.AVDDS; - + Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // enable internal LDO } @@ -182,7 +182,7 @@ void SetConversionRate(ConversionRate value) var ctrl2 = Peripheral?.ReadRegister((byte)Register.CTRL2) ?? 0; ctrl2 &= 0b10001111; // clear gain ctrl2 |= (byte)((byte)value << 4); - + Peripheral?.WriteRegister((byte)Register.CTRL2, ctrl2); } @@ -192,7 +192,7 @@ bool CalibrateAdc() // turn on the calibration bit ctrl2 |= (byte)CTRL2_BITS.CALS; - + Peripheral?.WriteRegister((byte)Register.CTRL2, ctrl2); do @@ -220,7 +220,7 @@ bool CalibrateAdc() /// /// The calibration factor as an int public int CalculateCalibrationFactor() - { + { var reads = 5; var sum = 0; @@ -239,7 +239,7 @@ public int CalculateCalibrationFactor() public void SetCalibrationFactor(int factor, Mass knownValue) { Resolver.Log.Info($"SetCalibrationFactor: knownValue.Grams: {knownValue.Grams:N1}"); - _gramsPerAdcUnit = knownValue.Grams / (double)factor; + _gramsPerAdcUnit = knownValue.Grams / factor; } int DoConversion() @@ -263,24 +263,21 @@ int DoConversion() /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task ReadSensor() + protected override Task ReadSensor() { - return await Task.Run(() => + if (_gramsPerAdcUnit == 0) { - if (_gramsPerAdcUnit == 0) - { - throw new Exception("Calibration factor has not been set"); - } + throw new Exception("Calibration factor has not been set"); + } - // get an ADC conversion - var c = DoConversion(); - // subtract the tare - var adc = c - _tareValue; - // convert to grams - var grams = adc * _gramsPerAdcUnit; - // convert to desired units - return new Mass(grams, Units.Mass.UnitType.Grams); - }); + // get an ADC conversion + var c = DoConversion(); + // subtract the tare + var adc = c - _tareValue; + // convert to grams + var grams = adc * _gramsPerAdcUnit; + // convert to desired units + return Task.FromResult(new Mass(grams, Units.Mass.UnitType.Grams)); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Adxl3xxBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Adxl3xxBase.cs index ef00703841..e56a97929e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Adxl3xxBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Adxl3xxBase.cs @@ -84,16 +84,13 @@ protected override void RaiseEventsAndNotify(IChangeResult chang /// Reads data from the sensor /// /// The latest sensor reading - protected override Task ReadSensor() + protected async override Task ReadSensor() { - return Task.Run(async () => - { - var x = await XAnalogIn.Read(); - var y = await YAnalogIn.Read(); - var z = await ZAnalogIn.Read(); + var x = await XAnalogIn.Read(); + var y = await YAnalogIn.Read(); + var z = await ZAnalogIn.Read(); - return new Acceleration3D(VoltageToGravity(x), VoltageToGravity(y), VoltageToGravity(z)); - }); + return new Acceleration3D(VoltageToGravity(x), VoltageToGravity(y), VoltageToGravity(z)); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs index 1838f149d4..3a4613c2da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs @@ -3,13 +3,12 @@ using Meadow.Peripherals.Sensors.Motion; using Meadow.Units; using System; -using System.Threading; using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Motion { /// - /// Driver for the ADXL345 triple axis accelerometer. + /// Driver for the ADXL345 triple axis accelerometer /// +/- 16g /// public partial class Adxl345 : ByteCommsSensorBase, IAccelerometer @@ -40,8 +39,8 @@ public partial class Adxl345 : ByteCommsSensorBase, IAcceleromet /// public sbyte OffsetX { - get => (sbyte)ReadRegister(Register.OFFSET_X); - set => WriteRegister(Register.OFFSET_X, (byte)value); + get => (sbyte)ReadRegister(Register.OFFSET_X); + set => WriteRegister(Register.OFFSET_X, (byte)value); } /// @@ -52,8 +51,8 @@ public sbyte OffsetX /// public sbyte OffsetY { - get => (sbyte)ReadRegister(Register.OFFSET_Y); - set => WriteRegister(Register.OFFSET_Y, (byte)value); + get => (sbyte)ReadRegister(Register.OFFSET_Y); + set => WriteRegister(Register.OFFSET_Y, (byte)value); } /// @@ -64,8 +63,8 @@ public sbyte OffsetY /// public sbyte OffsetZ { - get => (sbyte)ReadRegister(Register.OFFSET_Z); - set => WriteRegister(Register.OFFSET_Z, (byte)value); + get => (sbyte)ReadRegister(Register.OFFSET_Z); + set => WriteRegister(Register.OFFSET_Z, (byte)value); } /// @@ -100,17 +99,14 @@ public Adxl345(II2cBus i2cBus, byte address) /// Current acceleration protected override Task ReadSensor() { - return Task.Run(() => - { - // read the data from the sensor starting at the X0 register - Peripheral.ReadRegister((byte)Register.X0, ReadBuffer.Span[0..6]); - - return new Acceleration3D( - new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[0] + (ReadBuffer.Span[1] << 8)), Acceleration.UnitType.Gravity), - new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[2] + (ReadBuffer.Span[3] << 8)), Acceleration.UnitType.Gravity), - new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[4] + (ReadBuffer.Span[5] << 8)), Acceleration.UnitType.Gravity) - ); - }); + Peripheral.ReadRegister((byte)Register.X0, ReadBuffer.Span[0..6]); + + var conditions = new Acceleration3D( + new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[0] + (ReadBuffer.Span[1] << 8)), Acceleration.UnitType.Gravity), + new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[2] + (ReadBuffer.Span[3] << 8)), Acceleration.UnitType.Gravity), + new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[4] + (ReadBuffer.Span[5] << 8)), Acceleration.UnitType.Gravity)); + + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index 8cb6781115..a10d08078d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -372,31 +372,26 @@ public override void StopUpdating() /// The latest sensor reading protected override Task<(Acceleration3D? Acceleration3D, Units.Temperature? Temperature)> ReadSensor() { - return Task.Run(() => - { - (Acceleration3D? Acceleration3D, Units.Temperature? Temperature) conditions; + (Acceleration3D? Acceleration3D, Units.Temperature? Temperature) conditions; - // read the XYZ and Temp registers in one go - WriteBuffer.Span[0] = Commands.READ_REGISTER; - WriteBuffer.Span[1] = Registers.X_AXIS_LSB; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..8]); - - // milli-gravity (1/1000 G) - conditions.Acceleration3D = new Acceleration3D( - new Acceleration((short)((ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]) / 1000d, AU.Gravity), - new Acceleration((short)((ReadBuffer.Span[3] << 8) | ReadBuffer.Span[2]) / 1000d, AU.Gravity), - new Acceleration((short)((ReadBuffer.Span[5] << 8) | ReadBuffer.Span[4]) / 1000d, AU.Gravity) - ); - - double rawTemp = (short)((ReadBuffer.Span[7] << 8) | ReadBuffer.Span[6]); - // decimal doesn't come in, so 20.0C comes in as `200`. and also have to remove the bias. - double tempC = (rawTemp - AVERAGE_TEMPERATURE_BIAS) / 10d; - conditions.Temperature = new Units.Temperature(tempC, TU.Celsius); - - return conditions; - }); - } + // read the XYZ and Temp registers in one go + WriteBuffer.Span[0] = Commands.READ_REGISTER; + WriteBuffer.Span[1] = Registers.X_AXIS_LSB; + Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..8]); + + // milli-gravity (1/1000 G) + conditions.Acceleration3D = new Acceleration3D( + new Acceleration((short)((ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]) / 1000d, AU.Gravity), + new Acceleration((short)((ReadBuffer.Span[3] << 8) | ReadBuffer.Span[2]) / 1000d, AU.Gravity), + new Acceleration((short)((ReadBuffer.Span[5] << 8) | ReadBuffer.Span[4]) / 1000d, AU.Gravity)); + double rawTemp = (short)((ReadBuffer.Span[7] << 8) | ReadBuffer.Span[6]); + // decimal doesn't come in, so 20.0C comes in as `200`. and also have to remove the bias. + double tempC = (rawTemp - AVERAGE_TEMPERATURE_BIAS) / 10d; + conditions.Temperature = new Units.Temperature(tempC, TU.Celsius); + + return Task.FromResult(conditions); + } /// /// Configure the activity threshold and activity time. Once configured it will be @@ -455,9 +450,7 @@ public void ConfigureInactivityThreshold(ushort threshold, ushort numberOfSample { throw new ArgumentOutOfRangeException(nameof(threshold), "Inactivity threshold should be in the range 0-0x7ff"); } - // // The threshold and number of samples register are in consecutive locations. - // WriteBuffer.Span[0] = Commands.WRITE_REGISTER; WriteBuffer.Span[1] = Registers.INACTIVITY_TIME_COUNT_LSB; WriteBuffer.Span[2] = (byte)(threshold & 0xff); @@ -475,14 +468,7 @@ public void ConfigureInactivityThreshold(ushort threshold, ushort numberOfSample /// Resistor mode mapping based upon the active low state. private ResistorMode MapResistorMode(bool activeLow) { - if (activeLow) - { - return (ResistorMode.InternalPullUp); - } - else - { - return (ResistorMode.InternalPullDown); - } + return activeLow ? ResistorMode.InternalPullUp : ResistorMode.InternalPullDown; } /// @@ -493,14 +479,7 @@ private ResistorMode MapResistorMode(bool activeLow) /// Interrupt mode mapping based upon the active low state. private InterruptMode MapInterruptMode(bool activeLow) { - if (activeLow) - { - return (InterruptMode.EdgeFalling); - } - else - { - return (InterruptMode.EdgeRising); - } + return activeLow ? InterruptMode.EdgeFalling : InterruptMode.EdgeRising; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs index ebb60674dc..1b904d6c1d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs @@ -26,8 +26,7 @@ public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? public event EventHandler> ColorUpdated = delegate { }; readonly IDigitalInputPort interruptPort; - - GestureData gestureData; + readonly GestureData gestureData; int gestureUdDelta; int gestureLrDelta; int gestureUdCount; @@ -90,35 +89,31 @@ public Apds9960(II2cBus i2cBus, IPin interruptPin) /// The latest sensor reading protected override Task<(Color? Color, Illuminance? AmbientLight)> ReadSensor() { - return Task.Run(() => - { - - (Color? Color, Illuminance? AmbientLight) conditions; + (Color? Color, Illuminance? AmbientLight) conditions; - // TODO: before each of these readings, we need to check to see - // if that feature is enabled, and if it's not, skip it and set - // the `conditions.[feature] = null;` + // TODO: before each of these readings, we need to check to see + // if that feature is enabled, and if it's not, skip it and set + // the `conditions.[feature] = null;` - //---- ambient light - // TODO: someone needs to verify this - // have no idea if this conversion is correct. the exten of the datasheet documentation is: - // "RGBC results can be used to calculate ambient light levels (i.e. Lux) and color temperature (i.e. Kelvin)." - // NOTE: looks correct, actually. reading ~600 lux in my office and went to 4k LUX when i moved the sensor to the window - var ambient = ReadAmbientLight(); - conditions.AmbientLight = new Illuminance(ambient, Illuminance.UnitType.Lux); + //---- ambient light + // TODO: someone needs to verify this + // have no idea if this conversion is correct. the exten of the datasheet documentation is: + // "RGBC results can be used to calculate ambient light levels (i.e. Lux) and color temperature (i.e. Kelvin)." + // NOTE: looks correct, actually. reading ~600 lux in my office and went to 4k LUX when i moved the sensor to the window + var ambient = ReadAmbientLight(); + conditions.AmbientLight = new Illuminance(ambient, Illuminance.UnitType.Lux); - //---- color - // TODO: someone needs to verify this. - var rgbDivisor = 65536 / 256; // come back as 16-bit values (ushorts). need to be byte. - var r = (int)(ReadRedLight() / rgbDivisor); - var g = (int)(ReadGreenLight() / rgbDivisor); - var b = (int)(ReadBlueLight() / rgbDivisor); - var a = (int)(ambient / rgbDivisor); + //---- color + // TODO: someone needs to verify this. + var rgbDivisor = 65536 / 256; // come back as 16-bit values (ushorts). need to be byte. + var r = ReadRedLight() / rgbDivisor; + var g = ReadGreenLight() / rgbDivisor; + var b = ReadBlueLight() / rgbDivisor; + var a = ambient / rgbDivisor; - conditions.Color = Foundation.Color.FromRgba(r, g, b, a); + conditions.Color = Foundation.Color.FromRgba(r, g, b, a); - return conditions; - }); + return Task.FromResult(conditions); } /// @@ -983,12 +978,10 @@ void SetAmbientLightGain(byte drive) { byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); - /* Set bits in register to given value */ drive &= 0b00000011; val &= 0b11111100; val |= drive; - /* Write register value back into CONTROL register */ Peripheral.WriteRegister(Registers.APDS9960_CONTROL, val); } @@ -1325,7 +1318,7 @@ ushort GetLightIntLowThreshold() var val_byte = Peripheral.ReadRegister(Registers.APDS9960_AILTH); - return (byte)(threshold + ((ushort)val_byte << 8)); + return (byte)(threshold + (val_byte << 8)); } /** @@ -1359,7 +1352,7 @@ ushort GetLightIntHighThreshold() var val_byte = Peripheral.ReadRegister(Registers.APDS9960_AIHTH); - return (byte)(threshold + ((ushort)val_byte << 8)); + return (byte)(threshold + (val_byte << 8)); } /** diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index 56c3ee9081..ea7ed992fa 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -171,85 +171,82 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce /// The latest sensor reading protected override Task<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)> ReadSensor() { - return Task.Run(() => + (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature) conditions; + + //12 bytes - includes accel and gyro + var data = ReadAccelerationData(); + + //likely +/- 2g by default + var accelX = (short)(data[1] << 8 | data[0]); + var accelY = (short)(data[3] << 8 | data[2]); + var accelZ = (short)(data[5] << 8 | data[4]); + + double divisor = CurrentAccelerationRange switch + { + AccelerationRange._2g => 16384, + AccelerationRange._4g => 8192, + AccelerationRange._8g => 4096, + AccelerationRange._16g => 2048, + _ => throw new ArgumentException("CurrentAccelerationRange is out of range") + }; + + var gX = accelX / divisor; + var gY = accelY / divisor; + var gZ = accelZ / divisor; + + divisor = CurrentAngularVelocityRange switch + { + AngularVelocityRange._2000dps => 16.4, + AngularVelocityRange._1000dps => 32.8, + AngularVelocityRange._500dps => 65.5, + AngularVelocityRange._250dps => 131, + AngularVelocityRange._125dps => 262, + + _ => throw new ArgumentException("CurrentAngularAccelerationRange is out of range") + }; + + var gyroX = (short)(data[7] << 8 | data[6]); + var gyroY = (short)(data[9] << 8 | data[8]); + var gyroZ = (short)(data[11] << 8 | data[10]); + + var dpsX = gyroX / divisor; + var dpsY = gyroY / divisor; + var dpsZ = gyroZ / divisor; + + conditions.Acceleration3D = new Acceleration3D( + new Acceleration(gX, Acceleration.UnitType.Gravity), + new Acceleration(gY, Acceleration.UnitType.Gravity), + new Acceleration(gZ, Acceleration.UnitType.Gravity)); + + conditions.AngularVelocity3D = new AngularVelocity3D( + new AngularVelocity(dpsX, AngularVelocity.UnitType.DegreesPerSecond), + new AngularVelocity(dpsY, AngularVelocity.UnitType.DegreesPerSecond), + new AngularVelocity(dpsZ, AngularVelocity.UnitType.DegreesPerSecond)); + + //Get the temperature + ushort tempRaw = (ushort)(i2cPeripheral.ReadRegister(TEMPERATURE_1) << 8 | i2cPeripheral.ReadRegister(TEMPERATURE_0)); + double tempC; + + double degreePerByte = 0.001953125; //in celcius + + if (tempRaw < 0x8000) + { + tempC = 23 + tempRaw * degreePerByte; + } + else { - (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature) conditions; - - //12 bytes - includes accel and gyro - var data = ReadAccelerationData(); - - //likely +/- 2g by default - var accelX = (short)(data[1] << 8 | data[0]); - var accelY = (short)(data[3] << 8 | data[2]); - var accelZ = (short)(data[5] << 8 | data[4]); - - double divisor = CurrentAccelerationRange switch - { - AccelerationRange._2g => 16384, - AccelerationRange._4g => 8192, - AccelerationRange._8g => 4096, - AccelerationRange._16g => 2048, - _ => throw new ArgumentException("CurrentAccelerationRange is out of range") - }; - - var gX = accelX / divisor; - var gY = accelY / divisor; - var gZ = accelZ / divisor; - - divisor = CurrentAngularVelocityRange switch - { - AngularVelocityRange._2000dps => 16.4, - AngularVelocityRange._1000dps => 32.8, - AngularVelocityRange._500dps => 65.5, - AngularVelocityRange._250dps => 131, - AngularVelocityRange._125dps => 262, - - _ => throw new ArgumentException("CurrentAngularAccelerationRange is out of range") - }; - - var gyroX = (short)(data[7] << 8 | data[6]); - var gyroY = (short)(data[9] << 8 | data[8]); - var gyroZ = (short)(data[11] << 8 | data[10]); - - var dpsX = gyroX / divisor; - var dpsY = gyroY / divisor; - var dpsZ = gyroZ / divisor; - - conditions.Acceleration3D = new Acceleration3D( - new Acceleration(gX, Acceleration.UnitType.Gravity), - new Acceleration(gY, Acceleration.UnitType.Gravity), - new Acceleration(gZ, Acceleration.UnitType.Gravity)); - - conditions.AngularVelocity3D = new AngularVelocity3D( - new AngularVelocity(dpsX, AngularVelocity.UnitType.DegreesPerSecond), - new AngularVelocity(dpsY, AngularVelocity.UnitType.DegreesPerSecond), - new AngularVelocity(dpsZ, AngularVelocity.UnitType.DegreesPerSecond)); - - //Get the temperature - ushort tempRaw = (ushort)(i2cPeripheral.ReadRegister(TEMPERATURE_1) << 8 | i2cPeripheral.ReadRegister(TEMPERATURE_0)); - double tempC; - - double degreePerByte = 0.001953125; //in celcius - - if (tempRaw < 0x8000) - { - tempC = 23 + tempRaw * degreePerByte; - } - else - { - tempC = -41 + (tempRaw - 0x8000) * degreePerByte; - } - - if (tempRaw == 0x8000) - { //means we have an invalid temperature reading - conditions.Temperature = null; - } - else - { - conditions.Temperature = new Units.Temperature(tempC, Units.Temperature.UnitType.Celsius); - } - return conditions; - }); + tempC = -41 + (tempRaw - 0x8000) * degreePerByte; + } + + if (tempRaw == 0x8000) + { //means we have an invalid temperature reading + conditions.Temperature = null; + } + else + { + conditions.Temperature = new Units.Temperature(tempC, Units.Temperature.UnitType.Celsius); + } + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs index 60eb5da0ea..ae65db1b5a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs @@ -303,78 +303,75 @@ protected override Task< Acceleration3D? LinearAcceleration, Acceleration3D? GravityVector, EulerAngles? EulerOrientation, Units.Temperature? Temperature)> ReadSensor() { - return Task.Run(() => + if (PowerMode != PowerModes.NORMAL) { - if (PowerMode != PowerModes.NORMAL) - { - PowerMode = PowerModes.NORMAL; - } + PowerMode = PowerModes.NORMAL; + } - if (OperatingMode != OperatingModes.NINE_DEGREES_OF_FREEDOM) - { - OperatingMode = OperatingModes.NINE_DEGREES_OF_FREEDOM; - } + if (OperatingMode != OperatingModes.NINE_DEGREES_OF_FREEDOM) + { + OperatingMode = OperatingModes.NINE_DEGREES_OF_FREEDOM; + } - // The amazing Octple! - (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, - MagneticField3D? MagneticField3D, Quaternion? QuaternionOrientation, - Acceleration3D? LinearAcceleration, Acceleration3D? GravityVector, - EulerAngles? EulerOrientation, Units.Temperature? Temperature) conditions; - - // make all the readings - // This method reads ony the sensor motion / orientation registers. When - // accessing the data from a register it is necessary to subtract the - // access of the start of the sensor registers from the register required - // in order to get the correct offset into the _sensorReadings array. - - int length = Registers.GravityVectorZMSB + 1 - Registers.AccelerometerXLSB; - Peripheral.ReadRegister(Registers.AccelerometerXLSB, ReadBuffer.Span[0..length]); - - // for debugging, you can look at the raw data: - //DebugInformation.DisplayRegisters(0x00, ReadBuffer.Span[0..length].ToArray()); - - //---- Acceleration3D - double accelDivisor = 100.0; //m/s2 - var accelData = GetReadings(Registers.AccelerometerXLSB - Registers.StartOfSensorData, accelDivisor); - conditions.Acceleration3D = new Acceleration3D(accelData.X, accelData.Y, accelData.Z, Acceleration.UnitType.MetersPerSecondSquared); - - //---- AngularAcceleration3D - double angularDivisor = 900.0; //radians - var angularData = GetReadings(Registers.GyroscopeXLSB - Registers.StartOfSensorData, angularDivisor); - conditions.AngularVelocity3D = new AngularVelocity3D(angularData.X, angularData.Y, angularData.Z, AngularVelocity.UnitType.RadiansPerSecond); - - //---- MagneticField3D - var magnetometerData = GetReadings(Registers.MagnetometerXLSB - Registers.StartOfSensorData, 16.0); - conditions.MagneticField3D = new MagneticField3D(magnetometerData.X, magnetometerData.Y, magnetometerData.Z, MagneticField.UnitType.Tesla); - - //---- Quarternion Orientation - int quaternionData = Registers.QuaternionDataWLSB - Registers.StartOfSensorData; - short w = (short)((ReadBuffer.Span[quaternionData + 1] << 8) | ReadBuffer.Span[quaternionData]); - short x = (short)((ReadBuffer.Span[quaternionData + 3] << 8) | ReadBuffer.Span[quaternionData + 2]); - short y = (short)((ReadBuffer.Span[quaternionData + 5] << 8) | ReadBuffer.Span[quaternionData + 4]); - short z = (short)((ReadBuffer.Span[quaternionData + 5] << 8) | ReadBuffer.Span[quaternionData + 4]); - double factor = 1.0 / (1 << 14); - conditions.QuaternionOrientation = new Quaternion(w * factor, x * factor, y * factor, z * factor); - - //---- Linear Acceleration - double linearAccellDivisor = 100.0; //m/s2 - var linearAccelData = GetReadings(Registers.LinearAccelerationXLSB - Registers.StartOfSensorData, linearAccellDivisor); - conditions.LinearAcceleration = new Acceleration3D(linearAccelData.X, linearAccelData.Y, linearAccelData.Z, Acceleration.UnitType.MetersPerSecondSquared); - - //---- Gravity Vector - double gravityVectorDivisor = 100.0; //m/s2 - var gravityVectorData = GetReadings(Registers.GravityVectorXLSB - Registers.StartOfSensorData, gravityVectorDivisor); - conditions.GravityVector = new Acceleration3D(gravityVectorData.X, gravityVectorData.Y, gravityVectorData.Z, Acceleration.UnitType.MetersPerSecondSquared); - - //---- euler - double eulerDivisor = 900.0; //radians - conditions.EulerOrientation = ConvertReadingToEulerAngles(Registers.EulerAngleXLSB - Registers.StartOfSensorData, eulerDivisor); - - //---- temperature - conditions.Temperature = new Units.Temperature(Peripheral.ReadRegister(Registers.Temperature), Units.Temperature.UnitType.Celsius); - - return conditions; - }); + // The amazing Octple! + (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, + MagneticField3D? MagneticField3D, Quaternion? QuaternionOrientation, + Acceleration3D? LinearAcceleration, Acceleration3D? GravityVector, + EulerAngles? EulerOrientation, Units.Temperature? Temperature) conditions; + + // make all the readings + // This method reads ony the sensor motion / orientation registers. When + // accessing the data from a register it is necessary to subtract the + // access of the start of the sensor registers from the register required + // in order to get the correct offset into the _sensorReadings array. + + int length = Registers.GravityVectorZMSB + 1 - Registers.AccelerometerXLSB; + Peripheral.ReadRegister(Registers.AccelerometerXLSB, ReadBuffer.Span[0..length]); + + // for debugging, you can look at the raw data: + //DebugInformation.DisplayRegisters(0x00, ReadBuffer.Span[0..length].ToArray()); + + //---- Acceleration3D + double accelDivisor = 100.0; //m/s2 + var accelData = GetReadings(Registers.AccelerometerXLSB - Registers.StartOfSensorData, accelDivisor); + conditions.Acceleration3D = new Acceleration3D(accelData.X, accelData.Y, accelData.Z, Acceleration.UnitType.MetersPerSecondSquared); + + //---- AngularAcceleration3D + double angularDivisor = 900.0; //radians + var angularData = GetReadings(Registers.GyroscopeXLSB - Registers.StartOfSensorData, angularDivisor); + conditions.AngularVelocity3D = new AngularVelocity3D(angularData.X, angularData.Y, angularData.Z, AngularVelocity.UnitType.RadiansPerSecond); + + //---- MagneticField3D + var magnetometerData = GetReadings(Registers.MagnetometerXLSB - Registers.StartOfSensorData, 16.0); + conditions.MagneticField3D = new MagneticField3D(magnetometerData.X, magnetometerData.Y, magnetometerData.Z, MagneticField.UnitType.Tesla); + + //---- Quarternion Orientation + int quaternionData = Registers.QuaternionDataWLSB - Registers.StartOfSensorData; + short w = (short)((ReadBuffer.Span[quaternionData + 1] << 8) | ReadBuffer.Span[quaternionData]); + short x = (short)((ReadBuffer.Span[quaternionData + 3] << 8) | ReadBuffer.Span[quaternionData + 2]); + short y = (short)((ReadBuffer.Span[quaternionData + 5] << 8) | ReadBuffer.Span[quaternionData + 4]); + short z = (short)((ReadBuffer.Span[quaternionData + 5] << 8) | ReadBuffer.Span[quaternionData + 4]); + double factor = 1.0 / (1 << 14); + conditions.QuaternionOrientation = new Quaternion(w * factor, x * factor, y * factor, z * factor); + + //---- Linear Acceleration + double linearAccellDivisor = 100.0; //m/s2 + var linearAccelData = GetReadings(Registers.LinearAccelerationXLSB - Registers.StartOfSensorData, linearAccellDivisor); + conditions.LinearAcceleration = new Acceleration3D(linearAccelData.X, linearAccelData.Y, linearAccelData.Z, Acceleration.UnitType.MetersPerSecondSquared); + + //---- Gravity Vector + double gravityVectorDivisor = 100.0; //m/s2 + var gravityVectorData = GetReadings(Registers.GravityVectorXLSB - Registers.StartOfSensorData, gravityVectorDivisor); + conditions.GravityVector = new Acceleration3D(gravityVectorData.X, gravityVectorData.Y, gravityVectorData.Z, Acceleration.UnitType.MetersPerSecondSquared); + + //---- euler + double eulerDivisor = 900.0; //radians + conditions.EulerOrientation = ConvertReadingToEulerAngles(Registers.EulerAngleXLSB - Registers.StartOfSensorData, eulerDivisor); + + //---- temperature + conditions.Temperature = new Units.Temperature(Peripheral.ReadRegister(Registers.Temperature), Units.Temperature.UnitType.Celsius); + + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index 5d1770bf81..92df6b6cfb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Sensors.Motion { /// - /// Driver for the Hmc5883 digital compass. + /// Driver for the Hmc5883 digital compass /// /// This driver is untested /// @@ -85,7 +85,7 @@ protected virtual void Initialize() /// The updated sensor data protected override void RaiseEventsAndNotify(IChangeResult changeResult) { - this.DirectionUpdated?.Invoke(this, changeResult); + DirectionUpdated?.Invoke(this, changeResult); base.RaiseEventsAndNotify(changeResult); } @@ -95,13 +95,10 @@ protected override void RaiseEventsAndNotify(IChangeResult changeResult) /// The latest sensor reading protected override Task ReadSensor() { - return Task.Run(() => - { - ushort x = Peripheral.ReadRegisterAsUShort(Registers.HMC_X_MSB_REG_ADDR, ByteOrder.BigEndian); - ushort y = Peripheral.ReadRegisterAsUShort(Registers.HMC_Y_MSB_REG_ADDR, ByteOrder.BigEndian); - ushort z = Peripheral.ReadRegisterAsUShort(Registers.HMC_Z_MSB_REG_ADDR, ByteOrder.BigEndian); - return new Vector(x, y, z); - }); + ushort x = Peripheral.ReadRegisterAsUShort(Registers.HMC_X_MSB_REG_ADDR, ByteOrder.BigEndian); + ushort y = Peripheral.ReadRegisterAsUShort(Registers.HMC_Y_MSB_REG_ADDR, ByteOrder.BigEndian); + ushort z = Peripheral.ReadRegisterAsUShort(Registers.HMC_Z_MSB_REG_ADDR, ByteOrder.BigEndian); + return Task.FromResult(new Vector(x, y, z)); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs index 58e23a7ed9..d36cd4dd52 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs @@ -1,8 +1,7 @@ -using System; +using Meadow.Foundation.Spatial; +using Meadow.Hardware; using System.Threading; using System.Threading.Tasks; -using Meadow.Foundation.Spatial; -using Meadow.Hardware; namespace Meadow.Foundation.Sensors.Motion { @@ -55,19 +54,17 @@ override protected void Initialize() /// The latest sensor reading protected override Task ReadSensor() { - return Task.Run(() => { - Peripheral.ReadRegister(0x00, ReadBuffer.Span[0..6]); + Peripheral.ReadRegister(0x00, ReadBuffer.Span[0..6]); - ushort X = (ushort)(ReadBuffer.Span[0] | ReadBuffer.Span[1] << 8); - ushort Y = (ushort)(ReadBuffer.Span[2] | ReadBuffer.Span[3] << 8); - ushort Z = (ushort)(ReadBuffer.Span[4] | ReadBuffer.Span[5] << 8); + ushort X = (ushort)(ReadBuffer.Span[0] | ReadBuffer.Span[1] << 8); + ushort Y = (ushort)(ReadBuffer.Span[2] | ReadBuffer.Span[3] << 8); + ushort Z = (ushort)(ReadBuffer.Span[4] | ReadBuffer.Span[5] << 8); - var v = new Vector(X, Y, Z); + var v = new Vector(X, Y, Z); - Resolver.Log.Info($"{X}, {Y}, {Z} : {DirectionToHeading(v)}"); + Resolver.Log.Info($"{X}, {Y}, {Z} : {DirectionToHeading(v)}"); - return v; - }); + return Task.FromResult(v); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 8bfd7fd196..110b4a7ac4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -66,19 +66,13 @@ protected override void RaiseEventsAndNotify(IChangeResult chan /// The latest sensor reading protected override Task ReadSensor() { - return Task.Run(() => - { - MagneticField3D conditions; - - var mag = ReadMagnetometerRaw(); + var (x, y, z) = ReadMagnetometerRaw(); - conditions = new MagneticField3D(mag.x / 1500.0, mag.y / 1500.0, mag.z / 1500.0, MagneticField.UnitType.Gauss); + var conditions = new MagneticField3D(x / 1500.0, y / 1500.0, z / 1500.0, MagneticField.UnitType.Gauss); - return conditions; - }); + return Task.FromResult(conditions); } - /// /// Reads raw magnetometer data /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index 5131139e08..4b78302ba3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -102,18 +102,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce /// The latest sensor reading protected override Task<(Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D)> ReadSensor() { - return Task.Run(() => - { - (Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D) conditions; + (Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D) conditions; - var accel = ReadAccelerometerRaw(); - var mag = ReadMagnetometerRaw(); + var accel = ReadAccelerometerRaw(); + var mag = ReadMagnetometerRaw(); - conditions.Acceleration3D = GetAcceleration3D(accel.x, accel.y, accel.z, GetAccelerometerSensitivity()); - conditions.MagneticField3D = GetMagneticField3D(mag.x, mag.y, mag.z); + conditions.Acceleration3D = GetAcceleration3D(accel.x, accel.y, accel.z, GetAccelerometerSensitivity()); + conditions.MagneticField3D = GetMagneticField3D(mag.x, mag.y, mag.z); - return conditions; - }); + return Task.FromResult(conditions); } Acceleration3D GetAcceleration3D(short rawX, short rawY, short rawZ, AccSensitivity sensitivity) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs index 58ded7f4fd..0e35477069 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs @@ -169,26 +169,23 @@ protected override void RaiseEventsAndNotify(IChangeResult<(MagneticField3D? Mag /// The latest sensor reading protected override Task<(MagneticField3D? MagneticField3D, Units.Temperature? Temperature)> ReadSensor() { - return Task.Run(() => - { - (MagneticField3D? MagneticField3D, Units.Temperature? Temperature) conditions; + (MagneticField3D? MagneticField3D, Units.Temperature? Temperature) conditions; - var controlRegister = Peripheral.ReadRegister(Registers.CONTROL_1); - controlRegister |= 0x02; - Peripheral.WriteRegister(Registers.CONTROL_1, controlRegister); + var controlRegister = Peripheral.ReadRegister(Registers.CONTROL_1); + controlRegister |= 0x02; + Peripheral.WriteRegister(Registers.CONTROL_1, controlRegister); - Peripheral.ReadRegister(Registers.X_MSB, ReadBuffer.Span[0..6]); + Peripheral.ReadRegister(Registers.X_MSB, ReadBuffer.Span[0..6]); - conditions.MagneticField3D = new MagneticField3D( - new MagneticField((short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]), MagneticField.UnitType.MicroTesla), - new MagneticField((short)((ReadBuffer.Span[2] << 8) | ReadBuffer.Span[3]), MagneticField.UnitType.MicroTesla), - new MagneticField((short)((ReadBuffer.Span[4] << 8) | ReadBuffer.Span[5]), MagneticField.UnitType.MicroTesla) - ); + conditions.MagneticField3D = new MagneticField3D( + new MagneticField((short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]), MagneticField.UnitType.MicroTesla), + new MagneticField((short)((ReadBuffer.Span[2] << 8) | ReadBuffer.Span[3]), MagneticField.UnitType.MicroTesla), + new MagneticField((short)((ReadBuffer.Span[4] << 8) | ReadBuffer.Span[5]), MagneticField.UnitType.MicroTesla) + ); - conditions.Temperature = new Units.Temperature((sbyte)Peripheral.ReadRegister(Registers.TEMPERATURE), Units.Temperature.UnitType.Celsius); + conditions.Temperature = new Units.Temperature((sbyte)Peripheral.ReadRegister(Registers.TEMPERATURE), Units.Temperature.UnitType.Celsius); - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs index 985355d6cb..8675a2bbfd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs @@ -1,8 +1,8 @@ -using System; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors.Motion; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Motion { @@ -58,7 +58,7 @@ void Initialize() SetSampleRate(SampleRate._32); SetMode(SensorPowerMode.Active); } - + void SetMode(SensorPowerMode mode) { Peripheral.WriteRegister((byte)Registers.Mode, (byte)mode); @@ -90,12 +90,11 @@ protected override Task ReadSensor() //Signed byte 6-bit 2’s complement data with allowable range of +31 to -32 //[5] is 0 if the g direction is positive, 1 if the g direction is negative. + //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again do { x = Peripheral.ReadRegister((byte)Registers.XOUT); - } - //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again - while (x >= 64); + } while (x >= 64); //check bit 5 and flip to negative if ((x & (1 << 5)) != 0) xAccel = x - 64; @@ -104,19 +103,16 @@ protected override Task ReadSensor() do { y = Peripheral.ReadRegister((byte)Registers.YOUT); - } - //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again - while (y >= 64); + } while (y >= 64); //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again if ((y & (1 << 5)) != 0) yAccel = y - 64; else yAccel = y; + //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again do { z = Peripheral.ReadRegister((byte)Registers.ZOUT); - } - //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again - while (y >= 64); + } while (y >= 64); if ((z & (1 << 5)) != 0) zAccel = z - 64; else zAccel = z; @@ -124,8 +120,7 @@ protected override Task ReadSensor() return new Acceleration3D( new Acceleration(xAccel * 3.0 / 64.0, Acceleration.UnitType.Gravity), new Acceleration(yAccel * 3.0 / 64.0, Acceleration.UnitType.Gravity), - new Acceleration(zAccel * 3.0 / 64.0, Acceleration.UnitType.Gravity) - ); + new Acceleration(zAccel * 3.0 / 64.0, Acceleration.UnitType.Gravity)); }); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs index 60ad8d009d..b85117ff14 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs @@ -143,8 +143,7 @@ protected override Task ReadSensor() conditions = new MagneticField3D( new MagneticField(x * 0.00625, MagneticField.UnitType.MicroTesla), new MagneticField(y * 0.00625, MagneticField.UnitType.MicroTesla), - new MagneticField(z * 0.00625, MagneticField.UnitType.MicroTesla) - ); + new MagneticField(z * 0.00625, MagneticField.UnitType.MicroTesla)); return conditions; }); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs index b11abc602e..23b7051d22 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs @@ -28,12 +28,12 @@ public partial class Mpu6050 : /// Raised when the acceration value changes /// public event EventHandler> Acceleration3DUpdated = delegate { }; - + /// /// Raised when the angular acceleration value changes /// public event EventHandler> AngularVelocity3DUpdated = delegate { }; - + /// /// Raised when the temperature value changes /// @@ -129,38 +129,29 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce /// The latest sensor reading protected override Task<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)> ReadSensor() { - return Task.Run(() => - { - (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature) conditions; - - // we'll just read 14 bytes (7 registers), starting at 0x3b - Peripheral?.ReadRegister(Registers.ACCELEROMETER_X, ReadBuffer.Span); - - //---- acceleration - // get the acceleration 3d - var a_scale = (1 << AccelerometerScale) / AccelScaleBase; - var g_scale = (1 << GyroScale) / GyroScaleBase; - // note that this comes back as mg (1/10 of m/s^2) which is 0.01m/s^2, so we have to multiply by 10 - Acceleration3D newAccel = new Acceleration3D( - new Acceleration(ScaleAndOffset(ReadBuffer.Span, 0, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared), - new Acceleration(ScaleAndOffset(ReadBuffer.Span, 2, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared), - new Acceleration(ScaleAndOffset(ReadBuffer.Span, 4, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared) - ); - conditions.Acceleration3D = newAccel; - - //---- temp - conditions.Temperature = new Units.Temperature(ScaleAndOffset(ReadBuffer.Span, 6, 1 / 340f, 36.53f), TU.Celsius); - - //---- angular acceleration - AngularVelocity3D angularVelocity = new AngularVelocity3D( - new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 8, g_scale), AngularVelocity.UnitType.DegreesPerSecond), - new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 10, g_scale), AngularVelocity.UnitType.DegreesPerSecond), - new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 12, g_scale), AngularVelocity.UnitType.DegreesPerSecond) - ); - conditions.AngularVelocity3D = angularVelocity; - - return conditions; - }); + (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature) conditions; + + // Read 14 bytes (7 registers), starting at 0x3b + Peripheral?.ReadRegister(Registers.ACCELEROMETER_X, ReadBuffer.Span); + + var a_scale = (1 << AccelerometerScale) / AccelScaleBase; + var g_scale = (1 << GyroScale) / GyroScaleBase; + // note that this comes back as mg (1/10 of m/s^2) which is 0.01m/s^2, so we have to multiply by 10 + Acceleration3D newAccel = new Acceleration3D( + new Acceleration(ScaleAndOffset(ReadBuffer.Span, 0, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared), + new Acceleration(ScaleAndOffset(ReadBuffer.Span, 2, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared), + new Acceleration(ScaleAndOffset(ReadBuffer.Span, 4, a_scale) * 10, Acceleration.UnitType.MetersPerSecondSquared)); + conditions.Acceleration3D = newAccel; + + conditions.Temperature = new Units.Temperature(ScaleAndOffset(ReadBuffer.Span, 6, 1 / 340f, 36.53f), TU.Celsius); + + AngularVelocity3D angularVelocity = new AngularVelocity3D( + new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 8, g_scale), AngularVelocity.UnitType.DegreesPerSecond), + new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 10, g_scale), AngularVelocity.UnitType.DegreesPerSecond), + new AngularVelocity(ScaleAndOffset(ReadBuffer.Span, 12, g_scale), AngularVelocity.UnitType.DegreesPerSecond)); + conditions.AngularVelocity3D = angularVelocity; + + return Task.FromResult(conditions); } private float ScaleAndOffset(Span data, int index, float scale, float offset = 0) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index f977dba79a..fa58fbc8e5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -68,17 +68,14 @@ public Ina260(II2cBus i2cBus, /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task<(Units.Power? Power, Voltage? Voltage, Current? Current)> ReadSensor() + protected override Task<(Units.Power? Power, Voltage? Voltage, Current? Current)> ReadSensor() { - return await Task.Run(() => - { - (Units.Power? Power, Units.Voltage? Voltage, Units.Current? Current) conditions; - conditions.Voltage = new Units.Voltage(Peripheral.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); - conditions.Current = new Units.Current(Peripheral.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); - conditions.Power = new Units.Power(Peripheral.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); + (Units.Power? Power, Voltage? Voltage, Current? Current) conditions; + conditions.Voltage = new Voltage(Peripheral.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); + conditions.Current = new Current(Peripheral.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); + conditions.Power = new Units.Power(Peripheral.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs index 93ba55e952..1fa8a60299 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs @@ -35,32 +35,27 @@ public Lm75(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected override Task ReadSensor() { - return Task.Run(() => - { - Peripheral?.Write((byte)Registers.LM_TEMP); - - Peripheral?.ReadRegister((byte)Registers.LM_TEMP, ReadBuffer.Span[0..2]); + Peripheral?.Write((byte)Registers.LM_TEMP); - // Details in Datasheet P10 - double temp = 0; - ushort raw = (ushort)((ReadBuffer.Span[0] << 3) | (ReadBuffer.Span[1] >> 5)); - if ((ReadBuffer.Span[0] & 0x80) == 0) - { - // temperature >= 0 - temp = raw * 0.125; - } - else - { - raw |= 0xF800; - raw = (ushort)(~raw + 1); + Peripheral?.ReadRegister((byte)Registers.LM_TEMP, ReadBuffer.Span[0..2]); - temp = raw * (-1) * 0.125; - } + // Details in Datasheet P10 + double temp; + ushort raw = (ushort)((ReadBuffer.Span[0] << 3) | (ReadBuffer.Span[1] >> 5)); + if ((ReadBuffer.Span[0] & 0x80) == 0) + { + // temperature >= 0 + temp = raw * 0.125; + } + else + { + raw |= 0xF800; + raw = (ushort)(~raw + 1); - //only accurate to +/- 0.1 degrees - return (new Units.Temperature((float)Math.Round(temp, 1), Units.Temperature.UnitType.Celsius)); + temp = raw * (-1) * 0.125; + } - }); + return Task.FromResult(new Units.Temperature((float)Math.Round(temp, 1), Units.Temperature.UnitType.Celsius)); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs index 18a428809f..bc97ba06f4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs @@ -61,15 +61,12 @@ public Mcp960x(II2cBus i2cBus, byte address) /// protected override Task<(Units.Temperature? TemperatureHot, Units.Temperature? TemperatureCold)> ReadSensor() { - return Task.Run(() => - { - (Units.Temperature? TemperatureHot, Units.Temperature? TemperatureCold) conditions; + (Units.Temperature? TemperatureHot, Units.Temperature? TemperatureCold) conditions; - conditions.TemperatureHot = new Units.Temperature(ReadTemperatureHot(), Units.Temperature.UnitType.Celsius); - conditions.TemperatureCold = new Units.Temperature(ReadTemperatureCold(), Units.Temperature.UnitType.Celsius); + conditions.TemperatureHot = new Units.Temperature(ReadTemperatureHot(), Units.Temperature.UnitType.Celsius); + conditions.TemperatureCold = new Units.Temperature(ReadTemperatureCold(), Units.Temperature.UnitType.Celsius); - return conditions; - }); + return Task.FromResult(conditions); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs index f4b6011e74..e608f8fdb1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs @@ -55,7 +55,7 @@ public Mcp9808(II2cBus i2CBus, byte address = (byte)Addresses.Default) /// public void Wake() { - ushort config = Peripheral?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; + ushort config = Peripheral?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; config = (ushort)(config & (~MCP_CONFIG_SHUTDOWN)); @@ -70,7 +70,7 @@ public void Sleep() ushort config = Peripheral?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; Peripheral?.WriteRegister(MCP_REG_CONFIG, (ushort)(config | MCP_CONFIG_SHUTDOWN)); - } + } /// /// Read the device ID @@ -108,25 +108,19 @@ public void SetResolution(byte resolution) /// Reads data from the sensor /// /// The latest sensor reading - protected override async Task ReadSensor() + protected override Task ReadSensor() { - return await Task.Run(() => - { - ushort value = Peripheral?.ReadRegisterAsUShort(MCP_AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; - double temp = value & 0x0FFF; + ushort value = Peripheral?.ReadRegisterAsUShort(MCP_AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; + double temp = value & 0x0FFF; - temp /= 16.0; + temp /= 16.0; - if ((value & 0x1000) != 0) - { - temp -= 256; - } - - var newTemp = new Units.Temperature(temp); - Temperature = newTemp; + if ((value & 0x1000) != 0) + { + temp -= 256; + } - return newTemp; - }); + return Task.FromResult(new Units.Temperature(temp, Units.Temperature.UnitType.Celsius)); } /// From a6dac98270ddb25a1a1281b2b11f3165559081f5 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 21:50:56 -0700 Subject: [PATCH 080/141] Remove state machine from SampleSensorBase --- Source/Meadow.Foundation.Core/SamplingSensorBase.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/Meadow.Foundation.Core/SamplingSensorBase.cs b/Source/Meadow.Foundation.Core/SamplingSensorBase.cs index 747216a2c1..2d083e2f09 100644 --- a/Source/Meadow.Foundation.Core/SamplingSensorBase.cs +++ b/Source/Meadow.Foundation.Core/SamplingSensorBase.cs @@ -67,10 +67,9 @@ protected virtual void RaiseEventsAndNotify(IChangeResult changeResult) /// Convenience method to get the current sensor readings. For frequent reads, use /// StartSampling() and StopSampling() in conjunction with the SampleBuffer. /// - public virtual async Task Read() + public virtual Task Read() { - Conditions = await ReadSensor(); - return Conditions; + return ReadSensor(); } /// From 4bd2b520825712c7228bc8e2230187d327159aa5 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 21:51:24 -0700 Subject: [PATCH 081/141] Move buffers from ByteCommsSensorBase to PollingSensorBase --- .../Communications/ByteCommsSensorBase.cs | 21 ------------------- .../PollingSensorBase.cs | 10 +++++++++ 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs index ebd966da75..b841fdc4eb 100644 --- a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs +++ b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs @@ -16,16 +16,6 @@ public abstract class ByteCommsSensorBase : /// protected IByteCommunications? Peripheral { get; set; } - /// - /// The read buffer - /// - protected Memory ReadBuffer { get; private set; } - - /// - /// The write buffer - /// - protected Memory WriteBuffer { get; private set; } - /// /// Creates a new ByteCommsSensorBase object /// @@ -64,17 +54,6 @@ protected ByteCommsSensorBase( Init(readBufferSize, writeBufferSize); } - /// - /// ByteCommsSensorBase abstract ctor with no bus - /// - /// Read buffer size - /// Write buffer size - protected ByteCommsSensorBase( - int readBufferSize = 8, int writeBufferSize = 8) - { - Init(readBufferSize, writeBufferSize); - } - /// /// Simple constructor for peripherals that don't use a bus /// and don't need an IByteCommunications diff --git a/Source/Meadow.Foundation.Core/PollingSensorBase.cs b/Source/Meadow.Foundation.Core/PollingSensorBase.cs index 9847dc131a..2428c12413 100644 --- a/Source/Meadow.Foundation.Core/PollingSensorBase.cs +++ b/Source/Meadow.Foundation.Core/PollingSensorBase.cs @@ -13,6 +13,16 @@ public abstract class PollingSensorBase : SamplingSensorBase, ISamplingSensor where UNIT : struct { + /// + /// The read buffer + /// + protected Memory ReadBuffer { get; private set; } + + /// + /// The write buffer + /// + protected Memory WriteBuffer { get; private set; } + /// /// Starts updating the sensor on the updateInterval frequency specified. /// From 5e0b55e57d620a00fd2cd5554ad912f87322824e Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 21:51:36 -0700 Subject: [PATCH 082/141] Very minor comment cleanup --- .../Displays.Ch1115/Driver/Ch1115.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs index bee8cc75b8..d7edfa425c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Displays { /// - /// Provide an interface to the Ch1115 family of displays. + /// Provide an interface to the Ch1115 family of displays /// public partial class Ch1115 : IGraphicsDisplay, ISpiDevice { From f4ae8462b2c35bb0008ede0932c9dc775baa04c4 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 21:56:32 -0700 Subject: [PATCH 083/141] Minor cleanup --- .../Sensors.Power.Ina260/Driver/Ina260.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index fa58fbc8e5..c12eef8522 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Sensors.Power /// Represents a INA260 Precision Digital Current and Power Monitor /// public partial class Ina260 - : ByteCommsSensorBase<(Units.Power? Power, Units.Voltage? Voltage, Units.Current? Current)> + : ByteCommsSensorBase<(Units.Power? Power, Voltage? Voltage, Current? Current)> { /// /// Raised when the power value changes @@ -19,24 +19,24 @@ public partial class Ina260 /// /// Raised when the voltage value changes /// - public event EventHandler> VoltageUpdated = delegate { }; + public event EventHandler> VoltageUpdated = delegate { }; /// /// Raised when the current value changes /// - public event EventHandler> CurrentUpdated = delegate { }; + public event EventHandler> CurrentUpdated = delegate { }; private const float MeasurementScale = 0.00125f; /// /// The value of the current (in Amps) flowing through the shunt resistor from the last reading /// - public Units.Current? Current => Conditions.Current; + public Current? Current => Conditions.Current; /// /// The voltage from the last reading.. /// - public Units.Voltage? Voltage => Conditions.Voltage; + public Voltage? Voltage => Conditions.Voltage; /// /// The power from the last reading.. @@ -48,9 +48,7 @@ public partial class Ina260 /// /// The I2C bus /// The I2C address - /// - public Ina260(II2cBus i2cBus, - byte address = (byte)Addresses.Default) + public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { switch (address) @@ -71,6 +69,7 @@ public Ina260(II2cBus i2cBus, protected override Task<(Units.Power? Power, Voltage? Voltage, Current? Current)> ReadSensor() { (Units.Power? Power, Voltage? Voltage, Current? Current) conditions; + conditions.Voltage = new Voltage(Peripheral.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); conditions.Current = new Current(Peripheral.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); conditions.Power = new Units.Power(Peripheral.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); @@ -82,7 +81,7 @@ public Ina260(II2cBus i2cBus, /// Raise events for subcribers and notify of value changes /// /// The updated sensor data - protected override void RaiseEventsAndNotify(IChangeResult<(Units.Power? Power, Units.Voltage? Voltage, Units.Current? Current)> changeResult) + protected override void RaiseEventsAndNotify(IChangeResult<(Units.Power? Power, Voltage? Voltage, Current? Current)> changeResult) { if (changeResult.New.Power is { } power) { @@ -90,11 +89,11 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Power? Power, } if (changeResult.New.Voltage is { } volts) { - VoltageUpdated?.Invoke(this, new ChangeResult(volts, changeResult.Old?.Voltage)); + VoltageUpdated?.Invoke(this, new ChangeResult(volts, changeResult.Old?.Voltage)); } if (changeResult.New.Current is { } amps) { - CurrentUpdated?.Invoke(this, new ChangeResult(amps, changeResult.Old?.Current)); + CurrentUpdated?.Invoke(this, new ChangeResult(amps, changeResult.Old?.Current)); } base.RaiseEventsAndNotify(changeResult); From c964273030e91fd9c15d28ec15f84c49386da7c2 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sun, 23 Apr 2023 21:56:57 -0700 Subject: [PATCH 084/141] Restore ByteCommsSensorBase and PollingSensorBase --- .../Communications/ByteCommsSensorBase.cs | 21 +++++++++++++++++++ .../PollingSensorBase.cs | 10 --------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs index b841fdc4eb..ebd966da75 100644 --- a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs +++ b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs @@ -16,6 +16,16 @@ public abstract class ByteCommsSensorBase : /// protected IByteCommunications? Peripheral { get; set; } + /// + /// The read buffer + /// + protected Memory ReadBuffer { get; private set; } + + /// + /// The write buffer + /// + protected Memory WriteBuffer { get; private set; } + /// /// Creates a new ByteCommsSensorBase object /// @@ -54,6 +64,17 @@ protected ByteCommsSensorBase( Init(readBufferSize, writeBufferSize); } + /// + /// ByteCommsSensorBase abstract ctor with no bus + /// + /// Read buffer size + /// Write buffer size + protected ByteCommsSensorBase( + int readBufferSize = 8, int writeBufferSize = 8) + { + Init(readBufferSize, writeBufferSize); + } + /// /// Simple constructor for peripherals that don't use a bus /// and don't need an IByteCommunications diff --git a/Source/Meadow.Foundation.Core/PollingSensorBase.cs b/Source/Meadow.Foundation.Core/PollingSensorBase.cs index 2428c12413..9847dc131a 100644 --- a/Source/Meadow.Foundation.Core/PollingSensorBase.cs +++ b/Source/Meadow.Foundation.Core/PollingSensorBase.cs @@ -13,16 +13,6 @@ public abstract class PollingSensorBase : SamplingSensorBase, ISamplingSensor where UNIT : struct { - /// - /// The read buffer - /// - protected Memory ReadBuffer { get; private set; } - - /// - /// The write buffer - /// - protected Memory WriteBuffer { get; private set; } - /// /// Starts updating the sensor on the updateInterval frequency specified. /// From 9650c96de9c5fec998a58268b3efdaefb78d6ba0 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 11:47:31 -0700 Subject: [PATCH 085/141] Fix bounds checking in SetRegsiterBit and ClearRegisterBit - fixes #631 --- .../ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index c43a49853a..e3ac12355c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -310,7 +310,7 @@ public IDigitalInputPort CreateDigitalInputPort( private void SetRegisterBit(byte register, int bit) { - if (bit >= 7 || bit < 0) { throw new ArgumentOutOfRangeException(); } + if (bit > 7 || bit < 0) { throw new ArgumentOutOfRangeException(); } var value = mcpDevice.ReadRegister(register); value |= (byte)(1 << bit); @@ -319,7 +319,7 @@ private void SetRegisterBit(byte register, int bit) private void ClearRegisterBit(byte register, int bit) { - if (bit >= 7 || bit < 0) { throw new ArgumentOutOfRangeException(); } + if (bit > 7 || bit < 0) { throw new ArgumentOutOfRangeException(); } var value = mcpDevice.ReadRegister(register); value &= (byte)~(1 << bit); mcpDevice.WriteRegister(register, value); From acc786b46003e94da228eb4e48b895da698805b5 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 12:22:06 -0700 Subject: [PATCH 086/141] Rename bus peripheral classes, fields and references to communications --- .../Communications/ByteCommsSensorBase.cs | 6 +- ...{I2cPeripheral.cs => I2cCommunications.cs} | 26 ++---- ...{SpiPeripheral.cs => SpiCommunications.cs} | 27 +----- .../Audio.Radio.Tea5767/Driver/Tea5767.cs | 14 +-- .../Displays.Ch1115/Driver/Ch1115.cs | 22 ++--- .../Driver/GroveCharacterDisplay.cs | 4 +- .../Driver/I2cCharacterDisplay.cs | 20 ++-- .../Displays.Max7219/Driver/Max7219.cs | 31 ++++--- .../Displays.Pcd8544/Driver/Pcd8544.cs | 22 +++-- .../Displays.Sh110x/Driver/Sh110x.cs | 34 +++---- .../Driver/Drivers/Ssd1306.cs | 4 +- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 28 +++--- .../Displays.Ssd1327/Driver/Ssd1327.cs | 22 +++-- .../Displays.St7565/Driver/St7565.cs | 23 ++--- .../Displays.TftSpi/Driver/TftSpiBase.cs | 4 +- .../Displays.ePaper/Driver/Drivers/Il0373.cs | 8 +- .../Displays.ePaper/Driver/Drivers/Il91874.cs | 4 +- .../Displays.ePaper/Driver/Drivers/Ssd1681.cs | 2 +- .../Displays.ePaper/Driver/Drivers/Uc8151c.cs | 8 +- .../Displays.ePaper/Driver/EPaperMonoBase.cs | 4 +- .../Driver/EPaperTriColorBase.cs | 2 +- .../Displays.ePaper/Driver/ePaperBase.cs | 16 ++-- .../Driver/Drivers/Epd5in65f.cs | 6 +- .../ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs | 22 +++-- .../ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs | 34 +++---- .../Driver/Emc2101.cs | 74 +++++++-------- .../ICs.IOExpanders.As1115/Driver/As1115.cs | 40 ++++---- .../ICs.IOExpanders.Ds3502/Driver/Ds3502.cs | 25 ++--- .../ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs | 20 ++-- .../Driver/Is31fl3731.cs | 13 ++- .../Driver/Mcp23xxx.cs | 12 +-- .../ICs.IOExpanders.Pca9685/Driver/Pca9685.cs | 12 ++- .../Driver/Tca9548A.cs | 2 +- .../ICs.IOExpanders.x74595/Driver/x74595.cs | 22 ++--- .../Leds.Apa102/Driver/Apa102.cs | 16 ++-- .../Driver/SparkFunQwiicLEDStick.cs | 2 +- .../Leds.Pca9633/Driver/Pca9633.cs | 40 ++++---- .../RTCs.Ds323x/Driver/Ds3231.cs | 4 +- .../RTCs.Ds323x/Driver/Ds323x.cs | 6 +- .../Driver/Bme280.cs | 8 +- .../Driver/Bme280I2C.cs | 15 +-- .../Driver/Bme280SPI.cs | 10 +- .../Driver/Bme68x.cs | 8 +- .../Driver/Bme68xI2C.cs | 21 +++-- .../Driver/Bme68xSPI.cs | 16 ++-- .../Driver/Ms5611I2c.cs | 15 +-- .../Driver/Mlx90640.cs | 91 ++++++++++--------- .../Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs | 16 ++-- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs | 19 ++-- .../Sensors.Hid.As5013/Driver/As5013.cs | 43 +++++---- .../Driver/BBQ10Keyboard.cs | 25 ++--- .../Sensors.Hid.Mpr121/Driver/Mpr121.cs | 23 +++-- .../Sensors.Hid.Tsc2004/Driver/Tsc2004.cs | 43 ++++----- .../Driver/Drivers/WiiClassicController.cs | 4 +- .../Driver/Drivers/WiiClassicControllerPro.cs | 4 +- .../Driver/WiiClassicControllerBase.cs | 4 +- .../Driver/WiiExtensionControllerBase.cs | 18 ++-- .../Driver/Drivers/Adxl362.cs | 8 +- .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 61 +++++++------ .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 45 ++++----- .../Driver/Lsm303agr.cs | 39 ++++---- 61 files changed, 626 insertions(+), 591 deletions(-) rename Source/Meadow.Foundation.Core/Communications/{I2cPeripheral.cs => I2cCommunications.cs} (89%) rename Source/Meadow.Foundation.Core/Communications/{SpiPeripheral.cs => SpiCommunications.cs} (88%) diff --git a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs index ebd966da75..d21ca86e64 100644 --- a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs +++ b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs @@ -12,7 +12,7 @@ public abstract class ByteCommsSensorBase : PollingSensorBase, IDisposable where UNIT : struct { /// - /// Peripheral object, i.e. an I2CPeripheral or SpiPeripheral + /// Bus communications object, i.e. an I2cCommunications or SpiCommunications /// protected IByteCommunications? Peripheral { get; set; } @@ -37,7 +37,7 @@ protected ByteCommsSensorBase( II2cBus i2cBus, byte address, int readBufferSize = 8, int writeBufferSize = 8) { - Peripheral = new I2cPeripheral(i2cBus, address, readBufferSize, writeBufferSize); + Peripheral = new I2cCommunications(i2cBus, address, readBufferSize, writeBufferSize); Init(readBufferSize, writeBufferSize); } @@ -60,7 +60,7 @@ protected ByteCommsSensorBase( int writeBufferSize = 8, ChipSelectMode chipSelectMode = ChipSelectMode.ActiveLow) { - Peripheral = new SpiPeripheral(spiBus, chipSelect, busSpeed, busMode, readBufferSize, writeBufferSize, chipSelectMode); + Peripheral = new SpiCommunications(spiBus, chipSelect, busSpeed, busMode, readBufferSize, writeBufferSize, chipSelectMode); Init(readBufferSize, writeBufferSize); } diff --git a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs b/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs similarity index 89% rename from Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs rename to Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs index 3e6a2019ae..e46550a54a 100644 --- a/Source/Meadow.Foundation.Core/Communications/I2cPeripheral.cs +++ b/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs @@ -3,10 +3,9 @@ namespace Meadow.Hardware { /// - /// Defines a contract for a peripheral that communicates via the IIC/I2C - /// protocol. + /// Helper class for I2C communications, handles registers, endian, etc. /// - public class I2cPeripheral : II2cPeripheral + public class I2cCommunications : II2cCommunications { /// /// The I2C address @@ -19,24 +18,24 @@ public class I2cPeripheral : II2cPeripheral public II2cBus Bus { get; protected set; } /// - /// Internal write buffer. Used in methods in which the buffers aren't + /// Internal write buffer - used in methods in which the buffers aren't /// passed in. /// protected Memory WriteBuffer { get; } /// - /// Internal read buffer. Used in methods in which the buffers aren't + /// Internal read buffer - used in methods in which the buffers aren't /// passed in. /// protected Memory ReadBuffer { get; } /// - /// Initializes a new instance of the I2cPeripheral class + /// Initializes a new instance of the I2cCommunications class /// /// The II2cBus used for communication with the peripheral /// The address of the peripheral on the I2C bus /// The size of the buffer used for reading data from the peripheral. Defaults to 8 bytes /// The size of the buffer used for writing data to the peripheral. Defaults to 8 bytes - public I2cPeripheral(II2cBus bus, byte peripheralAddress, int readBufferSize = 8, int writeBufferSize = 8) + public I2cCommunications(II2cBus bus, byte peripheralAddress, int readBufferSize = 8, int writeBufferSize = 8) { Bus = bus; Address = peripheralAddress; @@ -122,7 +121,6 @@ public void Write(byte value) /// Data to write into the register. public void WriteRegister(byte address, byte value) { - // stuff the address and value into the write buffer WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; Bus.Write(Address, WriteBuffer.Span[0..2]); @@ -136,9 +134,7 @@ public void WriteRegister(byte address, byte value) /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrder.LittleEndian) { - // split the 16 bit ushort into two bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -150,9 +146,7 @@ public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrde /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) { - // split the 32 bit uint into four bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -164,9 +158,7 @@ public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder. /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) { - // split the 64 bit ulong into 8 bytes var bytes = BitConverter.GetBytes(value); - // call the helper method WriteRegister(address, bytes, order); } @@ -186,11 +178,9 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order "amount of data to fix."); } - // stuff the register address into the write buffer + // add the register address to the start of the write buffer WriteBuffer.Span[0] = address; - // stuff the bytes into the write buffer (starting at `1` index, - // because `0` is the register address. switch (order) { case ByteOrder.LittleEndian: @@ -202,12 +192,10 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order case ByteOrder.BigEndian: for (int i = 0; i < writeBuffer.Length; i++) { - // stuff them backwards WriteBuffer.Span[i + 1] = writeBuffer[writeBuffer.Length - (i + 1)]; } break; } - // write it Bus.Write(Address, WriteBuffer.Span[0..(writeBuffer.Length + 1)]); } diff --git a/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs similarity index 88% rename from Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs rename to Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs index 1d3e5405a2..709a196ef1 100644 --- a/Source/Meadow.Foundation.Core/Communications/SpiPeripheral.cs +++ b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs @@ -4,10 +4,10 @@ namespace Meadow.Hardware { /// - /// Represents an SPI peripheral object + /// Helper class for SPI communications, handles registers, endian, etc. /// This encapsulates and synchronizes the SPI bus and chip select ports /// - public class SpiPeripheral : ISpiPeripheral + public class SpiCommunications : ISpiCommunications { /// /// The SPI chip select port @@ -46,7 +46,7 @@ public class SpiPeripheral : ISpiPeripheral protected Memory ReadBuffer { get; } /// - /// Creates a new SpiPeripheral instance + /// Creates a new SpiCommunications instance /// /// The spi bus connected to the peripheral /// The chip select port @@ -55,7 +55,7 @@ public class SpiPeripheral : ISpiPeripheral /// The size of the read buffer in bytes /// The size of the write buffer in bytes /// The chip select mode, active high or active low - public SpiPeripheral( + public SpiCommunications( ISpiBus bus, IDigitalOutputPort? chipSelect, Frequency busSpeed, @@ -153,7 +153,6 @@ public void Write(Span data) /// Value to write public void WriteRegister(byte address, byte value) { - // stuff the address and value into the write buffer WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; Bus.Write(ChipSelect, WriteBuffer.Span[0..2], chipSelectMode); @@ -180,7 +179,6 @@ public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrde /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) { - // split the 32 bit ushort into four bytes var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); } @@ -193,7 +191,6 @@ public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder. /// Indicate if the data should be written as big or little endian. public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) { - // split the 64 bit ushort into eight bytes var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); } @@ -216,8 +213,6 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order WriteBuffer.Span[0] = address; - // stuff the bytes into the write buffer (starting at `1` index, - // because `0` is the register address. switch (order) { case ByteOrder.LittleEndian: @@ -229,7 +224,6 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order case ByteOrder.BigEndian: for (int i = 0; i < writeBuffer.Length; i++) { - // stuff them backwards WriteBuffer.Span[i + 1] = writeBuffer[writeBuffer.Length - (i + 1)]; } break; @@ -257,27 +251,14 @@ public void Exchange(Span writeBuffer, Span readBuffer, DuplexType d if (duplex == DuplexType.Half) { - // Todo: we should move this functionality deeper into the stack - // and have nuttx write the write buffer, then continue clocking out - // 0x00's until it's hit writeBuffer.Length + readBuffer.Lenght - // and ignore the input until it hits writeBuffer.Length, and then - // start writing directly into the readBuffer starting at 0. - // that will prevent all the allocations and copying we're doing - // here. - - // clock in and clock out data means that the buffers have to be as - // long as both tx and rx together int length = writeBuffer.Length + readBuffer.Length; Span txBuffer = stackalloc byte[length]; Span rxBuffer = stackalloc byte[length]; - // copy the write into tx writeBuffer.CopyTo(txBuffer); - // write/read the data Bus.Exchange(ChipSelect, txBuffer, rxBuffer, chipSelectMode); - // move the rx data into the read buffer, starting it at zero rxBuffer[writeBuffer.Length..length].CopyTo(readBuffer); } else diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs index d21d9d3445..91b763409d 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs @@ -1,8 +1,8 @@  -using System; -using System.Threading; using Meadow.Hardware; using Meadow.Units; +using System; +using System.Threading; namespace Meadow.Foundation.Audio.Radio { @@ -12,9 +12,9 @@ namespace Meadow.Foundation.Audio.Radio public partial class Tea5767 { /// - /// TEA5767 radio. + /// I2C Communication bus used to communicate with the peripheral /// - private readonly II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; byte hiInjection; readonly Memory writeBuffer = new byte[5]; @@ -32,7 +32,7 @@ public partial class Tea5767 /// Address of the bus on the I2C display. public Tea5767(II2cBus i2cBus, byte address = (byte)Address.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); InitTEA5767(); } @@ -111,7 +111,7 @@ void SetFrequency(double frequency) void TransmitData() { - i2cPeripheral.Exchange(writeBuffer.Span, readBuffer.Span); + i2cComms.Exchange(writeBuffer.Span, readBuffer.Span); Thread.Sleep(100); } @@ -155,7 +155,7 @@ public void SelectFrequency(Frequency frequency) void ReadStatus() { - i2cPeripheral.Read(readBuffer.Span); + i2cComms.Read(readBuffer.Span); Thread.Sleep(100); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs index d7edfa425c..5e2d4649f7 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs @@ -47,8 +47,8 @@ public partial class Ch1115 : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -61,14 +61,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// - /// SPI peripheral object + /// SPI Communication bus used to communicate with the peripheral /// - readonly ISpiPeripheral spiPeripheral; + protected readonly ISpiCommunications spiComms; readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; @@ -113,7 +113,7 @@ public Ch1115(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; @@ -223,7 +223,7 @@ public void SetContrast(byte contrast) private void SendCommand(byte command) { dataCommandPort.State = Command; - spiPeripheral.Write(command); + spiComms.Write(command); } /// @@ -237,7 +237,7 @@ private void SendCommands(byte[] commands) Array.Copy(commands, 0, data, 1, commands.Length); dataCommandPort.State = Command; - spiPeripheral.Write(commands); + spiComms.Write(commands); } const int StartColumnOffset = 0; @@ -257,7 +257,7 @@ public void Show() dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } @@ -288,7 +288,7 @@ public void Show(int left, int top, int right, int bottom) dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs index ab904ea8a6..0d45c569a8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs @@ -66,7 +66,7 @@ protected override void Initialize() protected override void Command(byte value) { var data = new byte[] { 0x80, value }; - i2cPeripheral.Write(data); + i2cComms.Write(data); } /// @@ -77,7 +77,7 @@ protected override void Command(byte value) protected override void Send(byte value, byte mode) { var data = new byte[] { 0x40, value }; - i2cPeripheral.Write(data); + i2cComms.Write(data); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs index 30d5941143..b69124be20 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs @@ -10,15 +10,15 @@ namespace Meadow.Foundation.Displays.Lcd public partial class I2cCharacterDisplay : ICharacterDisplay { /// - /// The I2C peripheral used to communicate with the display + /// I2C Communication bus used to communicate with the peripheral /// - protected readonly II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// /// Display control value /// protected byte displayControl; - + /// /// Display mode value /// @@ -77,7 +77,7 @@ protected enum I2CCommands /// LCD_SETDDRAMADDR = 0x80, } - + // flags for display entry mode internal static byte LCD_ENTRYRIGHT = 0x00; internal static byte LCD_ENTRYLEFT = 0x02; @@ -123,7 +123,7 @@ protected enum I2CCommands /// Number of character columns public I2cCharacterDisplay(II2cBus i2cBus, byte address = (byte)Addresses.Default, byte rows = 4, byte columns = 20) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); DisplayConfig = new TextDisplayConfig() { Width = columns, Height = rows }; backlightValue = LCD_BACKLIGHT; @@ -138,7 +138,7 @@ protected virtual void Initialize() { var displayFunction = (byte)(LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS); - if(DisplayConfig.Height > 1) + if (DisplayConfig.Height > 1) { displayFunction |= LCD_2LINE; } @@ -181,7 +181,7 @@ protected virtual void Initialize() void Home() { Command((byte)I2CCommands.LCD_RETURNHOME); // set cursor position to zero - Thread.Sleep(2); + Thread.Sleep(2); } /// @@ -201,7 +201,7 @@ void Write4Bits(byte value) void ExpanderWrite(byte value) { - i2cPeripheral.Write((byte)(value | backlightValue)); + i2cComms.Write((byte)(value | backlightValue)); } /// @@ -262,7 +262,7 @@ public void SetCursorPosition(byte column, byte line) if (line > DisplayConfig.Height) { - line = (byte)(DisplayConfig.Height - 1); + line = (byte)(DisplayConfig.Height - 1); } Command((byte)((byte)I2CCommands.LCD_SETDDRAMADDR | (column + rowOffsets[line]))); @@ -422,7 +422,7 @@ public void SaveCustomCharacter(byte[] characterMap, byte address) Command((byte)((byte)I2CCommands.LCD_SETCGRAMADDR | (address << 3))); for (int i = 0; i < 8; i++) { - i2cPeripheral.WriteRegister(Rs, characterMap[i]); + i2cComms.WriteRegister(Rs, characterMap[i]); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs index ab8af65604..3a6f5b8cd9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs @@ -45,8 +45,8 @@ public partial class Max7219 : ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -59,11 +59,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } - private readonly ISpiPeripheral spiPeripheral; + /// + /// SPI Communication bus used to communicate with the peripheral + /// + protected ISpiCommunications spiComms; /// /// internal buffer used to write to registers for all devices. @@ -83,7 +86,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// SPI bus /// Chip select port /// Number of cascaded devices - /// Display mode of spiPeripheral + /// Display mode public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceCount = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipselectPort, deviceCount, 1, maxMode) { @@ -96,10 +99,10 @@ public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceCoun /// Chip select port /// Number of devices cascaded vertically /// Number of devices cascaded horizontally - /// Display mode of spiPeripheral + /// Display mode public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceRows, int deviceColumns, Max7219Mode maxMode = Max7219Mode.Display) { - spiPeripheral = new SpiPeripheral(spiBus, chipselectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipselectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); DigitRows = deviceRows; DigitColumns = deviceColumns * DigitsPerDevice; @@ -118,7 +121,7 @@ public Max7219(ISpiBus spiBus, IDigitalOutputPort chipselectPort, int deviceRows /// Chip select pin /// Number of devices cascaded vertically /// Number of devices cascaded horizontally - /// Display mode of spiPeripheral + /// Display mode public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceRows = 1, int deviceColumns = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipSelectPin.CreateDigitalOutputPort(), deviceRows, deviceColumns, maxMode) { } @@ -129,7 +132,7 @@ public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceRows = 1, int devic /// SPI bus /// Chip select pin /// Number of cascaded devices - /// Display mode of spiPeripheral + /// Display mode public Max7219(ISpiBus spiBus, IPin chipSelectPin, int deviceCount = 1, Max7219Mode maxMode = Max7219Mode.Display) : this(spiBus, chipSelectPin.CreateDigitalOutputPort(), deviceCount, 1, maxMode) { } @@ -214,7 +217,7 @@ public void TestDisplay(TimeSpan time) } /// - /// Set the display mode of the spiPeripheral + /// Set the display mode of the Max7219 /// /// the mode public void SetMode(Max7219Mode maxMode) @@ -234,7 +237,7 @@ internal void SetRegister(Register register, byte data) writeBuffer[i++] = (byte)register; writeBuffer[i++] = data; } - spiPeripheral.Write(writeBuffer); + spiComms.Write(writeBuffer); } /// @@ -247,7 +250,7 @@ internal void SetRegister(int deviceId, Register register, byte data) writeBuffer[deviceId * 2] = (byte)register; writeBuffer[deviceId * 2 + 1] = data; - spiPeripheral.Write(writeBuffer); + spiComms.Write(writeBuffer); } /// @@ -340,7 +343,7 @@ public void WriteBuffer(byte[,] buffer) writeBuffer[i++] = (byte)((int)Register.Digit0 + digit); writeBuffer[i++] = buffer[deviceId, digit]; } - spiPeripheral.Write(writeBuffer); + spiComms.Write(writeBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs index 3a41183494..26d6d72040 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs @@ -51,8 +51,8 @@ public class Pcd8544 : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -65,13 +65,17 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; - readonly ISpiPeripheral spiPeripheral; + + /// + /// SPI Communication bus used to communicate with the peripheral + /// + protected ISpiCommunications spiComms; /// /// Buffer to hold display data @@ -116,7 +120,7 @@ public Pcd8544(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Initialize(); } @@ -136,7 +140,7 @@ private void Initialize() commandBuffer.Span[5] = 0x20; commandBuffer.Span[6] = 0x0C; - spiPeripheral.Write(commandBuffer.Span[0..6]); + spiComms.Write(commandBuffer.Span[0..6]); dataCommandPort.State = true; @@ -198,7 +202,7 @@ public void DrawPixel(int x, int y, Color color) /// public void Show() { - spiPeripheral.Write(imageBuffer.Buffer); + spiComms.Write(imageBuffer.Buffer); } /// @@ -224,7 +228,7 @@ public void InvertDisplay(bool inverse) dataCommandPort.State = false; commandBuffer.Span[0] = inverse ? (byte)0x0D : (byte)0x0C; - spiPeripheral.Write(commandBuffer.Span[0]); + spiComms.Write(commandBuffer.Span[0]); dataCommandPort.State = true; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 5e34bf662f..42d7ebef21 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -42,8 +42,8 @@ public abstract partial class Sh110x : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -56,8 +56,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// @@ -71,14 +71,14 @@ public SpiClockConfiguration.Mode SpiBusMode public IPixelBuffer PixelBuffer => imageBuffer; /// - /// I2C peripheral object for I2C displays + /// I2C Communication bus used to communicate with the peripheral /// - protected II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// - /// SPI peripheral object for SPI displays + /// SPI Communication bus used to communicate with the peripheral /// - readonly ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; @@ -106,7 +106,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// Display height in pixels public Sh110x(II2cBus i2cBus, byte address, int width, int height) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Width = width; Height = height; @@ -156,7 +156,7 @@ public Sh110x(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Width = width; Height = height; @@ -239,13 +239,13 @@ internal void SendCommand(byte command) if (connectionType == ConnectionType.SPI) { dataCommandPort.State = Command; - spiPeripheral.Write(command); + spiComms.Write(command); } else { commandBuffer.Span[0] = 0x00; commandBuffer.Span[1] = command; - i2cPeripheral.Write(commandBuffer.Span); + i2cComms.Write(commandBuffer.Span); } } @@ -267,14 +267,14 @@ internal void SendCommands(byte[] commands) if (connectionType == ConnectionType.SPI) { dataCommandPort.State = Command; - spiPeripheral.Write(commands); + spiComms.Write(commands); } else { Span data = new byte[commands.Length + 1]; data[0] = 0x00; commands.CopyTo(data.Slice(1, commands.Length)); - i2cPeripheral.Write(data); + i2cComms.Write(data); } } @@ -296,7 +296,7 @@ public void Show() dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PAGE_SIZE); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } } @@ -312,7 +312,7 @@ public void Show() SendCommand((byte)(0x10 & 0xF)); Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 1, PAGE_SIZE); - i2cPeripheral.Write(pageBuffer); + i2cComms.Write(pageBuffer); } } } @@ -344,7 +344,7 @@ public void Show(int left, int top, int right, int bottom) dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PAGE_SIZE); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index 834b5964a2..7e2646d664 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -40,7 +40,7 @@ public Ssd1306(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); connectionType = ConnectionType.SPI; @@ -59,7 +59,7 @@ public Ssd1306(II2cBus i2cBus, { this.displayType = displayType; - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); connectionType = ConnectionType.I2C; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index 5fc9484316..e43fc7b346 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -46,8 +46,8 @@ public abstract partial class Ssd130xBase : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -60,14 +60,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// - /// SSD130x SPI display + /// SPI Communication bus used to communicate with the peripheral /// - protected ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; /// /// The data command port @@ -105,9 +105,9 @@ public SpiClockConfiguration.Mode SpiBusMode protected const int PAGE_SIZE = 16; /// - /// SSD1306 I2C display + /// I2C Communication bus used to communicate with the peripheral /// - protected II2cPeripheral i2cPeripheral; + protected II2cCommunications i2cComms; /// /// Buffer holding the pixels in the display @@ -204,13 +204,13 @@ private void SendCommand(byte command) if (connectionType == ConnectionType.SPI) { dataCommandPort.State = Command; - spiPeripheral.Write(command); + spiComms.Write(command); } else { commandBuffer.Span[0] = 0x00; commandBuffer.Span[1] = command; - i2cPeripheral.Write(commandBuffer.Span); + i2cComms.Write(commandBuffer.Span); } } @@ -223,7 +223,7 @@ protected void SendCommands(Span commands) if (connectionType == ConnectionType.SPI) { dataCommandPort.State = Command; - spiPeripheral.Write(commands); + spiComms.Write(commands); } else { //a little heavy but this is only used a couple of times @@ -231,7 +231,7 @@ protected void SendCommands(Span commands) Span data = new byte[commands.Length + 1]; data[0] = 0x00; commands.CopyTo(data.Slice(1, commands.Length)); - i2cPeripheral.Write(data); + i2cComms.Write(data); } } @@ -245,7 +245,7 @@ public void Show() if (connectionType == ConnectionType.SPI) { dataCommandPort.State = Data; - spiPeripheral.Bus.Exchange(chipSelectPort, imageBuffer.Buffer, readBuffer); + spiComms.Bus.Exchange(chipSelectPort, imageBuffer.Buffer, readBuffer); } else// I2C { // Send the buffer page by page @@ -257,7 +257,7 @@ public void Show() if (imageBuffer.ByteCount - index < PAGE_SIZE) { break; } Array.Copy(imageBuffer.Buffer, index, pageBuffer, 1, PAGE_SIZE); - i2cPeripheral.Write(pageBuffer); + i2cComms.Write(pageBuffer); } } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs index 46336ff2fe..fcf2be5ef0 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs @@ -47,8 +47,8 @@ public partial class Ssd1327 : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -61,11 +61,15 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } - readonly ISpiPeripheral spiPeripheral; + /// + /// SPI Communication bus used to communicate with the peripheral + /// + protected ISpiCommunications spiComms; + readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; @@ -103,7 +107,7 @@ public Ssd1327(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Initialize(); } @@ -127,7 +131,7 @@ protected void Initialize() dataCommandPort.State = CommandState; - spiPeripheral.Write(init128x128); + spiComms.Write(init128x128); Thread.Sleep(100); // 100ms delay recommended SendCommand(Command.DISPLAYON); // 0xaf @@ -214,7 +218,7 @@ public void Show() dataCommandPort.State = DataState; - spiPeripheral.Write(imageBuffer.Buffer); + spiComms.Write(imageBuffer.Buffer); } void SetAddressWindow(byte x0, byte y0, byte x1, byte y1) @@ -236,7 +240,7 @@ void SendCommand(Command command) void SendCommand(byte command) { dataCommandPort.State = CommandState; - spiPeripheral.Write(command); + spiComms.Write(command); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs index a959a3aeb3..e3ab5da622 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs @@ -47,8 +47,8 @@ public partial class St7565 : IGraphicsDisplay, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -61,14 +61,15 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// - /// SPI peripheral object + /// SPI Communication bus used to communicate with the peripheral /// - readonly ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; + readonly IDigitalOutputPort dataCommandPort; readonly IDigitalOutputPort resetPort; @@ -112,7 +113,7 @@ public St7565(ISpiBus spiBus, this.dataCommandPort = dataCommandPort; this.resetPort = resetPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bpp(width, height); pageBuffer = new byte[PageSize]; @@ -190,7 +191,7 @@ public void SetContrast(byte contrast) private void SendCommand(byte command) { dataCommandPort.State = Command; - spiPeripheral.Write(command); + spiComms.Write(command); } /// @@ -204,7 +205,7 @@ private void SendCommands(byte[] commands) Array.Copy(commands, 0, data, 1, commands.Length); dataCommandPort.State = Command; - spiPeripheral.Write(commands); + spiComms.Write(commands); } const int StartColumnOffset = 0; @@ -225,7 +226,7 @@ public void Show() dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } @@ -257,7 +258,7 @@ public void Show(int left, int top, int right, int bottom) dataCommandPort.State = Data; Array.Copy(imageBuffer.Buffer, Width * page, pageBuffer, 0, PageSize); - spiPeripheral.Write(pageBuffer); + spiComms.Write(pageBuffer); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index a8568115c0..8a84819ef8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -92,7 +92,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// The spi peripheral for the display /// - protected ISpiPeripheral spiDisplay; + protected ISpiCommunications spiDisplay; /// /// The offscreen image buffer @@ -172,7 +172,7 @@ public TftSpiBase(ISpiBus spiBus, this.chipSelectPort = chipSelectPort; this.resetPort = resetPort; - spiDisplay = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiDisplay = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); CreateBuffer(colorMode, nativeWidth = width, nativeHeight = height); } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il0373.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il0373.cs index df1c93aa7b..ca00098204 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il0373.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il0373.cs @@ -108,14 +108,14 @@ protected void SetPartialWindow(byte[] bufferBlack, byte[] bufferColor, int x, i { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(bufferBlack[i]); + spiComms.Write(bufferBlack[i]); } } else { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(0x00); + spiComms.Write(0x00); } } DelayMs(2); @@ -127,14 +127,14 @@ protected void SetPartialWindow(byte[] bufferBlack, byte[] bufferColor, int x, i { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(bufferColor[i]); + spiComms.Write(bufferColor[i]); } } else { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(0x00); + spiComms.Write(0x00); } } DelayMs(2); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il91874.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il91874.cs index 95c7da4320..0cf250eb14 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il91874.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Il91874.cs @@ -277,7 +277,7 @@ void DisplayFrame(byte[] bufferBlack, byte[] bufferRed) for (int i = 0; i < Width * Height / 8; i++) { - spiPeripheral.Write(bufferBlack[i]); + spiComms.Write(bufferBlack[i]); } } @@ -289,7 +289,7 @@ void DisplayFrame(byte[] bufferBlack, byte[] bufferRed) for (int i = 0; i < Width * Height / 8; i++) { - spiPeripheral.Write((byte)~bufferRed[i]); + spiComms.Write((byte)~bufferRed[i]); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Ssd1681.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Ssd1681.cs index 1e11f1e5ac..b2047d301c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Ssd1681.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Ssd1681.cs @@ -141,7 +141,7 @@ void DisplayFrame(byte[] blackBuffer, byte[] colorBuffer) for (int i = 0; i < colorBuffer.Length; i++) { //invert the color data - spiPeripheral.Write((byte)~colorBuffer[i]); + spiComms.Write((byte)~colorBuffer[i]); } DisplayFrame(); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Uc8151c.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Uc8151c.cs index a20ec37bee..4093a67c85 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Uc8151c.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/Drivers/Uc8151c.cs @@ -119,14 +119,14 @@ protected void SetPartialWindow(byte[] bufferBlack, byte[] bufferColor, int x, i { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(bufferBlack[i]); + spiComms.Write(bufferBlack[i]); } } else { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(0x00); + spiComms.Write(0x00); } } DelayMs(2); @@ -138,14 +138,14 @@ protected void SetPartialWindow(byte[] bufferBlack, byte[] bufferColor, int x, i { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(bufferColor[i]); + spiComms.Write(bufferColor[i]); } } else { for (int i = 0; i < width / 8 * height; i++) { - spiPeripheral.Write(0x00); + spiComms.Write(0x00); } } DelayMs(2); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs index 375222d28d..0014e77833 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperMonoBase.cs @@ -92,7 +92,7 @@ public EPaperMonoBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new Buffer1bppV(width, height); @@ -284,7 +284,7 @@ public virtual void SetFrameMemory(byte[] buffer) dataCommandPort.State = DataState; for (int i = 0; i < Width / 8 * Height; i++) { - spiPeripheral.Write(buffer[i]); + spiComms.Write(buffer[i]); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs index 91db59c687..5fd512d52b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/EPaperTriColorBase.cs @@ -103,7 +103,7 @@ public EPaperTriColorBase(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); this.width = width; this.height = height; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs index 08929c434c..be73046883 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs @@ -19,8 +19,8 @@ public abstract class EPaperBase : ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -33,8 +33,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// @@ -63,9 +63,9 @@ public SpiClockConfiguration.Mode SpiBusMode protected IDigitalInputPort busyPort; /// - /// The SpiPeripheral object that reprsents the display + /// SPI Communication bus used to communicate with the peripheral /// - protected ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; /// /// Const bool representing the data state @@ -84,7 +84,7 @@ public SpiClockConfiguration.Mode SpiBusMode protected void Write(byte value) { commandBuffer[0] = value; - spiPeripheral.Write(commandBuffer); + spiComms.Write(commandBuffer); } /// @@ -143,7 +143,7 @@ protected void SendData(byte data) protected void SendData(byte[] data) { dataCommandPort.State = DataState; - spiPeripheral.Write(data); + spiComms.Write(data); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs index 443f99c5ca..8447b85c48 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaperWaveShare/Driver/Drivers/Epd5in65f.cs @@ -85,7 +85,7 @@ public Epd5in65f(ISpiBus spiBus, this.resetPort = resetPort; this.busyPort = busyPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); imageBuffer = new BufferIndexed4(Width, Height); @@ -200,7 +200,7 @@ public void Show() dataCommandPort.State = DataState; - spiPeripheral.Write(imageBuffer.Buffer); + spiComms.Write(imageBuffer.Buffer); SendCommand(0x04); WaitForBusyState(true); @@ -232,7 +232,7 @@ public void Show(int left, int top, int right, int bottom) { if (i < bottom && i >= top && j < right / 2 && j >= left / 2) { - spiPeripheral.Write(imageBuffer.Buffer[j + ((Width / 2) * i)]); + spiComms.Write(imageBuffer.Buffer[j + ((Width / 2) * i)]); } else { //no-op diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs index d7e748ffac..cbed8c4296 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs @@ -1,6 +1,6 @@ -using System.Threading.Tasks; using Meadow.Hardware; using Meadow.Units; +using System.Threading.Tasks; namespace Meadow.Foundation.ICs.ADC { @@ -9,7 +9,11 @@ namespace Meadow.Foundation.ICs.ADC /// public abstract partial class Ads1x15Base : PollingSensorBase { - private readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; + private ushort config; // These are config register bit offsets @@ -38,8 +42,8 @@ protected Ads1x15Base(II2cBus i2cBus, Addresses address, MeasureMode mode, ChannelSetting channel) - { - i2cPeripheral = new I2cPeripheral(i2cBus, (byte)address, 3, 3); + { + i2cComms = new I2cCommunications(i2cBus, (byte)address, 3, 3); SetConfigRegister(0x8583); // this is the default reset - force it in case it's not been reset config = GetConfigRegister(); @@ -49,7 +53,7 @@ protected Ads1x15Base(II2cBus i2cBus, private ushort GetRegister(Register register) { - var read = i2cPeripheral.ReadRegisterAsUShort((byte)register, ByteOrder.BigEndian); + var read = i2cComms.ReadRegisterAsUShort((byte)register, ByteOrder.BigEndian); return read; } @@ -59,7 +63,7 @@ private void SetRegister(Register register, ushort value) w[0] = (byte)register; w[1] = (byte)(value >> 8); w[2] = (byte)(value & 0xff); - i2cPeripheral.Write(w); + i2cComms.Write(w); config = value; } @@ -137,8 +141,8 @@ public MeasureMode Mode if (value == Mode) return; ushort newConfig; - - if(value == MeasureMode.OneShot) + + if (value == MeasureMode.OneShot) { newConfig = (ushort)(config | (1 << ModeShift)); } @@ -159,7 +163,7 @@ protected override async Task ReadSensor() var raw = await ReadRaw(); var scale = 0d; - switch(Gain) + switch (Gain) { case FsrGain.TwoThirds: scale = 6.144d; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs index a95da43334..9ecb3c001c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs @@ -1,26 +1,26 @@ +using Meadow.Hardware; using System; using System.Threading; -using Meadow.Hardware; namespace Meadow.Foundation.ICs.EEPROM { /// - /// Encapsulation for EEPROMs based upon the AT24Cxx family of chips. + /// Encapsulation for EEPROMs based upon the AT24Cxx family of chips /// public partial class At24Cxx { /// - /// Communication bus used to communicate with the EEPROM. + /// I2C Communication bus used to communicate with the peripheral /// - private II2cPeripheral Peripheral { get; } + protected readonly II2cCommunications i2cComms; /// - /// Number of bytes in a page. + /// Number of bytes in a page /// public ushort PageSize { get; } /// - /// Number of bytes in the EEPROM module. + /// Number of bytes in the EEPROM module /// public ushort MemorySize { get; } @@ -39,8 +39,8 @@ public At24Cxx(II2cBus i2cBus, ushort pageSize = 32, ushort memorySize = 8192) { - var device = new I2cPeripheral(i2cBus, address); - Peripheral = device; + var device = new I2cCommunications(i2cBus, address); + i2cComms = device; PageSize = pageSize; MemorySize = memorySize; @@ -77,13 +77,13 @@ public byte[] Read(ushort startAddress, ushort amount) { CheckAddress(startAddress, amount); Span data = WriteBuffer.Span[0..2]; - data[0] = (byte) ((startAddress >> 8) & 0xff); - data[1] = (byte) (startAddress & 0xff); + data[0] = (byte)((startAddress >> 8) & 0xff); + data[1] = (byte)(startAddress & 0xff); var results = new byte[amount]; - Peripheral.Write(data); - Peripheral.Read(results); + i2cComms.Write(data); + i2cComms.Read(results); return results; } @@ -95,18 +95,18 @@ public byte[] Read(ushort startAddress, ushort amount) /// Data to be written to the EEPROM. public void Write(ushort startAddress, params byte[] data) { - CheckAddress(startAddress, (ushort) data.Length); + CheckAddress(startAddress, (ushort)data.Length); // // TODO: Convert to use page writes where possible. // for (ushort index = 0; index < data.Length; index++) { - var address = (ushort) (startAddress + index); + var address = (ushort)(startAddress + index); var addressAndData = new byte[3]; - addressAndData[0] = (byte) ((address >> 8) & 0xff); - addressAndData[1] = (byte) (address & 0xff); + addressAndData[0] = (byte)((address >> 8) & 0xff); + addressAndData[1] = (byte)(address & 0xff); addressAndData[2] = data[index]; - Peripheral.Write(addressAndData); + i2cComms.Write(addressAndData); Thread.Sleep(10); } } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs index f29f8ef009..1ccee0403c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs @@ -49,15 +49,15 @@ public AngularVelocity MinimumFanSpeed { get { - byte lsb = i2cPeripheral.ReadRegister((byte)Registers.TachLimitLSB); - byte msb = i2cPeripheral.ReadRegister((byte)Registers.TachLimitMSB); + byte lsb = i2cComms.ReadRegister((byte)Registers.TachLimitLSB); + byte msb = i2cComms.ReadRegister((byte)Registers.TachLimitMSB); ushort speed = (ushort)(msb << 8 | lsb); return new AngularVelocity(FanRpmNumerator / speed, AngularVelocity.UnitType.RevolutionsPerMinute); } set { ushort raw = (ushort)(value.RevolutionsPerMinute * FanRpmNumerator); - i2cPeripheral.WriteRegister((byte)Registers.TachLimitLSB, raw); + i2cComms.WriteRegister((byte)Registers.TachLimitLSB, raw); } } @@ -68,8 +68,8 @@ public AngularVelocity MinimumFanSpeed /// public byte PwmFrequencyScaler { - get => i2cPeripheral.ReadRegister((byte)Registers.PwmFrequency); - set => i2cPeripheral.WriteRegister((byte)Registers.PwmFrequency, Math.Min(value, (byte)0x1F)); + get => i2cComms.ReadRegister((byte)Registers.PwmFrequency); + set => i2cComms.WriteRegister((byte)Registers.PwmFrequency, Math.Min(value, (byte)0x1F)); } /// @@ -78,8 +78,8 @@ public byte PwmFrequencyScaler /// public byte PwmDivisor { - get => i2cPeripheral.ReadRegister((byte)Registers.PwmDivisor); - set => i2cPeripheral.WriteRegister((byte)Registers.PwmDivisor, value); + get => i2cComms.ReadRegister((byte)Registers.PwmDivisor); + set => i2cComms.WriteRegister((byte)Registers.PwmDivisor, value); } /// @@ -87,8 +87,8 @@ public byte PwmDivisor /// public float FanPwmDutyCycle { - get => i2cPeripheral.ReadRegister((byte)Registers.FanSetting) / (float)MaxFanSpeed; - set => i2cPeripheral.WriteRegister((byte)Registers.FanSetting, (byte)(Math.Clamp(value, 0, 1) * MaxFanSpeed)); + get => i2cComms.ReadRegister((byte)Registers.FanSetting) / (float)MaxFanSpeed; + set => i2cComms.WriteRegister((byte)Registers.FanSetting, (byte)(Math.Clamp(value, 0, 1) * MaxFanSpeed)); } /// @@ -98,8 +98,8 @@ public float FanPwmDutyCycle /// The hysteresis temperature value public Temperature Hysteresis { - get => new Temperature(i2cPeripheral.ReadRegister((byte)Registers.LutHysteresis), Temperature.UnitType.Celsius); - set => i2cPeripheral.WriteRegister((byte)Registers.LutHysteresis, (byte)value.Celsius); + get => new Temperature(i2cComms.ReadRegister((byte)Registers.LutHysteresis), Temperature.UnitType.Celsius); + set => i2cComms.WriteRegister((byte)Registers.LutHysteresis, (byte)value.Celsius); } /// @@ -107,8 +107,8 @@ public Temperature Hysteresis /// public DataRate SensorDataRate { - get => (DataRate)i2cPeripheral.ReadRegister((byte)Registers.DataRate); - set => i2cPeripheral.WriteRegister((byte)Registers.DataRate, (byte)value); + get => (DataRate)i2cComms.ReadRegister((byte)Registers.DataRate); + set => i2cComms.WriteRegister((byte)Registers.DataRate, (byte)value); } /// @@ -117,12 +117,12 @@ public DataRate SensorDataRate /// true if enabled bool LutEnabled { - get => BitHelpers.GetBitValue(i2cPeripheral.ReadRegister((byte)Registers.FanConfiguration), 5); + get => BitHelpers.GetBitValue(i2cComms.ReadRegister((byte)Registers.FanConfiguration), 5); set { - byte config = i2cPeripheral.ReadRegister((byte)Registers.FanConfiguration); + byte config = i2cComms.ReadRegister((byte)Registers.FanConfiguration); BitHelpers.SetBit(config, 5, value); - i2cPeripheral.WriteRegister((byte)Registers.FanConfiguration, config); + i2cComms.WriteRegister((byte)Registers.FanConfiguration, config); } } @@ -131,19 +131,19 @@ bool LutEnabled /// public bool DACOutputEnabled { - get => BitHelpers.GetBitValue(i2cPeripheral.ReadRegister((byte)Registers.Configuration), 4); + get => BitHelpers.GetBitValue(i2cComms.ReadRegister((byte)Registers.Configuration), 4); set { - byte config = i2cPeripheral.ReadRegister((byte)Registers.Configuration); + byte config = i2cComms.ReadRegister((byte)Registers.Configuration); config = BitHelpers.SetBit(config, 4, value); - i2cPeripheral.WriteRegister((byte)Registers.Configuration, config); + i2cComms.WriteRegister((byte)Registers.Configuration, config); } } /// - /// Communication bus used to communicate with the Emc2101 + /// I2C Communication bus used to communicate with the peripheral /// - readonly II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// /// Create a new EMC2101 object @@ -152,7 +152,7 @@ public bool DACOutputEnabled /// Address of the EMC2101 (default = 0x4C) public Emc2101(II2cBus i2cBus, byte address = (byte)Address.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -202,18 +202,18 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Temperature? Interna (Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed) conditions; //internal temperature - conditions.InternalTemperature = new Temperature(i2cPeripheral.ReadRegister((byte)Registers.InternalTemperature), Temperature.UnitType.Celsius); + conditions.InternalTemperature = new Temperature(i2cComms.ReadRegister((byte)Registers.InternalTemperature), Temperature.UnitType.Celsius); //external temperature - byte lsb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureLSB); - byte msb = i2cPeripheral.ReadRegister((byte)Registers.ExternalTemperatureMSB); + byte lsb = i2cComms.ReadRegister((byte)Registers.ExternalTemperatureLSB); + byte msb = i2cComms.ReadRegister((byte)Registers.ExternalTemperatureMSB); short raw = (short)(msb << 8 | lsb); raw >>= 5; conditions.ExternalTemperature = new Temperature(raw * TemperatureBit, Temperature.UnitType.Celsius); //fan speed - lsb = i2cPeripheral.ReadRegister((byte)Registers.TachLSB); - msb = i2cPeripheral.ReadRegister((byte)Registers.TachMSB); + lsb = i2cComms.ReadRegister((byte)Registers.TachLSB); + msb = i2cComms.ReadRegister((byte)Registers.TachMSB); short speed = (short)(msb << 8 | lsb); conditions.FanSpeed = new AngularVelocity(FanRpmNumerator / speed, AngularVelocity.UnitType.RevolutionsPerMinute); @@ -226,11 +226,11 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Temperature? Interna /// true to renable, false to disable public void EnableTachInput(bool enable) { - byte config = i2cPeripheral.ReadRegister((byte)Registers.Configuration); + byte config = i2cComms.ReadRegister((byte)Registers.Configuration); config = BitHelpers.SetBit(config, 2, enable); - i2cPeripheral.WriteRegister((byte)Registers.Configuration, config); + i2cComms.WriteRegister((byte)Registers.Configuration, config); } /// @@ -239,11 +239,11 @@ public void EnableTachInput(bool enable) /// true to invert, false for normal public void InvertFanSpeed(bool invert) { - byte config = i2cPeripheral.ReadRegister((byte)Registers.FanConfiguration); + byte config = i2cComms.ReadRegister((byte)Registers.FanConfiguration); config = BitHelpers.SetBit(config, 4, invert); - i2cPeripheral.WriteRegister((byte)Registers.FanConfiguration, config); + i2cComms.WriteRegister((byte)Registers.FanConfiguration, config); } /// @@ -253,12 +253,12 @@ public void InvertFanSpeed(bool invert) /// true to override the base clock and use the frequency divisor to set the PWM frequency public void ConfigurePwmClock(bool clockSelect, bool clockOverride) { - byte config = i2cPeripheral.ReadRegister((byte)Registers.FanConfiguration); + byte config = i2cComms.ReadRegister((byte)Registers.FanConfiguration); config = BitHelpers.SetBit(config, 3, clockSelect); config = BitHelpers.SetBit(config, 2, clockOverride); - i2cPeripheral.WriteRegister((byte)Registers.FanConfiguration, config); + i2cComms.WriteRegister((byte)Registers.FanConfiguration, config); } /// @@ -268,13 +268,13 @@ public void ConfigurePwmClock(bool clockSelect, bool clockOverride) /// The time taken to spin up to the drive speed public void ConfigureFanSpinup(FanSpinupDrive spinupDrive, FanSpinupTime spinupTime) { - byte config = i2cPeripheral.ReadRegister((byte)Registers.FanSpinup); + byte config = i2cComms.ReadRegister((byte)Registers.FanSpinup); config = (byte)(config & ~0x1F); //zero out the bits config |= (byte)spinupDrive; config |= (byte)spinupTime; - i2cPeripheral.WriteRegister((byte)Registers.FanSpinup, config); + i2cComms.WriteRegister((byte)Registers.FanSpinup, config); } /// @@ -302,8 +302,8 @@ public void SetLookupTable(LutIndex index, //Oh C# and bytes/enums ... best to leave as an int and cast when it's used int address = (byte)Registers.LutStartRegister + (byte)index * 2; - i2cPeripheral.WriteRegister((byte)address, (byte)temperatureThreshhold.Celsius); - i2cPeripheral.WriteRegister((byte)(address + 1), (byte)(pwmDutyCycle * MaxFanSpeed)); + i2cComms.WriteRegister((byte)address, (byte)temperatureThreshhold.Celsius); + i2cComms.WriteRegister((byte)(address + 1), (byte)(pwmDutyCycle * MaxFanSpeed)); //restore lut state LutEnabled = lutState; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs index dc4840f326..182c1b27fa 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs @@ -41,9 +41,9 @@ public partial class As1115 : IGraphicsDisplay, IDisposable KeyScanButtonType lastButtonPressed = KeyScanButtonType.None; /// - /// As1115 I2C driver + /// I2C Communication bus used to communicate with the peripheral /// - protected II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// /// The display color mode (1 bit per pixel) @@ -97,7 +97,7 @@ public partial class As1115 : IGraphicsDisplay, IDisposable public As1115(II2cBus i2cBus, IPin buttonInterruptPin, byte address = (byte)Addresses.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); interruptPort = buttonInterruptPin.CreateDigitalInputPort( InterruptMode.EdgeFalling, @@ -120,22 +120,22 @@ void Initialize() KeyScanButtons = new ReadOnlyDictionary(keyDictionary); - i2cPeripheral.WriteRegister(REG_SHUTDOWN, REG_SHUTDOWN_RUNNING | REG_SHUTDOWN_RESET_FEATUREREG); + i2cComms.WriteRegister(REG_SHUTDOWN, REG_SHUTDOWN_RUNNING | REG_SHUTDOWN_RESET_FEATUREREG); - i2cPeripheral.WriteRegister(REG_SCAN_LIMIT, 0x07); + i2cComms.WriteRegister(REG_SCAN_LIMIT, 0x07); SetDecodeMode(DecodeType.Pixel); byte[] data = new byte[2]; //read the key scan registers to clear - i2cPeripheral.ReadRegister(REG_KEYA, data); + i2cComms.ReadRegister(REG_KEYA, data); } private void InterruptPort_Changed(object sender, DigitalPortResult e) { byte[] data = new byte[2]; - i2cPeripheral.ReadRegister(REG_KEYA, data); + i2cComms.ReadRegister(REG_KEYA, data); var keyScanButton = GetButtonFromKeyScanRegister(data[0], data[1]); @@ -206,7 +206,7 @@ KeyScanButtonType GetButtonFromKeyScanRegister(byte keyA, byte keyB) /// True for fast blink (period of 1s), False for slow blink (period of 2s) public void EnableBlink(bool isEnabled, bool fastBlink = true) { - var reg = i2cPeripheral.ReadRegister(REG_FEATURE); + var reg = i2cComms.ReadRegister(REG_FEATURE); byte mask = 1 << REG_FEATURE_BLINK; @@ -229,7 +229,7 @@ public void EnableBlink(bool isEnabled, bool fastBlink = true) reg &= (byte)~mask; } - i2cPeripheral.WriteRegister(REG_FEATURE, reg); + i2cComms.WriteRegister(REG_FEATURE, reg); } /// @@ -247,7 +247,7 @@ void SetDecodeMode(DecodeType mode) switch (mode) { case DecodeType.Pixel: - i2cPeripheral.WriteRegister(REG_DECODE_MODE, 0); + i2cComms.WriteRegister(REG_DECODE_MODE, 0); break; } } @@ -329,7 +329,7 @@ public void SetIntensity(byte intensity) { intensity = Math.Max(intensity, (byte)15); - i2cPeripheral.WriteRegister(REG_GLOBAL_INTEN, intensity); + i2cComms.WriteRegister(REG_GLOBAL_INTEN, intensity); } /// @@ -338,7 +338,7 @@ public void SetIntensity(byte intensity) /// True to enable, false to disable public void TestMode(bool testOn) { - i2cPeripheral.WriteRegister(REG_DECODE_MODE, (byte)(testOn ? 0x01 : 0x00)); + i2cComms.WriteRegister(REG_DECODE_MODE, (byte)(testOn ? 0x01 : 0x00)); } /// @@ -346,14 +346,14 @@ public void TestMode(bool testOn) /// public void Show() { - i2cPeripheral.WriteRegister(REG_DIGIT0, buffer.Buffer[0]); - i2cPeripheral.WriteRegister(REG_DIGIT1, buffer.Buffer[1]); - i2cPeripheral.WriteRegister(REG_DIGIT2, buffer.Buffer[2]); - i2cPeripheral.WriteRegister(REG_DIGIT3, buffer.Buffer[3]); - i2cPeripheral.WriteRegister(REG_DIGIT4, buffer.Buffer[4]); - i2cPeripheral.WriteRegister(REG_DIGIT5, buffer.Buffer[5]); - i2cPeripheral.WriteRegister(REG_DIGIT6, buffer.Buffer[6]); - i2cPeripheral.WriteRegister(REG_DIGIT7, buffer.Buffer[7]); + i2cComms.WriteRegister(REG_DIGIT0, buffer.Buffer[0]); + i2cComms.WriteRegister(REG_DIGIT1, buffer.Buffer[1]); + i2cComms.WriteRegister(REG_DIGIT2, buffer.Buffer[2]); + i2cComms.WriteRegister(REG_DIGIT3, buffer.Buffer[3]); + i2cComms.WriteRegister(REG_DIGIT4, buffer.Buffer[4]); + i2cComms.WriteRegister(REG_DIGIT5, buffer.Buffer[5]); + i2cComms.WriteRegister(REG_DIGIT6, buffer.Buffer[6]); + i2cComms.WriteRegister(REG_DIGIT7, buffer.Buffer[7]); } /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs index 4b41e93f78..7a674efdc5 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs @@ -1,6 +1,6 @@ -using System; +using Meadow.Hardware; +using System; using System.Threading.Tasks; -using Meadow.Hardware; namespace Meadow.Foundation.ICs.IOExpanders { @@ -14,7 +14,10 @@ public partial class Ds3502 /// public static I2cBusSpeed DefaultBusSpeed => I2cBusSpeed.Fast; - private readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; /// /// Create a new Ds3502 object using the default parameters @@ -23,9 +26,9 @@ public partial class Ds3502 /// I2C bus instance public Ds3502(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); - i2cPeripheral.WriteRegister((byte)Register.DS3502_MODE, 0x80); + i2cComms.WriteRegister((byte)Register.DS3502_MODE, 0x80); } /// @@ -34,7 +37,7 @@ public Ds3502(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// the 7-bit wiper value public byte GetWiper() { - return i2cPeripheral.ReadRegister((byte)Register.DS3502_WIPER); + return i2cComms.ReadRegister((byte)Register.DS3502_WIPER); } /// @@ -45,7 +48,7 @@ public void SetWiper(byte value) { value = Math.Min(value, (byte)127); - i2cPeripheral.WriteRegister((byte)Register.DS3502_WIPER, value); + i2cComms.WriteRegister((byte)Register.DS3502_WIPER, value); } /// @@ -55,13 +58,13 @@ public void SetWiper(byte value) public async Task SetWiperDefault(byte value) { value = Math.Min(value, (byte)127); - - i2cPeripheral.WriteRegister((byte)Register.DS3502_MODE, 0x00); - i2cPeripheral.WriteRegister((byte)Register.DS3502_WIPER, value); + + i2cComms.WriteRegister((byte)Register.DS3502_MODE, 0x00); + i2cComms.WriteRegister((byte)Register.DS3502_WIPER, value); await Task.Delay(100).ConfigureAwait(false); - i2cPeripheral.WriteRegister((byte)Register.DS3502_MODE, 0x80); + i2cComms.WriteRegister((byte)Register.DS3502_MODE, 0x80); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs index a3882a9582..65bfb103ed 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs @@ -9,9 +9,9 @@ namespace Meadow.Foundation.ICs.IOExpanders public partial class Ht16k33 { /// - /// HT16K33 LED driver and key scan + /// I2C Communication bus used to communicate with the peripheral /// - private readonly II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// /// Display buffer for 16x8 LEDs @@ -30,16 +30,16 @@ public partial class Ht16k33 /// I2C bus instance public Ht16k33(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address, 8, 17); + i2cComms = new I2cCommunications(i2cBus, address, 8, 17); Initialize(); } void Initialize() { - i2cPeripheral.Write(0x21); + i2cComms.Write(0x21); - i2cPeripheral.Write(0x81); + i2cComms.Write(0x81); SetBrightness(Brightness.Maximum); ClearDisplay(); @@ -53,7 +53,7 @@ public void SetIsAwake(bool awake) { byte value = (byte)((byte)Register.HT16K33_SS | (byte)(awake ? 1 : 0)); - i2cPeripheral.Write(value); + i2cComms.Write(value); } /// @@ -64,7 +64,7 @@ public void SetDisplayOn(bool isOn) { byte value = (byte)((byte)Register.HT16K33_DSP | (byte)(isOn ? 1 : 0)); - i2cPeripheral.Write(value); + i2cComms.Write(value); } /// @@ -75,7 +75,7 @@ public void SetBlinkRate(BlinkRate blinkRate) { byte value = (byte)((byte)Register.HT16K33_DSP | (byte)blinkRate); - i2cPeripheral.Write(value); + i2cComms.Write(value); } /// @@ -86,7 +86,7 @@ public void SetBrightness(Brightness brightness) { byte value = (byte)((byte)Register.HT16K33_DIM | (byte)brightness); - i2cPeripheral.Write(value); + i2cComms.Write(value); } /// @@ -105,7 +105,7 @@ public void ClearDisplay() /// public void UpdateDisplay() { - i2cPeripheral.WriteRegister(0x0, displayBuffer.Span); + i2cComms.WriteRegister(0x0, displayBuffer.Span); } /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs index b4b98c0057..056eaa2f6d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs @@ -28,7 +28,10 @@ public partial class Is31fl3731 const byte CommandRegister = 0xFD; const byte CommandFunctionReg = 0x0B; //'page nine' - readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; /// /// The current frame @@ -42,7 +45,7 @@ public partial class Is31fl3731 /// The I2C address public Is31fl3731(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Frame = 0; } @@ -120,7 +123,7 @@ protected virtual void WriteRegister(byte frame, byte register, byte data) { SelectPage(frame); - i2cPeripheral.WriteRegister(register, data); + i2cComms.WriteRegister(register, data); } /// @@ -173,7 +176,7 @@ public virtual void Clear(byte frame) /// public virtual void ClearAllFrames() { - for(byte i = 0; i < 7; i++) + for (byte i = 0; i < 7; i++) { Clear(i); } @@ -268,7 +271,7 @@ public virtual void SetBlinkFunctionOnAllLeds(byte frame, bool on) /// page/frame # protected virtual void SelectPage(byte page) { - i2cPeripheral.WriteRegister(CommandRegister, page); + i2cComms.WriteRegister(CommandRegister, page); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index e3ac12355c..efe0dcdf66 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -34,8 +34,8 @@ abstract partial class Mcp23xxx : IDigitalInputOutputController, ISpiDevice /// public Frequency SpiBusSpeed { - get => (mcpDevice as ISpiPeripheral).BusSpeed; - set => (mcpDevice as ISpiPeripheral).BusSpeed = value; + get => (mcpDevice as ISpiCommunications).BusSpeed; + set => (mcpDevice as ISpiCommunications).BusSpeed = value; } /// @@ -48,8 +48,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => (mcpDevice as ISpiPeripheral).BusMode; - set => (mcpDevice as ISpiPeripheral).BusMode = value; + get => (mcpDevice as ISpiCommunications).BusMode; + set => (mcpDevice as ISpiCommunications).BusMode = value; } private readonly IByteCommunications mcpDevice; @@ -75,7 +75,7 @@ public SpiClockConfiguration.Mode SpiBusMode protected Mcp23xxx(II2cBus i2cBus, byte address, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) { - mcpDevice = new I2cPeripheral(i2cBus, address); + mcpDevice = new I2cCommunications(i2cBus, address); Initialize(interruptPort, resetPort); } @@ -91,7 +91,7 @@ protected Mcp23xxx(ISpiBus spiBus, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null) { - mcpDevice = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + mcpDevice = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); Initialize(interruptPort, resetPort); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs index 1bdf16ae49..c0af6687ac 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs @@ -11,7 +11,11 @@ namespace Meadow.Foundation.ICs.IOExpanders /// All PWM channels run at the same Frequency public partial class Pca9685 { - private readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; + private readonly Frequency frequency; //# Registers/etc. @@ -55,7 +59,7 @@ public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Address { i2CBus = i2cBus; this.address = address; - i2cPeripheral = new I2cPeripheral(i2CBus, address); + i2cComms = new I2cCommunications(i2CBus, address); this.frequency = frequency; } @@ -160,7 +164,7 @@ void Write(byte register, byte ledXOnL, byte ledXOnH, byte ledXOffL, byte ledXOf void Write(byte register, byte value) { - i2cPeripheral.WriteRegister(register, value); + i2cComms.WriteRegister(register, value); } void SetFrequency(Frequency frequency) @@ -171,7 +175,7 @@ void SetFrequency(Frequency frequency) prescaleval -= 1.0; double prescale = Math.Floor(prescaleval + 0.5); - byte oldmode = i2cPeripheral.ReadRegister(Mode1); + byte oldmode = i2cComms.ReadRegister(Mode1); byte newmode = (byte)((oldmode & 0x7F) | 0x10); // # sleep Write(Mode1, newmode);// # go to sleep diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.cs index 91c64f1d0e..446420f620 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// A TCA9548A i2c multiplexer /// - public partial class Tca9548a : II2cPeripheral + public partial class Tca9548a : II2cCommunications { internal SemaphoreSlim BusSelectorSemaphore = new SemaphoreSlim(1, 1); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs index 1dc61f0d24..cc80b97026 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs @@ -30,8 +30,8 @@ public partial class x74595 : IDigitalOutputController, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -44,27 +44,27 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// - /// Number of chips required to implement this ShiftRegister. + /// Number of chips required to implement this ShiftRegister /// private readonly int numberOfChips; private byte[] latchData; /// - /// SPI interface used to communicate with the shift registers. + /// SPI Communication bus used to communicate with the peripheral /// - private readonly ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; /// /// Default constructor. /// /// - /// This is private to prevent the programmer from calling it explicitly. + /// This is private to prevent the programmer from calling it explicitly /// private x74595() { @@ -86,7 +86,7 @@ public x74595(ISpiBus spiBus, IPin pinChipSelect, int pins = 8) latchData = new byte[numberOfChips]; - spiPeripheral = new SpiPeripheral(spiBus, pinChipSelect?.CreateDigitalOutputPort(), DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, pinChipSelect?.CreateDigitalOutputPort(), DefaultSpiBusSpeed, DefaultSpiBusMode); } else { @@ -123,7 +123,7 @@ public void Clear(bool update = true) if (update) { - spiPeripheral.Write(latchData); + spiComms.Write(latchData); } } @@ -143,7 +143,7 @@ public void WriteToPin(IPin pin, bool value) { throw new Exception("Pin is out of range"); } - spiPeripheral.Write(latchData); + spiComms.Write(latchData); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs index f6b2f955ec..e0b8b8cf6f 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs @@ -20,8 +20,8 @@ public partial class Apa102 : IApa102, ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -34,14 +34,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } /// - /// SpiPeripheral object + /// SPI Communication bus used to communicate with the peripheral /// - protected ISpiPeripheral spiPeripheral; + protected ISpiCommunications spiComms; const short StartHeaderSize = 4; const byte LedStart = 0b11100000; @@ -96,7 +96,7 @@ public Apa102(ISpiBus spiBus, IPin chipSelectPin, int numberOfLeds, PixelOrder p /// SPI chip select port (optional) public Apa102(ISpiBus spiBus, int numberOfLeds, PixelOrder pixelOrder = PixelOrder.BGR, IDigitalOutputPort chipSelectPort = null) { - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); this.numberOfLeds = numberOfLeds; endHeaderSize = this.numberOfLeds / 16; Brightness = 1.0f; @@ -229,7 +229,7 @@ public void Clear(bool update = false) /// public void Show() { - spiPeripheral.Write(buffer); + spiComms.Write(buffer); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs index d454710aa1..a805fe621b 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Leds /// /// Represents a SparkFunQwiicLEDStick that uses APA102 leds /// - public partial class SparkFunQwiicLEDStick : I2cPeripheral, IApa102 + public partial class SparkFunQwiicLEDStick : I2cCommunications, IApa102 { /// /// Enable or disable autowrite to update the LEDs as they're set diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs index 077537a5ba..5e105799f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs @@ -8,9 +8,9 @@ namespace Meadow.Foundation.Leds public partial class Pca9633 { /// - /// Pca9633 i2c peripheral object + /// I2C Communication bus used to communicate with the peripheral /// - readonly II2cPeripheral i2CPeripheral; + protected readonly II2cCommunications i2cComms; /// /// Red LED location - used for RGB control @@ -31,7 +31,7 @@ public partial class Pca9633 public bool IsOn { get => isOn; - set => i2CPeripheral.WriteRegister((byte)Registers.LEDOUT, (byte)(value == true?1:0)); + set => i2cComms.WriteRegister((byte)Registers.LEDOUT, (byte)(value == true ? 1 : 0)); } bool isOn = true; @@ -52,7 +52,7 @@ public Pca9633(II2cBus i2cBus, Addresses address) /// i2c address public Pca9633(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -60,10 +60,10 @@ public Pca9633(II2cBus i2cBus, byte address = (byte)Addresses.Default) void Initialize() { // backlight init - i2CPeripheral.WriteRegister((byte)Registers.MODE1, 0); + i2cComms.WriteRegister((byte)Registers.MODE1, 0); // set LEDs controllable by both PWM and GRPPWM registers - i2CPeripheral.WriteRegister(8, 0xFF); - i2CPeripheral.WriteRegister((byte)Registers.MODE2, 20); + i2cComms.WriteRegister(8, 0xFF); + i2cComms.WriteRegister((byte)Registers.MODE2, 20); } /// @@ -71,19 +71,19 @@ void Initialize() /// public void Wake() { - var value = i2CPeripheral.ReadRegister((byte)Registers.MODE1); + var value = i2cComms.ReadRegister((byte)Registers.MODE1); value = (byte)(value & ~(1 << BIT_SLEEP)); - i2CPeripheral.WriteRegister((byte)Registers.MODE1, value); + i2cComms.WriteRegister((byte)Registers.MODE1, value); } - + /// /// Put device into sleep state /// public void Sleep() { - var value = i2CPeripheral.ReadRegister((byte)Registers.MODE1); + var value = i2cComms.ReadRegister((byte)Registers.MODE1); value = (byte)(value | (1 << BIT_SLEEP)); - i2CPeripheral.WriteRegister((byte)Registers.MODE1, value); + i2cComms.WriteRegister((byte)Registers.MODE1, value); } /// @@ -107,15 +107,15 @@ public void SetColor(Color color) { if (LedRed != LedPosition.Undefined) { - i2CPeripheral.WriteRegister((byte)LedRed, (byte)(255 - color.R)); + i2cComms.WriteRegister((byte)LedRed, (byte)(255 - color.R)); } if (LedGreen != LedPosition.Undefined) { - i2CPeripheral.WriteRegister((byte)LedGreen, (byte)(255 - color.G)); + i2cComms.WriteRegister((byte)LedGreen, (byte)(255 - color.G)); } if (LedBlue != LedPosition.Undefined) { - i2CPeripheral.WriteRegister((byte)LedBlue, (byte)(255 - color.B)); + i2cComms.WriteRegister((byte)LedBlue, (byte)(255 - color.B)); } } @@ -126,7 +126,7 @@ public void SetColor(Color color) /// brightness (0-255) public void SetLedBrightness(LedPosition led, byte brightness) { - i2CPeripheral.WriteRegister((byte)led, (byte)(255 - brightness)); + i2cComms.WriteRegister((byte)led, (byte)(255 - brightness)); } /// @@ -135,7 +135,7 @@ public void SetLedBrightness(LedPosition led, byte brightness) /// brightness (0-255) public void SetGroupBrightess(byte brightness) { - i2CPeripheral.WriteRegister((byte)Registers.GRPPWM, (byte)(255 - brightness)); + i2cComms.WriteRegister((byte)Registers.GRPPWM, (byte)(255 - brightness)); } /// @@ -145,10 +145,10 @@ public void SetGroupBrightess(byte brightness) /// public void SetDriveMode(DriveType drive) { - var value = i2CPeripheral.ReadRegister((byte)Registers.MODE2); + var value = i2cComms.ReadRegister((byte)Registers.MODE2); value = (byte)(value & ~(1 << BIT_OUTDRV)); value |= (byte)((byte)drive << BIT_OUTDRV); - i2CPeripheral.WriteRegister((byte)Registers.MODE2, value); + i2cComms.WriteRegister((byte)Registers.MODE2, value); } /// @@ -165,7 +165,7 @@ public void SetAutoIncrementMode(AutoIncrement mode) AutoIncrement.IndividualAndGlobalRegisters => 1 << 7 | 1 << 6 | 1 << 5, _ => 0, }; - i2CPeripheral.WriteRegister((byte)Registers.MODE1, (byte)value); + i2cComms.WriteRegister((byte)Registers.MODE1, (byte)value); } diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs index c8fbf5d88b..6b7b7dfeee 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs @@ -17,7 +17,7 @@ public Ds3231( II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Address.Default) - : base(new I2cPeripheral(i2cBus, address), interruptPin) + : base(new I2cCommunications(i2cBus, address), interruptPin) { } /// @@ -30,7 +30,7 @@ public Ds3231( II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Address.Default) - : base(new I2cPeripheral(i2cBus, address), interruptPort) + : base(new I2cCommunications(i2cBus, address), interruptPort) { } } diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs index d3dd5d40a2..2999d3ca2f 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs @@ -89,7 +89,7 @@ static class Registers /// /// Create a new Ds323x object /// - protected Ds323x(I2cPeripheral peripheral, IPin interruptPin) + protected Ds323x(I2cCommunications peripheral, IPin interruptPin) { ds323x = peripheral; @@ -107,7 +107,7 @@ protected Ds323x(I2cPeripheral peripheral, IPin interruptPin) /// /// Create a new Ds323x object /// - protected Ds323x(I2cPeripheral peripheral, IDigitalInputPort interruptPort) + protected Ds323x(I2cCommunications peripheral, IDigitalInputPort interruptPort) { ds323x = peripheral; @@ -231,7 +231,7 @@ public Units.Temperature Temperature /// /// DS323x Real Time Clock object. /// - protected II2cPeripheral ds323x { get; } + protected II2cCommunications ds323x { get; } /// /// Interrupt port attached to the DS323x RTC module. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index fe18e6a55d..2d92de27d7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -119,8 +119,8 @@ public partial class Bme280 : /// public Frequency SpiBusSpeed { - get => ((Bme280Spi)bme280Comms).SpiPeripheral.BusSpeed; - set => ((Bme280Spi)bme280Comms).SpiPeripheral.BusSpeed = value; + get => ((Bme280Spi)bme280Comms).spiComms.BusSpeed; + set => ((Bme280Spi)bme280Comms).spiComms.BusSpeed = value; } /// @@ -133,8 +133,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((Bme280Spi)bme280Comms).SpiPeripheral.BusMode; - set => ((Bme280Spi)bme280Comms).SpiPeripheral.BusMode = value; + get => ((Bme280Spi)bme280Comms).spiComms.BusMode; + set => ((Bme280Spi)bme280Comms).spiComms.BusMode = value; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs index 99c82800d4..16111a826e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs @@ -1,11 +1,14 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using System; namespace Meadow.Foundation.Sensors.Atmospheric { internal class Bme280I2C : Bme280Comms { - protected I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; internal Bme280I2C(II2cBus i2c, byte busAddress) { @@ -13,17 +16,17 @@ internal Bme280I2C(II2cBus i2c, byte busAddress) { throw new ArgumentOutOfRangeException(nameof(busAddress), "Address should be 0x76 or 0x77"); } - i2CPeripheral = new I2cPeripheral(i2c, busAddress); + i2cComms = new I2cCommunications(i2c, busAddress); } public override void ReadRegisters(byte startRegister, Span readBuffer) { - i2CPeripheral.ReadRegister(startRegister, readBuffer); + i2cComms.ReadRegister(startRegister, readBuffer); } public override void WriteRegister(Register register, byte value) { - i2CPeripheral.WriteRegister((byte)register, value); + i2cComms.WriteRegister((byte)register, value); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs index 20249a5bb0..b720c23fdd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs @@ -7,18 +7,18 @@ namespace Meadow.Foundation.Sensors.Atmospheric internal class Bme280Spi : Bme280Comms { /// - /// The SPI peripheral object + /// SPI Communication bus used to communicate with the peripheral /// - internal ISpiPeripheral SpiPeripheral; + internal readonly ISpiCommunications spiComms; internal Bme280Spi(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - SpiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode); + spiComms = new SpiCommunications(spi, chipSelect, busSpeed, busMode); } public override void ReadRegisters(byte startRegister, Span readBuffer) { - SpiPeripheral.ReadRegister(startRegister, readBuffer); + spiComms.ReadRegister(startRegister, readBuffer); // skip past the byte where we clocked out the register address for (int i = 1; i < readBuffer.Length; i++) @@ -29,7 +29,7 @@ public override void ReadRegisters(byte startRegister, Span readBuffer) public override void WriteRegister(Register register, byte value) { - SpiPeripheral.WriteRegister((byte)register, value); + spiComms.WriteRegister((byte)register, value); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index 4e2653f49e..ed815316fd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -165,8 +165,8 @@ public bool GasConversionIsEnabled /// public Frequency SpiBusSpeed { - get => ((Bme68xSPI)sensor).SpiPeripheral.BusSpeed; - set => ((Bme68xSPI)sensor).SpiPeripheral.BusSpeed = value; + get => ((Bme68xSPI)sensor).spiComms.BusSpeed; + set => ((Bme68xSPI)sensor).spiComms.BusSpeed = value; } /// @@ -179,8 +179,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((Bme68xSPI)sensor).SpiPeripheral.BusMode; - set => ((Bme68xSPI)sensor).SpiPeripheral.BusMode = value; + get => ((Bme68xSPI)sensor).spiComms.BusMode; + set => ((Bme68xSPI)sensor).spiComms.BusMode = value; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs index b281ee5d1e..096ea2fda1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs @@ -1,29 +1,32 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using System; namespace Meadow.Foundation.Sensors.Atmospheric { internal class Bme68xI2C : Bme68xComms { - protected I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; internal Bme68xI2C(II2cBus i2c, byte busAddress) { - i2CPeripheral = new I2cPeripheral(i2c, busAddress); + i2cComms = new I2cCommunications(i2c, busAddress); } - - public override byte ReadRegister(byte address) => i2CPeripheral.ReadRegister(address); - public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) => i2CPeripheral.ReadRegisterAsUShort(address, order); + public override byte ReadRegister(byte address) => i2cComms.ReadRegister(address); + + public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) => i2cComms.ReadRegisterAsUShort(address, order); public override void ReadRegister(byte address, Span readBuffer) { - i2CPeripheral.ReadRegister(address, readBuffer); + i2cComms.ReadRegister(address, readBuffer); } public override void WriteRegister(byte register, byte value) { - i2CPeripheral.WriteRegister(register, value); + i2cComms.WriteRegister(register, value); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs index b0467dcb74..866879048f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs @@ -28,15 +28,15 @@ internal enum SpiRegisterPage : byte } /// - /// The SPI peripheral object + /// SPI Communication bus used to communicate with the peripheral /// - internal ISpiPeripheral SpiPeripheral; + internal readonly ISpiCommunications spiComms; SpiRegisterPage currentPage = SpiRegisterPage.Page1; internal Bme68xSPI(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) { - SpiPeripheral = new SpiPeripheral(spi, chipSelect, busSpeed, busMode, 32, 32); + spiComms = new SpiCommunications(spi, chipSelect, busSpeed, busMode, 32, 32); } public override byte ReadRegister(byte address) @@ -46,7 +46,7 @@ public override byte ReadRegister(byte address) //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return SpiPeripheral.ReadRegister(address); + return spiComms.ReadRegister(address); } public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) @@ -56,7 +56,7 @@ public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = Byte //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return SpiPeripheral.ReadRegisterAsUShort(address, order); + return spiComms.ReadRegisterAsUShort(address, order); } public override void ReadRegister(byte startRegister, Span readBuffer) @@ -66,7 +66,7 @@ public override void ReadRegister(byte startRegister, Span readBuffer) //adjust register for paging if (startRegister > 0x7F) { startRegister -= 0x7F; } - SpiPeripheral.ReadRegister(startRegister, readBuffer); + spiComms.ReadRegister(startRegister, readBuffer); return; } @@ -78,7 +78,7 @@ public override void WriteRegister(byte register, byte value) //adjust register for paging if (register > 0x7F) { register -= 0x7F; } - SpiPeripheral.WriteRegister(register, value); + spiComms.WriteRegister(register, value); } void SetPageForRegister(byte register) @@ -89,7 +89,7 @@ void SetPageForRegister(byte register) //swap the page currentPage = (currentPage == SpiRegisterPage.Page0) ? SpiRegisterPage.Page1 : SpiRegisterPage.Page0; //write the page to the status register - SpiPeripheral.WriteRegister(0x73, (byte)currentPage); + spiComms.WriteRegister(0x73, (byte)currentPage); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs index bab6e42bda..19324e836b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs @@ -4,37 +4,40 @@ namespace Meadow.Foundation.Sensors.Atmospheric { internal class Ms5611I2c : Ms5611Base { - private I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; internal Ms5611I2c(II2cBus i2cBus, byte address, Ms5611.Resolution resolution) : base(resolution) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); } public override void Reset() { var cmd = (byte)Commands.Reset; - i2CPeripheral.Write(cmd); + i2cComms.Write(cmd); } public override void BeginTempConversion() { var cmd = (byte)((byte)Commands.ConvertD2 + 2 * (byte)Resolution); - i2CPeripheral.Write(cmd); + i2cComms.Write(cmd); } public override void BeginPressureConversion() { var cmd = (byte)((byte)Commands.ConvertD1 + 2 * (byte)Resolution); - i2CPeripheral.Write(cmd); + i2cComms.Write(cmd); } public override byte[] ReadData() { var data = new byte[3]; - i2CPeripheral.ReadRegister((byte)Commands.ReadADC, data); + i2cComms.ReadRegister((byte)Commands.ReadADC, data); return data; } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs index 71e0ef23ab..12972797ce 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs @@ -1,5 +1,5 @@ -using System; -using Meadow.Hardware; +using Meadow.Hardware; +using System; using System.Threading; namespace Meadow.Foundation.Sensors.Camera @@ -18,9 +18,9 @@ public partial class Mlx90640 /// /// Emissivity /// - public float Emissivity + public float Emissivity { - get => emissivity; + get => emissivity; set { if (value > 1) @@ -35,7 +35,7 @@ public float Emissivity { emissivity = value; } - } + } } /// @@ -53,7 +53,10 @@ public float Emissivity const byte OpenAirTaShift = 8; const short DeviceId1Register = 0x2407; - readonly II2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; float emissivity; @@ -67,7 +70,7 @@ public Mlx90640(II2cBus i2cBus, byte address = (byte)Addresses.Default, float emissivity = 0.95f) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Emissivity = emissivity; Config = new Mlx90640Config(); @@ -100,7 +103,7 @@ void Initialize() public float[] ReadRawData() { ushort[] mlx90640Frame = new ushort[834]; - float[] frameBuffer =new float[32 * 24]; + float[] frameBuffer = new float[32 * 24]; for (byte page = 0; page < 2; page++) { @@ -194,7 +197,7 @@ bool GetFrameData(ref ushort[] frameData) if (cnt > 4) return false; - I2CRead(0x800D, 1, ref controlRegister1); + I2CRead(0x800D, 1, ref controlRegister1); frameData[832] = controlRegister1[0]; frameData[833] = (ushort)(statusRegister[0] & 0x0001); @@ -208,9 +211,9 @@ void I2CRead(int startAddress, ushort readLen, ref ushort[] data) while (readLen > 0) { - ushort toRead16 = (int)(MaxBufferSize / 2); + ushort toRead16 = MaxBufferSize / 2; - if (readLen < (int)(MaxBufferSize / 2)) + if (readLen < MaxBufferSize / 2) toRead16 = readLen; cmd[0] = (byte)(startAddress >> 8); @@ -218,13 +221,13 @@ void I2CRead(int startAddress, ushort readLen, ref ushort[] data) Span writeBuffer = new Span(cmd); Span tempBuf = new Span(new byte[toRead16 * 2]); - i2CPeripheral.Exchange(writeBuffer, tempBuf); + i2cComms.Exchange(writeBuffer, tempBuf); // we now have to swap every two bytes int index = 0; for (int i = bufferIndex; i < bufferIndex + toRead16; i++) { - data[i] = (ushort)((ushort)(tempBuf[index] * 256) + (ushort)tempBuf[index + 1]); ; + data[i] = (ushort)((ushort)(tempBuf[index] * 256) + tempBuf[index + 1]); ; index += 2; } @@ -244,7 +247,7 @@ bool I2CWrite(ushort writeAddress, ushort data) cmd[2] = (byte)(data >> 8); cmd[3] = (byte)(data & 0x00FF); - i2CPeripheral.Write(cmd); + i2cComms.Write(cmd); Thread.Sleep(1); @@ -322,7 +325,7 @@ void CalculateTo(ushort[] frameData, Mlx90640Config mlx90640, float emissivity, { if (irDataCP[i] > 32767) irDataCP[i] = irDataCP[i] - 65536; - + irDataCP[i] = irDataCP[i] * gain; } @@ -402,8 +405,8 @@ float GetTa(ushort[] frameData, Mlx90640Config mlx90640) ptatArt = frameData[768]; if (ptatArt > 32767) ptatArt -= 65536; - - ptatArt = (float)((ptat / (ptat * mlx90640.AlphaPTAT + ptatArt)) * Math.Pow(2, (double)18)); + + ptatArt = (float)((ptat / (ptat * mlx90640.AlphaPTAT + ptatArt)) * Math.Pow(2, 18)); ta = (float)((ptatArt / (1 + mlx90640.KvPTAT * (vdd - 3.3)) - mlx90640.VPTAT25)); ta = ta / mlx90640.KtPTAT + 25; @@ -425,7 +428,7 @@ float GetVdd(ushort[] frameData, Mlx90640Config mlx90640) } resolutionRAM = (frameData[832] & 0x0C00) >> 10; - resolutionCorrection = (float)(Math.Pow(2, (double)mlx90640.ResolutionEE) / Math.Pow(2, (double)resolutionRAM)); + resolutionCorrection = (float)(Math.Pow(2, mlx90640.ResolutionEE) / Math.Pow(2, resolutionRAM)); vdd = (float)((resolutionCorrection * vdd - mlx90640.Vdd25) / mlx90640.KVdd + 3.3); return vdd; @@ -480,7 +483,7 @@ void ExtractPTATParameters(ref ushort[] eeData) KvPTAT = (eeData[50] & 0xFC00) >> 10; if (KvPTAT > 31) KvPTAT -= 64; - + KvPTAT /= 4096; KtPTAT = eeData[50] & 0x03FF; @@ -517,7 +520,7 @@ void ExtractTgcParameters(ref ushort[] eeData) tgc = eeData[60] & 0x00FF; if (tgc > 127) tgc -= 256; - + tgc /= 32.0f; Config.Tgc = tgc; @@ -539,7 +542,7 @@ void ExtractKsTaParameters(ref ushort[] eeData) KsTa = (eeData[60] & 0xFF00) >> 8; if (KsTa > 127) KsTa -= 256; - + KsTa /= 8192.0f; Config.KsTa = KsTa; @@ -637,10 +640,10 @@ void ExtractAlphaParameters(ref ushort[] eeData) alphaTemp[p] = (eeData[64 + p] & 0x03F0) >> 4; if (alphaTemp[p] > 31) alphaTemp[p] = alphaTemp[p] - 64; - + alphaTemp[p] = alphaTemp[p] * (1 << accRemScale); alphaTemp[p] = (alphaRef + (accRow[i] << accRowScale) + (accColumn[j] << accColumnScale) + alphaTemp[p]); - alphaTemp[p] = (float)(alphaTemp[p] / Math.Pow(2, (double)alphaScale)); + alphaTemp[p] = (float)(alphaTemp[p] / Math.Pow(2, alphaScale)); alphaTemp[p] = alphaTemp[p] - Config.Tgc * (Config.CpAlpha[0] + Config.CpAlpha[1]) / 2; alphaTemp[p] = ScaleAlpha / alphaTemp[p]; } @@ -651,7 +654,7 @@ void ExtractAlphaParameters(ref ushort[] eeData) { if (alphaTemp[i] > temp) temp = alphaTemp[i]; - + } alphaScale = 0; @@ -670,7 +673,7 @@ void ExtractAlphaParameters(ref ushort[] eeData) for (int i = 0; i < 768; i++) { - temp = (float)(alphaTemp[i] * Math.Pow(2, (double)alphaScale)); + temp = (float)(alphaTemp[i] * Math.Pow(2, alphaScale)); Config.Alpha[i] = (short)(temp + 0.5); } @@ -775,13 +778,13 @@ void ExtractKtaPixelParameters(ref ushort[] eeData) KtaRoCe = (sbyte)((eeData[55] & 0xFF00) >> 8); if (KtaRoCe > 127) KtaRoCe = (sbyte)(KtaRoCe - 256); - + KtaRC[1] = KtaRoCe; KtaReCe = (sbyte)((eeData[55] & 0x00FF)); if (KtaReCe > 127) KtaReCe = (sbyte)(KtaReCe - 256); - + KtaRC[3] = KtaReCe; ktaScale1 = (byte)(((eeData[56] & 0x00F0) >> 4) + 8); @@ -796,10 +799,10 @@ void ExtractKtaPixelParameters(ref ushort[] eeData) ktaTemp[p] = (eeData[64 + p] & 0x000E) >> 1; if (ktaTemp[p] > 3) ktaTemp[p] = ktaTemp[p] - 8; - + ktaTemp[p] = ktaTemp[p] * (1 << ktaScale2); ktaTemp[p] = KtaRC[split] + ktaTemp[p]; - ktaTemp[p] = (float)(ktaTemp[p] / Math.Pow(2, (double)ktaScale1)); + ktaTemp[p] = (float)(ktaTemp[p] / Math.Pow(2, ktaScale1)); } } @@ -808,7 +811,7 @@ void ExtractKtaPixelParameters(ref ushort[] eeData) { if (Math.Abs(ktaTemp[i]) > temp) temp = Math.Abs(ktaTemp[i]); - + } ktaScale1 = 0; @@ -820,7 +823,7 @@ void ExtractKtaPixelParameters(ref ushort[] eeData) for (int i = 0; i < 768; i++) { - temp = (float)(ktaTemp[i] * Math.Pow(2, (double)ktaScale1)); + temp = (float)(ktaTemp[i] * Math.Pow(2, ktaScale1)); if (temp < 0) Config.Kta[i] = (sbyte)(temp - 0.5); else @@ -846,25 +849,25 @@ void ExtractKvPixelParameters(ref ushort[] eeData) KvRoCo = (sbyte)((eeData[52] & 0xF000) >> 12); if (KvRoCo > 7) KvRoCo = (sbyte)(KvRoCo - 16); - + KvT[0] = KvRoCo; KvReCo = (sbyte)((eeData[52] & 0x0F00) >> 8); if (KvReCo > 7) KvReCo = (sbyte)(KvReCo - 16); - + KvT[2] = KvReCo; KvRoCe = (sbyte)((eeData[52] & 0x00F0) >> 4); if (KvRoCe > 7) KvRoCe = (sbyte)(KvRoCe - 16); - + KvT[1] = KvRoCe; KvReCe = (sbyte)((eeData[52] & 0x000F)); if (KvReCe > 7) KvReCe = (sbyte)(KvReCe - 16); - + KvT[3] = KvReCe; kvScale = (byte)((eeData[56] & 0x0F00) >> 8); @@ -876,7 +879,7 @@ void ExtractKvPixelParameters(ref ushort[] eeData) int p = 32 * i + j; split = (byte)(2 * (p / 32 - (p / 64) * 2) + p % 2); kvTemp[p] = KvT[split]; - kvTemp[p] = (float)(kvTemp[p] / Math.Pow(2, (double)kvScale)); + kvTemp[p] = (float)(kvTemp[p] / Math.Pow(2, kvScale)); } } @@ -885,7 +888,7 @@ void ExtractKvPixelParameters(ref ushort[] eeData) { if (Math.Abs(kvTemp[i]) > temp) temp = Math.Abs(kvTemp[i]); - + } kvScale = 0; @@ -897,7 +900,7 @@ void ExtractKvPixelParameters(ref ushort[] eeData) for (int i = 0; i < 768; i++) { - temp = (float)(kvTemp[i] * Math.Pow(2, (double)kvScale)); + temp = (float)(kvTemp[i] * Math.Pow(2, kvScale)); if (temp < 0) Config.Kv[i] = (sbyte)(temp - 0.5); else @@ -929,7 +932,7 @@ void ExtractCILCParameters(ref ushort[] eeData) { ilChessC[1] = ilChessC[1] - 32; } - + ilChessC[1] = ilChessC[1] / 2.0f; ilChessC[2] = (eeData[53] & 0xF800) >> 11; @@ -937,7 +940,7 @@ void ExtractCILCParameters(ref ushort[] eeData) { ilChessC[2] = ilChessC[2] - 32; } - + ilChessC[2] = ilChessC[2] / 8.0f; Config.CalibrationModeEE = calibrationModeEE; @@ -996,16 +999,16 @@ void ExtractCPParameters(ref ushort[] eeData) } ktaScale1 = (byte)(((eeData[56] & 0x00F0) >> 4) + 8); - Config.CpKta = (float)(cpKta / Math.Pow(2, (double)ktaScale1)); + Config.CpKta = (float)(cpKta / Math.Pow(2, ktaScale1)); cpKv = (eeData[59] & 0xFF00) >> 8; if (cpKv > 127) { cpKv -= 256; } - + kvScale = (byte)((eeData[56] & 0x0F00) >> 8); - Config.CpKv = (float)(cpKv / Math.Pow(2, (double)kvScale)); + Config.CpKv = (float)(cpKv / Math.Pow(2, kvScale)); Config.CpAlpha[0] = alphaSP[0]; Config.CpAlpha[1] = alphaSP[1]; @@ -1033,7 +1036,7 @@ void ExtractDeviatingPixels(ref ushort[] eeData) } - if(Config.BrokenPixels.Count > 1 ) + if (Config.BrokenPixels.Count > 1) { for (pixCnt = 0; pixCnt < Config.BrokenPixels.Count; pixCnt++) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs index ef7d5bb1a2..8ffcf62d87 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs @@ -8,12 +8,14 @@ namespace Meadow.Foundation.Sensors.Gnss { public partial class NeoM8 { - I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected II2cCommunications i2cComms; readonly Memory i2cBuffer = new byte[BUFFER_SIZE]; - - IDigitalOutputPort resetPort; - IDigitalInputPort ppsPort; + readonly IDigitalOutputPort resetPort; + readonly IDigitalInputPort ppsPort; /// /// Create a new NeoM8 object using I2C @@ -46,7 +48,7 @@ public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalOut async Task InitializeI2c(II2cBus i2cBus, byte address) { - i2CPeripheral = new I2cPeripheral(i2cBus, address, 128); + i2cComms = new I2cCommunications(i2cBus, address, 128); messageProcessor = new SerialMessageProcessor(suffixDelimiter: Encoding.ASCII.GetBytes("\r\n"), preserveDelimiter: true, @@ -68,7 +70,7 @@ async Task StartUpdatingI2c() while (true) { - len = i2CPeripheral.ReadRegisterAsUShort(0xFD, ByteOrder.BigEndian); + len = i2cComms.ReadRegisterAsUShort(0xFD, ByteOrder.BigEndian); if (len > 0) { @@ -76,7 +78,7 @@ async Task StartUpdatingI2c() { var data = i2cBuffer.Slice(0, Math.Min(len, BUFFER_SIZE)).Span; - i2CPeripheral.ReadRegister(0xFF, data); + i2cComms.ReadRegister(0xFF, data); messageProcessor.Process(data.ToArray()); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs index 536905cbc5..2b7c503b05 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs @@ -18,8 +18,8 @@ public partial class NeoM8 : ISpiDevice /// public Frequency SpiBusSpeed { - get => spiPeripheral.BusSpeed; - set => spiPeripheral.BusSpeed = value; + get => spiComms.BusSpeed; + set => spiComms.BusSpeed = value; } /// @@ -32,11 +32,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => spiPeripheral.BusMode; - set => spiPeripheral.BusMode = value; + get => spiComms.BusMode; + set => spiComms.BusMode = value; } - readonly ISpiPeripheral spiPeripheral; + /// + /// SPI Communication bus used to communicate with the peripheral + /// + protected ISpiCommunications spiComms; const byte NULL_VALUE = 0xFF; @@ -51,7 +54,7 @@ public NeoM8(ISpiBus spiBus, ResetPort = resetPort; PulsePerSecondPort = ppsPort; - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); _ = InitializeSpi(); } @@ -63,7 +66,7 @@ public NeoM8(ISpiBus spiBus, IPin chipSelectPin = null, IPin resetPin = null, IP { var chipSelectPort = chipSelectPin.CreateDigitalOutputPort(); - spiPeripheral = new SpiPeripheral(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); + spiComms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); resetPin?.CreateDigitalOutputPort(true); @@ -109,7 +112,7 @@ static bool HasMoreData(byte[] data) { while (true) { - spiPeripheral.Read(data); + spiComms.Read(data); messageProcessor.Process(data); if (HasMoreData(data) == false) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs index fbe6d8b765..2c848807bd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs @@ -58,7 +58,10 @@ public DigitalJoystickPosition? DigitalPosition } } - readonly II2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; /// /// Create a new As5013 object @@ -68,7 +71,7 @@ public DigitalJoystickPosition? DigitalPosition /// port connected to the interrupt pin public As5013(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalInterruptPort interruptPort = null) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); if (interruptPort != null) { @@ -141,11 +144,11 @@ public void SetLowPowerMode(byte timing) { timing %= 8; - byte value = (byte)(i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x7F); + byte value = (byte)(i2cComms.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x7F); value |= (byte)(timing << 4); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL1, value); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL1, value); } /// @@ -156,11 +159,11 @@ public void SetScalingFactor(byte scalingFactor) { if (scalingFactor > 32) { - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_T_CTRL, scalingFactor); + i2cComms.WriteRegister((byte)Register.JOYSTICK_T_CTRL, scalingFactor); } else { - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_T_CTRL, (byte)Command.JOYSTICK_T_CTRL_SCALING_100_CMD); + i2cComms.WriteRegister((byte)Register.JOYSTICK_T_CTRL, (byte)Command.JOYSTICK_T_CTRL_SCALING_100_CMD); } } @@ -169,7 +172,7 @@ public void SetScalingFactor(byte scalingFactor) /// public void InvertSpinning() { - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL2, (byte)Command.JOYSTICK_INVERT_SPINING_CMD); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL2, (byte)Command.JOYSTICK_INVERT_SPINING_CMD); } /// @@ -177,16 +180,16 @@ public void InvertSpinning() /// public void SoftReset() { - var value = (byte)(i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x01); + var value = (byte)(i2cComms.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x01); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); } void Update() { - sbyte xValue = (sbyte)i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_X); + sbyte xValue = (sbyte)i2cComms.ReadRegister((byte)Register.JOYSTICK_X); Thread.Sleep(1); - sbyte yValue = (sbyte)i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_Y_RES_INT); + sbyte yValue = (sbyte)i2cComms.ReadRegister((byte)Register.JOYSTICK_Y_RES_INT); Thread.Sleep(1); float newX = xValue / 128.0f * (IsHorizontalInverted ? -1 : 1); @@ -213,9 +216,9 @@ void Update() /// public void DisableInterrupt() { - var value = (byte)(i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x04); + var value = (byte)(i2cComms.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x04); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); } /// @@ -223,9 +226,9 @@ public void DisableInterrupt() /// public void EnableInterrupt() { - var value = (byte)(i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_CONTROL1) | 0x04); + var value = (byte)(i2cComms.ReadRegister((byte)Register.JOYSTICK_CONTROL1) | 0x04); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); } /// @@ -233,13 +236,13 @@ public void EnableInterrupt() /// public void SetDefaultConfiguration() { - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL2, (byte)Command.JOYSTICK_CONTROL2_TEST_CMD); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_AGC, (byte)Command.JOYSTICK_AGC_MAX_SENSITIVITY_CMD); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_T_CTRL, (byte)Command.JOYSTICK_T_CTRL_SCALING_90_8_CMD); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL2, (byte)Command.JOYSTICK_CONTROL2_TEST_CMD); + i2cComms.WriteRegister((byte)Register.JOYSTICK_AGC, (byte)Command.JOYSTICK_AGC_MAX_SENSITIVITY_CMD); + i2cComms.WriteRegister((byte)Register.JOYSTICK_T_CTRL, (byte)Command.JOYSTICK_T_CTRL_SCALING_90_8_CMD); - byte value = (byte)(i2CPeripheral.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x01); + byte value = (byte)(i2cComms.ReadRegister((byte)Register.JOYSTICK_CONTROL1) & 0x01); - i2CPeripheral.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); + i2cComms.WriteRegister((byte)Register.JOYSTICK_CONTROL1, (byte)((byte)Command.JOYSTICK_CONTROL1_RESET_CMD | value)); } DigitalJoystickPosition GetDigitalJoystickPosition() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs index 199c6c259d..40e32ad86b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs @@ -9,7 +9,10 @@ namespace Meadow.Foundation.Sensors.Hid /// public partial class BBQ10Keyboard { - readonly I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; readonly IDigitalInterruptPort interruptPort; @@ -18,17 +21,17 @@ public partial class BBQ10Keyboard /// public event EventHandler OnKeyEvent = delegate { }; - byte Status => i2CPeripheral.ReadRegister((byte)Registers.KEY); + byte Status => i2cComms.ReadRegister((byte)Registers.KEY); - byte KeyCount => (byte)(i2CPeripheral.ReadRegister(KEY_COUNT_MASK) & Status); + byte KeyCount => (byte)(i2cComms.ReadRegister(KEY_COUNT_MASK) & Status); /// /// Get or set the backlight /// public byte BackLight { - get => i2CPeripheral.ReadRegister((byte)Registers.BKL); - set => i2CPeripheral.WriteRegister((byte)Registers.BKL, value); + get => i2cComms.ReadRegister((byte)Registers.BKL); + set => i2cComms.WriteRegister((byte)Registers.BKL, value); } /// @@ -36,8 +39,8 @@ public byte BackLight /// public byte BackLight2 { - get => i2CPeripheral.ReadRegister((byte)Registers.BK2); - set => i2CPeripheral.WriteRegister((byte)Registers.BK2, value); + get => i2cComms.ReadRegister((byte)Registers.BK2); + set => i2cComms.WriteRegister((byte)Registers.BK2, value); } /// @@ -48,7 +51,7 @@ public byte BackLight2 /// The I2C address public BBQ10Keyboard(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Addresses.Default) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); if (interruptPin != null) { @@ -70,7 +73,7 @@ public KeyEvent GetLastKeyEvent() return new KeyEvent('\0', KeyState.StateIdle); } - var keyData = i2CPeripheral.ReadRegisterAsUShort((byte)Registers.FIF); + var keyData = i2cComms.ReadRegisterAsUShort((byte)Registers.FIF); return new KeyEvent((char)(keyData >> 8), (KeyState)(keyData & 0xFF)); } @@ -80,7 +83,7 @@ public KeyEvent GetLastKeyEvent() /// public void Reset() { - i2CPeripheral?.Write((byte)Registers.RST); + i2cComms?.Write((byte)Registers.RST); Thread.Sleep(100); } @@ -89,7 +92,7 @@ public void Reset() /// protected void ClearInerruptStatus() { - i2CPeripheral.WriteRegister((byte)Registers.INT, 0x00); + i2cComms.WriteRegister((byte)Registers.INT, 0x00); } private void InterruptPort_Changed(object sender, DigitalPortResult e) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs index 3bab6e67f5..0bc43bdc3c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs @@ -11,13 +11,16 @@ namespace Meadow.Foundation.Sensors.Hid /// public partial class Mpr121 { - private readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; private int refreshPeriod; - private Timer timer; + private readonly Timer timer; - private Dictionary channelStatus; + private readonly Dictionary channelStatus; /// /// Notifies about a the channel statuses have been changed. @@ -36,7 +39,7 @@ public partial class Mpr121 public int RefreshPeriod { get => refreshPeriod; - + set { refreshPeriod = value; @@ -60,7 +63,7 @@ public Mpr121(II2cBus i2cBus, byte address = (byte)Addresses.Default, int refres { this.refreshPeriod = refreshPeriod; - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); channelStatus = new Dictionary(); @@ -69,15 +72,15 @@ public Mpr121(II2cBus i2cBus, byte address = (byte)Addresses.Default, int refres channelStatus.Add(channel, false); } - configuration = configuration ?? GetDefaultConfiguration(); + configuration ??= GetDefaultConfiguration(); InitializeController(configuration); - if(refreshPeriod < 1) + if (refreshPeriod < 1) { refreshPeriod = Timeout.Infinite; } - + timer = new Timer(RefreshChannelStatus, this, refreshPeriod, refreshPeriod); } @@ -165,7 +168,7 @@ private void InitializeController(Mpr121Configuration configuration) private void SetRegister(Registers register, byte value) { - i2cPeripheral.WriteRegister((byte)register, value); + i2cComms.WriteRegister((byte)register, value); } private void RefreshChannelStatus(object value) @@ -182,7 +185,7 @@ private void RefreshChannelStatus() var period = RefreshPeriod; RefreshPeriod = 0; - var rawStatus = i2cPeripheral.ReadRegisterAsUShort(0x00, ByteOrder.LittleEndian); + var rawStatus = i2cComms.ReadRegisterAsUShort(0x00, ByteOrder.LittleEndian); bool isStatusChanged = false; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs index 6f0c34cd41..62c27393e2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs @@ -10,27 +10,28 @@ namespace Meadow.Foundation.Sensors.Hid /// public partial class Tsc2004 { - readonly I2cPeripheral i2CPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; - //default values from arturo182 - /// - /// Minimum X value of touchscreen + /// Minimum X value of touchscreen (defaults to 366) /// public int XMin { get; set; } = 366; /// - /// Maximum X value of touchscreen + /// Maximum X value of touchscreen (defaults to 3567) /// public int XMax { get; set; } = 3567; /// - /// Minimum Y value of touchscreen + /// Minimum Y value of touchscreen (defaults to 334) /// public int YMin { get; set; } = 334; /// - /// Maximum Y value of touchscreen + /// Maximum Y value of touchscreen (defaults to 3787) /// public int YMax { get; set; } = 3787; @@ -56,7 +57,7 @@ public partial class Tsc2004 /// The I2C address public Tsc2004(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2CPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -106,8 +107,8 @@ public Point3d GetPoint() /// public Point3d GetPointRaw() { - while((ReadRegister16((byte)Registers.STATUS) & STATUS_DAV_MASK) == 0) - { + while ((ReadRegister16((byte)Registers.STATUS) & STATUS_DAV_MASK) == 0) + { return new Point3d(); } @@ -118,10 +119,10 @@ public Point3d GetPointRaw() ushort z1 = ReadRegister16((byte)Registers.Z1); ushort z2 = ReadRegister16((byte)Registers.Z2); - if( x > _MAX_12BIT || - y > _MAX_12BIT || - z1 == 0 || - z2 > _MAX_12BIT || + if (x > _MAX_12BIT || + y > _MAX_12BIT || + z1 == 0 || + z2 > _MAX_12BIT || z1 >= z2) { x = 0; @@ -132,7 +133,7 @@ public Point3d GetPointRaw() { var val = (x * (z2 - z1) / z1); val *= _RESISTOR_VAL; - z = (ushort)(val/4096); + z = (ushort)(val / 4096); } return new Point3d(x, y, z); @@ -144,8 +145,8 @@ public Point3d GetPointRaw() /// True if touched public bool IsTouched() => (ReadRegister16((byte)Registers.STATUS) & STATUS_DAV_MASK) != 0; - - + + /// /// Is the touch buffer empty /// @@ -156,8 +157,8 @@ ushort ReadRegister16(byte address) { Span data = new byte[2]; - i2CPeripheral.ReadRegister((byte)(address | (byte)Registers.READ), data); - + i2cComms.ReadRegister((byte)(address | (byte)Registers.READ), data); + return (ushort)(data[0] << 8 | data[1]); } @@ -168,12 +169,12 @@ void WriteRegister16(byte register, ushort value) data[1] = (byte)((value >> 8) & 0xFF); data[2] = (byte)((value >> 0) & 0xFF); - i2CPeripheral.Write(data); + i2cComms.Write(data); } void SendCommand(byte command) { - i2CPeripheral.Write((byte)(CMD | CMD_12BIT | command)); + i2cComms.Write((byte)(CMD | CMD_12BIT | command)); } int GetXForRotation(int x, int y) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs index 356245b4f7..3863f6b89d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs @@ -102,8 +102,8 @@ public override void Update() { if(useHighResolutionMode) { - i2cPeripheral.WriteRegister(0, 0); - i2cPeripheral.Read(readBuffer[..8]); + i2cComms.WriteRegister(0, 0); + i2cComms.Read(readBuffer[..8]); } else { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs index a6ac62bb25..f013b4d680 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs @@ -91,8 +91,8 @@ public override void Update() { if (useHighResolutionMode) { - i2cPeripheral.WriteRegister(0, 0); - i2cPeripheral.Read(readBuffer[..8]); + i2cComms.WriteRegister(0, 0); + i2cComms.Read(readBuffer[..8]); } else { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiClassicControllerBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiClassicControllerBase.cs index 60e8d1eee4..40a9a2d26e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiClassicControllerBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiClassicControllerBase.cs @@ -131,11 +131,11 @@ protected override void Initialize() base.Initialize(); if (useHighResolutionMode) { - i2cPeripheral.WriteRegister(0xFE, 0x03); + i2cComms.WriteRegister(0xFE, 0x03); } else { - i2cPeripheral.WriteRegister(0xFE, 0x00); + i2cComms.WriteRegister(0xFE, 0x00); } } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs index 002fde489a..ca1a8c16dc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs @@ -17,9 +17,9 @@ public abstract partial class WiiExtensionControllerBase public static I2cBusSpeed DefaultSpeed => I2cBusSpeed.Fast; /// - /// The I2C peripheral object for the extension + /// I2C Communication bus used to communicate with the peripheral /// - protected readonly II2cPeripheral i2cPeripheral; + protected readonly II2cCommunications i2cComms; /// /// Data buffer returned by the controller @@ -49,7 +49,7 @@ public abstract partial class WiiExtensionControllerBase /// The extension controller address public WiiExtensionControllerBase(II2cBus i2cBus, byte address) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -59,8 +59,8 @@ public WiiExtensionControllerBase(II2cBus i2cBus, byte address) /// protected virtual void Initialize() { - i2cPeripheral.WriteRegister(0xF0, 0x55); - i2cPeripheral.WriteRegister(0xFB, 0x00); + i2cComms.WriteRegister(0xF0, 0x55); + i2cComms.WriteRegister(0xFB, 0x00); Thread.Sleep(100); } @@ -69,9 +69,9 @@ protected virtual void Initialize() /// public virtual void Update() { - i2cPeripheral.Write(0); + i2cComms.Write(0); - i2cPeripheral.Read(readBuffer[..6]); + i2cComms.Read(readBuffer[..6]); } /// @@ -80,8 +80,8 @@ public virtual void Update() /// The ID as a byte public byte[] GetIdentification() { - i2cPeripheral.Write(0xFA); - i2cPeripheral.Read(readBuffer[..6]); + i2cComms.Write(0xFA); + i2cComms.Read(readBuffer[..6]); Resolver.Log.Info(BitConverter.ToString(readBuffer[..6].ToArray())); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index a10d08078d..f7d7c479d6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -70,8 +70,8 @@ public partial class Adxl362 /// public Frequency SpiBusSpeed { - get => ((SpiPeripheral)Peripheral).BusSpeed; - set => ((SpiPeripheral)Peripheral).BusSpeed = value; + get => ((SpiCommunications)Peripheral).BusSpeed; + set => ((SpiCommunications)Peripheral).BusSpeed = value; } /// @@ -85,8 +85,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((SpiPeripheral)Peripheral).BusMode; - set => ((SpiPeripheral)Peripheral).BusMode = value; + get => ((SpiCommunications)Peripheral).BusMode; + set => ((SpiCommunications)Peripheral).BusMode = value; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index ea7ed992fa..92d88fa34d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -53,7 +53,10 @@ public partial class Bmi270 : /// public AngularVelocityRange CurrentAngularVelocityRange { get; private set; } - readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; /// /// Create a new Bmi270 instance @@ -64,9 +67,9 @@ public Bmi270(II2cBus i2cBus, byte address = (byte)Addresses.Address_0x68) { //Read buffer: 16 (needs at least 13) //Write buffer: 256 bytes for the config data + 1 for the address - i2cPeripheral = new I2cPeripheral(i2cBus, address, 16, 256 + 1); + i2cComms = new I2cCommunications(i2cBus, address, 16, 256 + 1); - var id = i2cPeripheral.ReadRegister(CHIP_ID); + var id = i2cComms.ReadRegister(CHIP_ID); if (id != 36) { @@ -79,7 +82,7 @@ public Bmi270(II2cBus i2cBus, byte address = (byte)Addresses.Address_0x68) void Initialize() { //disable advanced power save mode - i2cPeripheral.WriteRegister(PWR_CONF, 0xB0); + i2cComms.WriteRegister(PWR_CONF, 0xB0); SetAccelerationRange(AccelerationRange._16g); @@ -87,7 +90,7 @@ void Initialize() Thread.Sleep(1); //Write INIT_CTRL 0x00 to prepare config load - i2cPeripheral.WriteRegister(INIT_CTRL, 0); + i2cComms.WriteRegister(INIT_CTRL, 0); //upload a configuration file to register INIT_DATA ushort index = 0; @@ -103,21 +106,21 @@ void Initialize() Thread.Sleep(1); //probably not needed ... data sheet wants a 2us delay - i2cPeripheral.WriteRegister(INIT_0, dmaLocation); + i2cComms.WriteRegister(INIT_0, dmaLocation); - i2cPeripheral.WriteRegister(INIT_DATA, bmi270_config_file.Skip(index).Take(length).ToArray()); + i2cComms.WriteRegister(INIT_DATA, bmi270_config_file.Skip(index).Take(length).ToArray()); index += length; } //Write INIT_CTRL 0x01 to complete config load - i2cPeripheral.WriteRegister(INIT_CTRL, 1); + i2cComms.WriteRegister(INIT_CTRL, 1); //wait until register INTERNAL_STATUS contains 0b0001 (~20 ms) while (true) { Thread.Sleep(10); - byte status = i2cPeripheral.ReadRegister(INTERNAL_STATUS); + byte status = i2cComms.ReadRegister(INTERNAL_STATUS); if (status == 0x01) { break; } } @@ -131,7 +134,7 @@ void Initialize() /// AccelerationRange public void SetAccelerationRange(AccelerationRange accelRange) { - i2cPeripheral.WriteRegister(ACC_RANGE, (byte)accelRange); + i2cComms.WriteRegister(ACC_RANGE, (byte)accelRange); CurrentAccelerationRange = accelRange; } @@ -141,7 +144,7 @@ public void SetAccelerationRange(AccelerationRange accelRange) /// AngularAccelerationRange public void SetAngularVelocityRange(AngularVelocityRange angRange) { //This register also sets the OIS range but it's not implemented so we can ignore it - i2cPeripheral.WriteRegister(GYR_RANGE, (byte)angRange); + i2cComms.WriteRegister(GYR_RANGE, (byte)angRange); } /// @@ -224,7 +227,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce new AngularVelocity(dpsZ, AngularVelocity.UnitType.DegreesPerSecond)); //Get the temperature - ushort tempRaw = (ushort)(i2cPeripheral.ReadRegister(TEMPERATURE_1) << 8 | i2cPeripheral.ReadRegister(TEMPERATURE_0)); + ushort tempRaw = (ushort)(i2cComms.ReadRegister(TEMPERATURE_1) << 8 | i2cComms.ReadRegister(TEMPERATURE_0)); double tempC; double degreePerByte = 0.001953125; //in celcius @@ -258,30 +261,30 @@ public void SetPowerMode(PowerMode powerMode) switch (powerMode) { case PowerMode.Suspend: - i2cPeripheral.WriteRegister(PWR_CTRL, 0x00); - i2cPeripheral.WriteRegister(PWR_CONF, 0x00); + i2cComms.WriteRegister(PWR_CTRL, 0x00); + i2cComms.WriteRegister(PWR_CONF, 0x00); break; case PowerMode.Configuration: - i2cPeripheral.WriteRegister(PWR_CTRL, 0x00); - i2cPeripheral.WriteRegister(PWR_CONF, 0x00); + i2cComms.WriteRegister(PWR_CTRL, 0x00); + i2cComms.WriteRegister(PWR_CONF, 0x00); break; case PowerMode.LowPower: - i2cPeripheral.WriteRegister(PWR_CTRL, 0x04); - i2cPeripheral.WriteRegister(ACC_CONF, 0x17); - i2cPeripheral.WriteRegister(GYR_CONF, 0xA9); - i2cPeripheral.WriteRegister(PWR_CONF, 0x03); + i2cComms.WriteRegister(PWR_CTRL, 0x04); + i2cComms.WriteRegister(ACC_CONF, 0x17); + i2cComms.WriteRegister(GYR_CONF, 0xA9); + i2cComms.WriteRegister(PWR_CONF, 0x03); break; case PowerMode.Normal: - i2cPeripheral.WriteRegister(PWR_CTRL, 0x0E); - i2cPeripheral.WriteRegister(ACC_CONF, 0xA8); - i2cPeripheral.WriteRegister(GYR_CONF, 0xA9); - i2cPeripheral.WriteRegister(PWR_CONF, 0x02); + i2cComms.WriteRegister(PWR_CTRL, 0x0E); + i2cComms.WriteRegister(ACC_CONF, 0xA8); + i2cComms.WriteRegister(GYR_CONF, 0xA9); + i2cComms.WriteRegister(PWR_CONF, 0x02); break; case PowerMode.Performance: - i2cPeripheral.WriteRegister(PWR_CTRL, 0x0E); - i2cPeripheral.WriteRegister(ACC_CONF, 0xA8); - i2cPeripheral.WriteRegister(GYR_CONF, 0xE9); - i2cPeripheral.WriteRegister(PWR_CONF, 0x02); + i2cComms.WriteRegister(PWR_CTRL, 0x0E); + i2cComms.WriteRegister(ACC_CONF, 0xA8); + i2cComms.WriteRegister(GYR_CONF, 0xE9); + i2cComms.WriteRegister(PWR_CONF, 0x02); break; } } @@ -289,7 +292,7 @@ public void SetPowerMode(PowerMode powerMode) byte[] ReadAccelerationData() { var readBuffer = new byte[12]; - i2cPeripheral.ReadRegister(0x0C, readBuffer); + i2cComms.ReadRegister(0x0C, readBuffer); return readBuffer; } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 110b4a7ac4..953d0a6ceb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -22,7 +22,10 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// public MagneticField3D? MagneticField3D => Conditions; - readonly II2cPeripheral i2cPeripheral; + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; /// /// Create a new Lis2Mdl instance @@ -31,7 +34,7 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// The I2C address public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - i2cPeripheral = new I2cPeripheral(i2cBus, address); + i2cComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -42,9 +45,9 @@ public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) void Initialize() { // Configure the device - i2cPeripheral.WriteRegister(CTRL_REG1, 0x10); // Temperature compensation: ON, ODR: 10Hz, Mode: Continuous - i2cPeripheral.WriteRegister(CTRL_REG2, 0x00); // Full-scale: ±50 Gauss - i2cPeripheral.WriteRegister(CTRL_REG3, 0x00); // Continuous mode + i2cComms.WriteRegister(CTRL_REG1, 0x10); // Temperature compensation: ON, ODR: 10Hz, Mode: Continuous + i2cComms.WriteRegister(CTRL_REG2, 0x00); // Full-scale: ±50 Gauss + i2cComms.WriteRegister(CTRL_REG3, 0x00); // Continuous mode } /// @@ -80,7 +83,7 @@ protected override Task ReadSensor() (short x, short y, short z) ReadMagnetometerRaw() { Span rawData = stackalloc byte[6]; - i2cPeripheral.ReadRegister(OUTX_L_REG, rawData); + i2cComms.ReadRegister(OUTX_L_REG, rawData); short x = BitConverter.ToInt16(rawData.Slice(0, 2)); short y = BitConverter.ToInt16(rawData.Slice(2, 2)); @@ -95,7 +98,7 @@ protected override Task ReadSensor() /// The output data rate as a enum. public OutputDataRate GetOutputDataRate() { - byte odrByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte odrByte = i2cComms.ReadRegister(CTRL_REG1); return (OutputDataRate)(odrByte & 0x0C); } @@ -105,10 +108,10 @@ public OutputDataRate GetOutputDataRate() /// The desired output data rate as a enum. public void SetOutputDataRate(OutputDataRate odr) { - byte odrByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte odrByte = i2cComms.ReadRegister(CTRL_REG1); odrByte &= 0xF3; // Clear bits 2 and 3 odrByte |= (byte)odr; - i2cPeripheral.WriteRegister(CTRL_REG1, odrByte); + i2cComms.WriteRegister(CTRL_REG1, odrByte); } /// @@ -117,7 +120,7 @@ public void SetOutputDataRate(OutputDataRate odr) /// The operating mode as a enum. public OperatingMode GetOperatingMode() { - byte modeByte = i2cPeripheral.ReadRegister(CTRL_REG3); + byte modeByte = i2cComms.ReadRegister(CTRL_REG3); return (OperatingMode)(modeByte & 0x03); } @@ -127,10 +130,10 @@ public OperatingMode GetOperatingMode() /// The desired operating mode as a enum. public void SetOperatingMode(OperatingMode mode) { - byte modeByte = i2cPeripheral.ReadRegister(CTRL_REG3); + byte modeByte = i2cComms.ReadRegister(CTRL_REG3); modeByte &= 0xFC; // Clear bits 0 and 1 modeByte |= (byte)mode; - i2cPeripheral.WriteRegister(CTRL_REG3, modeByte); + i2cComms.WriteRegister(CTRL_REG3, modeByte); } /// @@ -139,7 +142,7 @@ public void SetOperatingMode(OperatingMode mode) /// true if temperature compensation is enabled, false otherwise. public bool GetTemperatureCompensation() { - byte tempCompByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte tempCompByte = i2cComms.ReadRegister(CTRL_REG1); return (tempCompByte & 0x80) == 0x80; } @@ -149,7 +152,7 @@ public bool GetTemperatureCompensation() /// true to enable temperature compensation, false to disable it. public void SetTemperatureCompensation(bool enable) { - byte tempCompByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte tempCompByte = i2cComms.ReadRegister(CTRL_REG1); if (enable) { tempCompByte |= 0x80; // Set bit 7 @@ -158,7 +161,7 @@ public void SetTemperatureCompensation(bool enable) { tempCompByte &= 0x7F; // Clear bit 7 } - i2cPeripheral.WriteRegister(CTRL_REG1, tempCompByte); + i2cComms.WriteRegister(CTRL_REG1, tempCompByte); } /// @@ -167,7 +170,7 @@ public void SetTemperatureCompensation(bool enable) /// true if Fast Read is enabled, false otherwise. public bool GetFastRead() { - byte fastReadByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte fastReadByte = i2cComms.ReadRegister(CTRL_REG1); return (fastReadByte & 0x02) == 0x02; } @@ -177,7 +180,7 @@ public bool GetFastRead() /// true to enable Fast Read, false to disable it. public void SetFastRead(bool enable) { - byte fastReadByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte fastReadByte = i2cComms.ReadRegister(CTRL_REG1); if (enable) { fastReadByte |= 0x02; // Set bit 1 @@ -186,7 +189,7 @@ public void SetFastRead(bool enable) { fastReadByte &= 0xFD; // Clear bit 1 } - i2cPeripheral.WriteRegister(CTRL_REG1, fastReadByte); + i2cComms.WriteRegister(CTRL_REG1, fastReadByte); } /// @@ -195,7 +198,7 @@ public void SetFastRead(bool enable) /// true if BDU is enabled, false otherwise. public bool GetBlockDataUpdate() { - byte bduByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte bduByte = i2cComms.ReadRegister(CTRL_REG1); return (bduByte & 0x01) == 0x01; } @@ -205,7 +208,7 @@ public bool GetBlockDataUpdate() /// true to enable BDU, false to disable it. public void SetBlockDataUpdate(bool enable) { - byte bduByte = i2cPeripheral.ReadRegister(CTRL_REG1); + byte bduByte = i2cComms.ReadRegister(CTRL_REG1); if (enable) { bduByte |= 0x01; // Set bit 0 @@ -214,7 +217,7 @@ public void SetBlockDataUpdate(bool enable) { bduByte &= 0xFE; // Clear bit 0 } - i2cPeripheral.WriteRegister(CTRL_REG1, bduByte); + i2cComms.WriteRegister(CTRL_REG1, bduByte); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index 4b78302ba3..e730d93504 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -33,8 +33,15 @@ public partial class Lsm303agr : /// public MagneticField3D? MagneticField3D => Conditions.MagneticField3D; - readonly II2cPeripheral i2cPeripheralAccel; - readonly II2cPeripheral i2cPeripheralMag; + /// + /// I2C Communication bus used to communicate with the accelerometer + /// + readonly II2cCommunications i2cCommsAccel; + + /// + /// I2C Communication bus used to communicate with the magnetometer + /// + readonly II2cCommunications i2cCommsMag; /// /// Create a new Lsm303agr instance @@ -42,8 +49,8 @@ public partial class Lsm303agr : /// The I2C bus connected to the sensor public Lsm303agr(II2cBus i2cBus) { - i2cPeripheralAccel = new I2cPeripheral(i2cBus, (byte)Addresses.AddressAccel_0x19); - i2cPeripheralMag = new I2cPeripheral(i2cBus, (byte)Addresses.AddressMag_0x1E); + i2cCommsAccel = new I2cCommunications(i2cBus, (byte)Addresses.AddressAccel_0x19); + i2cCommsMag = new I2cCommunications(i2cBus, (byte)Addresses.AddressMag_0x1E); Initialize(); } @@ -53,8 +60,8 @@ public Lsm303agr(II2cBus i2cBus) /// void Initialize() { - i2cPeripheralAccel.WriteRegister(ACC_CTRL_REG1_A, 0x57); - i2cPeripheralMag.WriteRegister(MAG_CTRL_REG1_M, 0x60); + i2cCommsAccel.WriteRegister(ACC_CTRL_REG1_A, 0x57); + i2cCommsMag.WriteRegister(MAG_CTRL_REG1_M, 0x60); } /// @@ -64,7 +71,7 @@ void Initialize() public void SetAccelerometerSensitivity(AccSensitivity sensitivity) { byte[] writeBuffer = new byte[] { ACC_CTRL_REG4_A, (byte)sensitivity }; - i2cPeripheralAccel.Write(writeBuffer); + i2cCommsAccel.Write(writeBuffer); } /// @@ -74,7 +81,7 @@ public void SetAccelerometerSensitivity(AccSensitivity sensitivity) public AccSensitivity GetAccelerometerSensitivity() { byte[] readBuffer = new byte[1]; - i2cPeripheralAccel.ReadRegister(ACC_CTRL_REG4_A, readBuffer); + i2cCommsAccel.ReadRegister(ACC_CTRL_REG4_A, readBuffer); byte sensitivity = (byte)(readBuffer[0] & 0x30); return (AccSensitivity)sensitivity; } @@ -155,7 +162,7 @@ MagneticField3D GetMagneticField3D(short rawX, short rawY, short rawZ) (short x, short y, short z) ReadAccelerometerRaw() { byte[] readBuffer = new byte[6]; - i2cPeripheralAccel.ReadRegister(ACC_OUT_X_L_A, readBuffer); + i2cCommsAccel.ReadRegister(ACC_OUT_X_L_A, readBuffer); short x = BitConverter.ToInt16(new byte[] { readBuffer[0], readBuffer[1] }, 0); short y = BitConverter.ToInt16(new byte[] { readBuffer[2], readBuffer[3] }, 0); @@ -171,7 +178,7 @@ MagneticField3D GetMagneticField3D(short rawX, short rawY, short rawZ) (short x, short y, short z) ReadMagnetometerRaw() { byte[] readBuffer = new byte[6]; - i2cPeripheralMag.ReadRegister(MAG_OUTX_L_REG_M, readBuffer); + i2cCommsMag.ReadRegister(MAG_OUTX_L_REG_M, readBuffer); short x = BitConverter.ToInt16(new byte[] { readBuffer[0], readBuffer[1] }, 0); short y = BitConverter.ToInt16(new byte[] { readBuffer[2], readBuffer[3] }, 0); @@ -187,10 +194,10 @@ MagneticField3D GetMagneticField3D(short rawX, short rawY, short rawZ) public void SetAccelerometerOutputDataRate(AccOutputDataRate dataRate) { byte[] readBuffer = new byte[1]; - i2cPeripheralAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); + i2cCommsAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); byte newSetting = (byte)((readBuffer[0] & 0x0F) | (byte)dataRate); - i2cPeripheralAccel.WriteRegister(ACC_CTRL_REG1_A, newSetting); + i2cCommsAccel.WriteRegister(ACC_CTRL_REG1_A, newSetting); } /// @@ -200,7 +207,7 @@ public void SetAccelerometerOutputDataRate(AccOutputDataRate dataRate) public AccOutputDataRate GetAccelerometerOutputDataRate() { byte[] readBuffer = new byte[1]; - i2cPeripheralAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); + i2cCommsAccel.ReadRegister(ACC_CTRL_REG1_A, readBuffer); byte dataRate = (byte)(readBuffer[0] & 0xF0); return (AccOutputDataRate)dataRate; @@ -212,10 +219,10 @@ public AccOutputDataRate GetAccelerometerOutputDataRate() /// The desired output data rate setting. public void SetMagnetometerOutputDataRate(MagOutputDataRate dataRate) { - byte odrByte = i2cPeripheralMag.ReadRegister(MAG_CTRL_REG1_M); + byte odrByte = i2cCommsMag.ReadRegister(MAG_CTRL_REG1_M); odrByte &= 0xF3; // Clear bits 2 and 3 odrByte |= (byte)dataRate; - i2cPeripheralMag.WriteRegister(MAG_CTRL_REG1_M, odrByte); + i2cCommsMag.WriteRegister(MAG_CTRL_REG1_M, odrByte); } /// @@ -224,7 +231,7 @@ public void SetMagnetometerOutputDataRate(MagOutputDataRate dataRate) /// The current output data rate setting. public MagOutputDataRate GetMagnetometerOutputDataRate() { - byte odrByte = i2cPeripheralMag.ReadRegister(MAG_CTRL_REG1_M); + byte odrByte = i2cCommsMag.ReadRegister(MAG_CTRL_REG1_M); return (MagOutputDataRate)(odrByte & 0x0C); } From de759df6970fde8fa574ed3ee9a4f32141438a9c Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 13:04:18 -0700 Subject: [PATCH 087/141] Rename ByteCommSensorBase.Peripheral to BusComms --- .../Communications/ByteCommsSensorBase.cs | 6 +- .../ICs.IOExpanders.As1115/Driver/As1115.cs | 2 +- .../RTCs.Ds323x/Driver/Ds323x.cs | 38 +-- .../Driver/AdafruitMPRLS.cs | 9 +- .../Driver/Bh1900Nux.cs | 16 +- .../Driver/Bmp085.cs | 22 +- .../Driver/Bmp180.cs | 22 +- .../Driver/Ccs811.cs | 26 +- .../Driver/DhtBase.cs | 4 +- .../Driver/Drivers/Dht10.cs | 8 +- .../Driver/Hih6130.cs | 4 +- .../Driver/Drivers/Htu21d.cs | 22 +- .../Driver/Drivers/Htu31d.cs | 14 +- .../Driver/Mpl3115a2.cs | 20 +- .../Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs | 16 +- .../Driver/Sht31d.cs | 2 +- .../Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs | 4 +- .../Driver/Si70xx.cs | 22 +- .../Sensors.Atmospheric.Th02/Driver/Th02.cs | 12 +- .../Driver/MaxBotix.I2c.cs | 4 +- .../Driver/Vl53l0x.cs | 268 +++++++++--------- .../Driver/Ags01Db.cs | 4 +- .../Driver/Ens160.cs | 38 +-- .../Driver/Pmsa003i.cs | 2 +- .../Driver/Scd4xBase.cs | 8 +- .../Sensors.Light.Bh1745/Driver/Bh1745.cs | 56 ++-- .../Sensors.Light.Bh1750/Driver/Bh1750.cs | 14 +- .../Sensors.Light.Max44009/Driver/Max44009.cs | 4 +- .../Sensors.Light.Si1145/Driver/Si1145.cs | 54 ++-- .../Sensors.Light.Tsl2591/Driver/Tsl2591.cs | 16 +- .../Sensors.Light.Veml7700/Driver/Veml7700.cs | 4 +- .../Driver/Nau7802.cs | 42 +-- .../Driver/Drivers/Adxl345.cs | 8 +- .../Driver/Drivers/Adxl362.cs | 56 ++-- .../Driver/Apds9960.cs | 190 ++++++------- .../Driver/Bno055.Enums.cs | 4 +- .../Driver/Bno055.Registers.cs | 2 +- .../Sensors.Motion.Bno055/Driver/Bno055.cs | 32 +-- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 16 +- .../Sensors.Motion.Hmc5883/Driver/Qmc5883.cs | 10 +- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 28 +- .../Driver/Mma7660fc.cs | 14 +- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 16 +- .../Sensors.Motion.Mpu6050/Driver/Mpu6050.cs | 6 +- .../Sensors.Power.Ina260/Driver/Ina260.cs | 10 +- .../Sensors.Temperature.Lm75/Driver/Lm75.cs | 4 +- .../Driver/Mcp960x.cs | 38 +-- .../Driver/Mcp9808.cs | 20 +- .../Driver/Tmp102.cs | 8 +- 49 files changed, 623 insertions(+), 622 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs index d21ca86e64..e183cf4a70 100644 --- a/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs +++ b/Source/Meadow.Foundation.Core/Communications/ByteCommsSensorBase.cs @@ -14,7 +14,7 @@ public abstract class ByteCommsSensorBase : /// /// Bus communications object, i.e. an I2cCommunications or SpiCommunications /// - protected IByteCommunications? Peripheral { get; set; } + protected IByteCommunications? BusComms { get; set; } /// /// The read buffer @@ -37,7 +37,7 @@ protected ByteCommsSensorBase( II2cBus i2cBus, byte address, int readBufferSize = 8, int writeBufferSize = 8) { - Peripheral = new I2cCommunications(i2cBus, address, readBufferSize, writeBufferSize); + BusComms = new I2cCommunications(i2cBus, address, readBufferSize, writeBufferSize); Init(readBufferSize, writeBufferSize); } @@ -60,7 +60,7 @@ protected ByteCommsSensorBase( int writeBufferSize = 8, ChipSelectMode chipSelectMode = ChipSelectMode.ActiveLow) { - Peripheral = new SpiCommunications(spiBus, chipSelect, busSpeed, busMode, readBufferSize, writeBufferSize, chipSelectMode); + BusComms = new SpiCommunications(spiBus, chipSelect, busSpeed, busMode, readBufferSize, writeBufferSize, chipSelectMode); Init(readBufferSize, writeBufferSize); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs index 182c1b27fa..785bea59f5 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs @@ -464,7 +464,7 @@ protected virtual void Dispose(bool disposing) } /// - /// Dispose Peripheral + /// Dispose BusComms /// public void Dispose() { diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs index 2999d3ca2f..4ad69c4b3a 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs @@ -83,15 +83,14 @@ static class Registers AlarmRaised alarm1Delegate; AlarmRaised alarm2Delegate; bool interruptCreatedInternally; - - Memory readBuffer; + readonly Memory readBuffer; /// /// Create a new Ds323x object /// protected Ds323x(I2cCommunications peripheral, IPin interruptPin) { - ds323x = peripheral; + i2cComms = peripheral; if (interruptPin != null) { @@ -107,9 +106,9 @@ protected Ds323x(I2cCommunications peripheral, IPin interruptPin) /// /// Create a new Ds323x object /// - protected Ds323x(I2cCommunications peripheral, IDigitalInputPort interruptPort) + protected Ds323x(I2cCommunications i2cComms, IDigitalInputPort interruptPort) { - ds323x = peripheral; + this.i2cComms = i2cComms; Initialize(interruptPort); } @@ -205,12 +204,12 @@ public DateTime CurrentDateTime get { var data = readBuffer.Span[0..DATE_TIME_REGISTERS_SIZE]; - ds323x.ReadRegister(Registers.Seconds, data); + i2cComms.ReadRegister(Registers.Seconds, data); return DecodeDateTimeRegisters(data); } set { - ds323x.WriteRegister(Registers.Seconds, EncodeDateTimeRegisters(value)); + i2cComms.WriteRegister(Registers.Seconds, EncodeDateTimeRegisters(value)); } } @@ -222,16 +221,16 @@ public Units.Temperature Temperature get { var data = readBuffer.Span[0..2]; - ds323x.ReadRegister(Registers.TemperatureMSB, data); + i2cComms.ReadRegister(Registers.TemperatureMSB, data); var temperature = (ushort)((data[0] << 2) | (data[1] >> 6)); return new Units.Temperature(temperature * 0.25, Units.Temperature.UnitType.Celsius); } } /// - /// DS323x Real Time Clock object. + /// I2C Communication bus used to communicate with the peripheral /// - protected II2cCommunications ds323x { get; } + protected II2cCommunications i2cComms; /// /// Interrupt port attached to the DS323x RTC module. @@ -247,8 +246,8 @@ public Units.Temperature Temperature /// protected byte ControlRegister { - get { return ds323x.ReadRegister(Registers.Control); } - set { ds323x.WriteRegister(Registers.Control, value); } + get { return i2cComms.ReadRegister(Registers.Control); } + set { i2cComms.WriteRegister(Registers.Control, value); } } /// @@ -260,8 +259,8 @@ protected byte ControlRegister /// protected byte ControlStatusRegister { - get { return ds323x.ReadRegister(Registers.ControlStatus); } - set { ds323x.WriteRegister(Registers.ControlStatus, value); } + get { return i2cComms.ReadRegister(Registers.ControlStatus); } + set { i2cComms.WriteRegister(Registers.ControlStatus, value); } } /// @@ -300,7 +299,8 @@ protected DateTime DecodeDateTimeRegisters(Span data) { var seconds = Converters.BCDToByte(data[0]); var minutes = Converters.BCDToByte(data[1]); - byte hour = 0; + byte hour; + if ((data[2] & 0x40) != 0) { hour = Converters.BCDToByte((byte)(data[2] & 0x1f)); @@ -313,7 +313,7 @@ protected DateTime DecodeDateTimeRegisters(Span data) { hour = Converters.BCDToByte((byte)(data[2] & 0x3f)); } - var wday = data[3]; + var day = Converters.BCDToByte(data[4]); var month = Converters.BCDToByte((byte)(data[5] & 0x7f)); var year = (ushort)(1900 + Converters.BCDToByte(data[6])); @@ -394,7 +394,7 @@ protected byte DayOfWeekToByte(DayOfWeek day) /// Type of alarm to set. public void SetAlarm(Alarm alarm, DateTime time, AlarmType type) { - byte[] data = null; + byte[] data; var register = Registers.Alarm1Seconds; var element = 0; @@ -468,7 +468,7 @@ public void SetAlarm(Alarm alarm, DateTime time, AlarmType type) data[2] |= 0x40; break; } - ds323x.WriteRegister(register, data); + i2cComms.WriteRegister(register, data); // // Turn the relevant alarm on. // @@ -545,7 +545,7 @@ public void ClearInterrupt(Alarm alarm) public void DisplayRegisters() { var data = readBuffer.Span[0..0x12]; - ds323x.ReadRegister(0, data); + i2cComms.ReadRegister(0, data); DebugInformation.DisplayRegisters(0, data); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs index 1f8df45c0e..057b7ee51d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs @@ -13,7 +13,8 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// https://www.adafruit.com/product/3965 /// Device datasheets also available here: https://sensing.honeywell.com/micropressure-mpr-series /// - public partial class AdafruitMPRLS : ByteCommsSensorBase<(Pressure? Pressure, Pressure? RawPsiMeasurement)>, IBarometricPressureSensor + public partial class AdafruitMPRLS + : ByteCommsSensorBase<(Pressure? Pressure, Pressure? RawPsiMeasurement)>, IBarometricPressureSensor { //Defined in section 6.6.1 of the datasheet. private readonly byte[] mprlsMeasurementCommand = { 0xAA, 0x00, 0x00 }; @@ -88,14 +89,14 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, return Task.Run(() => { //Send the command to the sensor to tell it to do the thing. - Peripheral.Write(mprlsMeasurementCommand); + BusComms.Write(mprlsMeasurementCommand); //Datasheet says wait 5ms Thread.Sleep(5); while (true) { - Peripheral.Read(ReadBuffer.Span[0..1]); + BusComms.Read(ReadBuffer.Span[0..1]); //From section 6.5 of the datasheet IsDevicePowered = BitHelpers.GetBitValue(ReadBuffer.Span[0], 6); @@ -119,7 +120,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, } } - Peripheral.Read(ReadBuffer.Span[0..4]); + BusComms.Read(ReadBuffer.Span[0..4]); var rawPSIMeasurement = (ReadBuffer.Span[1] << 16) | (ReadBuffer.Span[2] << 8) | ReadBuffer.Span[3]; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs index 4a9660c6cb..29f0e00b36 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs @@ -50,18 +50,18 @@ public Bh1900Nux(II2cBus i2cBus, byte address) /// public void Reset() { - Peripheral?.WriteRegister((byte)Register.Reset, 0x01); + BusComms?.WriteRegister((byte)Register.Reset, 0x01); } int GetConfig() { - Peripheral?.ReadRegister((byte)Register.Configuration, ReadBuffer.Span[0..2]); + BusComms?.ReadRegister((byte)Register.Configuration, ReadBuffer.Span[0..2]); return ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; } void SetConfig(int cfg) { - Peripheral?.WriteRegister((byte)Register.Configuration, new byte[] { (byte)(cfg >> 8), (byte)(cfg & 0xff) }); + BusComms?.WriteRegister((byte)Register.Configuration, new byte[] { (byte)(cfg >> 8), (byte)(cfg & 0xff) }); } /// @@ -155,13 +155,13 @@ public Units.Temperature LowLimit { get { - Peripheral?.ReadRegister((byte)Register.TLow, ReadBuffer.Span[0..2]); + BusComms?.ReadRegister((byte)Register.TLow, ReadBuffer.Span[0..2]); return RegisterToTemp(ReadBuffer); } set { - Peripheral?.WriteRegister((byte)Register.TLow, TempToBytes(value)); + BusComms?.WriteRegister((byte)Register.TLow, TempToBytes(value)); } } @@ -172,13 +172,13 @@ public Units.Temperature HighLimit { get { - Peripheral?.ReadRegister((byte)Register.THigh, ReadBuffer.Span[0..2]); + BusComms?.ReadRegister((byte)Register.THigh, ReadBuffer.Span[0..2]); return RegisterToTemp(ReadBuffer); } set { - Peripheral?.WriteRegister((byte)Register.THigh, TempToBytes(value)); + BusComms?.WriteRegister((byte)Register.THigh, TempToBytes(value)); } } @@ -214,7 +214,7 @@ private Units.Temperature RegisterToTemp(Memory data) // Temperature Register is 0x0000 until the first conversion complete after a software // reset or power - on. // Measurement Temperature Value [°C] = Temperature Data [11:0] x 0.0625 - Peripheral?.ReadRegister((byte)Register.Temperature, ReadBuffer.Span[0..2]); + BusComms?.ReadRegister((byte)Register.Temperature, ReadBuffer.Span[0..2]); return Task.FromResult(RegisterToTemp(ReadBuffer)); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs index 4a071ad2a7..9d69ac4025 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs @@ -150,25 +150,25 @@ private long ReadUncompensatedTemperature() { // write register address // TODO: delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF4, 0x2E }); + //BusComms.WriteBytes(new byte[] { 0xF4, 0x2E }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = 0x2e; - Peripheral?.Write(WriteBuffer.Span[0..2]); + BusComms?.Write(WriteBuffer.Span[0..2]); // Required as per datasheet. Thread.Sleep(5); // write register address // TODO: Delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF6 }); + //BusComms.WriteBytes(new byte[] { 0xF6 }); WriteBuffer.Span[0] = 0xf6; - Peripheral?.Write(WriteBuffer.Span[0]); + BusComms?.Write(WriteBuffer.Span[0]); // get MSB and LSB result // TODO: Delete after validating //byte[] data = new byte[2]; - //data = Peripheral.ReadBytes(2); - Peripheral?.Read(ReadBuffer.Span[0..2]); + //data = BusComms.ReadBytes(2); + BusComms?.Read(ReadBuffer.Span[0..2]); return ((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); } @@ -177,7 +177,7 @@ private long ReadUncompensatedPressure() { // write register address // TODO: Delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); + //BusComms.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = (byte)(0x34 + (oversamplingSetting << 6)); @@ -187,8 +187,8 @@ private long ReadUncompensatedPressure() // get MSB and LSB result // TODO: delete after validating //byte[] data = new byte[3]; - //data = Peripheral.ReadRegisters(0xF6, 3); - Peripheral?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); + //data = BusComms.ReadRegisters(0xF6, 3); + BusComms?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); return ((ReadBuffer.Span[0] << 16) | (ReadBuffer.Span[1] << 8) | (ReadBuffer.Span[2])) >> (8 - oversamplingSetting); } @@ -219,8 +219,8 @@ private short ReadShort(byte address) // get MSB and LSB result // TODO: delete after validating //byte[] data = new byte[2]; - //data = Peripheral.ReadRegisters(address, 2); - Peripheral?.ReadRegister(address, ReadBuffer.Span[0..2]); + //data = BusComms.ReadRegisters(address, 2); + BusComms?.ReadRegister(address, ReadBuffer.Span[0..2]); return (short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs index 70f67e8281..58a414553b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs @@ -142,25 +142,25 @@ private long ReadUncompensatedTemperature() { // write register address // TODO: delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF4, 0x2E }); + //BusComms.WriteBytes(new byte[] { 0xF4, 0x2E }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = 0x2e; - Peripheral?.Write(WriteBuffer.Span[0..2]); + BusComms?.Write(WriteBuffer.Span[0..2]); // Required as per datasheet. Thread.Sleep(5); // write register address // TODO: Delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF6 }); + //BusComms.WriteBytes(new byte[] { 0xF6 }); WriteBuffer.Span[0] = 0xf6; - Peripheral?.Write(WriteBuffer.Span[0]); + BusComms?.Write(WriteBuffer.Span[0]); // get MSB and LSB result // TODO: Delete after validating //byte[] data = new byte[2]; - //data = Peripheral.ReadBytes(2); - Peripheral?.Read(ReadBuffer.Span[0..2]); + //data = BusComms.ReadBytes(2); + BusComms?.Read(ReadBuffer.Span[0..2]); return ((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); } @@ -169,7 +169,7 @@ private long ReadUncompensatedPressure() { // write register address // TODO: Delete after validating - //Peripheral.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); + //BusComms.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = (byte)(0x34 + (oversamplingSetting << 6)); @@ -179,8 +179,8 @@ private long ReadUncompensatedPressure() // get MSB and LSB result // TODO: delete after validating //byte[] data = new byte[3]; - //data = Peripheral.ReadRegisters(0xF6, 3); - Peripheral?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); + //data = BusComms.ReadRegisters(0xF6, 3); + BusComms?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); return ((ReadBuffer.Span[0] << 16) | (ReadBuffer.Span[1] << 8) | (ReadBuffer.Span[2])) >> (8 - oversamplingSetting); } @@ -211,8 +211,8 @@ private short ReadShort(byte address) // get MSB and LSB result // TODO: delete after validating //byte[] data = new byte[2]; - //data = Peripheral.ReadRegisters(address, 2); - Peripheral?.ReadRegister(address, ReadBuffer.Span[0..2]); + //data = BusComms.ReadRegisters(address, 2); + BusComms?.ReadRegister(address, ReadBuffer.Span[0..2]); return (short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs index 47faf002f1..970ea3a6ad 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs @@ -79,31 +79,31 @@ protected void Initialize() Thread.Sleep(100); - var id = Peripheral?.ReadRegister((byte)Register.HW_ID); + var id = BusComms?.ReadRegister((byte)Register.HW_ID); if (id != 0x81) { throw new Exception("Hardware is not identifying as a CCS811"); } - Peripheral?.Write((byte)BootloaderCommand.APP_START); + BusComms?.Write((byte)BootloaderCommand.APP_START); SetMeasurementMode(MeasurementMode.ConstantPower1s); - var mode = Peripheral?.ReadRegister((byte)Register.MEAS_MODE); + var mode = BusComms?.ReadRegister((byte)Register.MEAS_MODE); } private void ShowDebugInfo() { - var ver = Peripheral?.ReadRegister((byte)Register.HW_VERSION); + var ver = BusComms?.ReadRegister((byte)Register.HW_VERSION); Resolver.Log.Info($"hardware version A = 0x{ver:x2}"); - var fwb = Peripheral?.ReadRegister((byte)Register.FW_BOOT_VERSION); + var fwb = BusComms?.ReadRegister((byte)Register.FW_BOOT_VERSION); Resolver.Log.Info($"FWB version = 0x{fwb:x4}"); - var fwa = Peripheral?.ReadRegister((byte)Register.FW_APP_VERSION); + var fwa = BusComms?.ReadRegister((byte)Register.FW_APP_VERSION); Resolver.Log.Info($"FWA version = 0x{fwa:x4}"); // read status - var status = Peripheral?.ReadRegister((byte)Register.STATUS); + var status = BusComms?.ReadRegister((byte)Register.STATUS); Resolver.Log.Info($"status = 0x{status:x2}"); } @@ -113,7 +113,7 @@ private void ShowDebugInfo() /// The baseline value public ushort GetBaseline() { - return Peripheral?.ReadRegister((byte)Register.BASELINE) ?? 0; + return BusComms?.ReadRegister((byte)Register.BASELINE) ?? 0; } /// @@ -122,7 +122,7 @@ public ushort GetBaseline() /// The new baseline public void SetBaseline(ushort value) { - Peripheral?.WriteRegister((byte)Register.BASELINE, (byte)value); + BusComms?.WriteRegister((byte)Register.BASELINE, (byte)value); } /// @@ -131,7 +131,7 @@ public void SetBaseline(ushort value) /// The measurement mode public MeasurementMode GetMeasurementMode() { - return (MeasurementMode)(Peripheral?.ReadRegister((byte)Register.MEAS_MODE) ?? 0); + return (MeasurementMode)(BusComms?.ReadRegister((byte)Register.MEAS_MODE) ?? 0); } /// @@ -141,12 +141,12 @@ public MeasurementMode GetMeasurementMode() public void SetMeasurementMode(MeasurementMode mode) { var m = (byte)mode; - Peripheral?.WriteRegister((byte)Register.MEAS_MODE, m); + BusComms?.WriteRegister((byte)Register.MEAS_MODE, m); } void Reset() { - Peripheral?.Write(new byte[] { (byte)Register.SW_RESET, 0x11, 0xE5, 0x72, 0x8A }); + BusComms?.Write(new byte[] { (byte)Register.SW_RESET, 0x11, 0xE5, 0x72, 0x8A }); } /// @@ -156,7 +156,7 @@ void Reset() protected override Task<(Concentration? Co2, Concentration? Voc)> ReadSensor() { // data is really in just the first 4, but this gets us status and raw data as well - Peripheral?.ReadRegister((byte)Register.ALG_RESULT_DATA, _readingBuffer); + BusComms?.ReadRegister((byte)Register.ALG_RESULT_DATA, _readingBuffer); (Concentration? co2, Concentration? voc) state; state.co2 = new Concentration(_readingBuffer[0] << 8 | _readingBuffer[1], Concentration.UnitType.PartsPerMillion); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs index ca8d9b6ee8..8f44245853 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs @@ -85,8 +85,8 @@ internal virtual void ReadDataOneWire() /// internal virtual void ReadDataI2c() { - Peripheral?.Write(0x00); - Peripheral?.Read(ReadBuffer.Span[0..5]); + BusComms?.Write(0x00); + BusComms?.Read(ReadBuffer.Span[0..5]); lastMeasurement = Environment.TickCount; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs index df78623d84..f5b8c28281 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs @@ -25,20 +25,20 @@ public class Dht10 : DhtBase public Dht10(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { - Peripheral?.Write(CMD_SOFTRESET); + BusComms?.Write(CMD_SOFTRESET); Thread.Sleep(20); - Peripheral?.Write(CMD_INIT); + BusComms?.Write(CMD_INIT); } internal override void ReadDataI2c() { WasLastReadSuccessful = true; - Peripheral?.Write(CMD_START); + BusComms?.Write(CMD_START); Thread.Sleep(75); //data stored in the read buffer - Peripheral?.Read(ReadBuffer.Span); + BusComms?.Read(ReadBuffer.Span); } internal override float GetHumidity() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs index 443f7d2a49..5c6fe81b3b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs @@ -68,12 +68,12 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; // send a start signal on the I2C bus to notify the sensor to read. - Peripheral?.Write(0); + BusComms?.Write(0); // Sensor takes 35ms to make a valid reading. await Task.Delay(40); // read data from the sensor - Peripheral?.Read(base.ReadBuffer.Span); + BusComms?.Read(base.ReadBuffer.Span); // // Data format: // diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs index 99cd0933df..df61f72e6c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs @@ -35,7 +35,7 @@ public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? /// protected void Initialize() { - Peripheral?.Write((byte)Registers.SOFT_RESET); + BusComms?.Write((byte)Registers.SOFT_RESET); Thread.Sleep(100); @@ -50,19 +50,19 @@ protected void Initialize() { (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - Peripheral?.Write((byte)Registers.HUMDITY_MEASURE_NOHOLD); + BusComms?.Write((byte)Registers.HUMDITY_MEASURE_NOHOLD); await Task.Delay(20); // Maximum conversion time is 12ms (page 5 of the datasheet) - Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + BusComms?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); var humidity = (125 * (float)humidityReading / 65536) - 6; humidity = Math.Clamp(humidity, 0, 100); conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); - Peripheral?.Write((byte)Registers.TEMPERATURE_MEASURE_NOHOLD); + BusComms?.Write((byte)Registers.TEMPERATURE_MEASURE_NOHOLD); await Task.Delay(20); // Maximum conversion time is 12ms (page 5 of the datasheet) - Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + BusComms?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); @@ -75,16 +75,16 @@ protected void Initialize() /// Heater status, true = turn heater on, false = turn heater off. public void Heater(bool heaterOn) { - if (Peripheral == null) return; + if (BusComms == null) return; - var register = Peripheral.ReadRegister((byte)Registers.READ_HEATER_REGISTER); + var register = BusComms.ReadRegister((byte)Registers.READ_HEATER_REGISTER); register &= 0xfd; if (heaterOn) { register |= 0x02; } - Peripheral.WriteRegister((byte)Registers.WRITE_HEATER_REGISTER, register); + BusComms.WriteRegister((byte)Registers.WRITE_HEATER_REGISTER, register); } //Set sensor resolution @@ -98,9 +98,9 @@ public void Heater(bool heaterOn) //Power on default is 0/0 void SetResolution(SensorResolution resolution) { - if (Peripheral == null) return; + if (BusComms == null) return; - var register = Peripheral.ReadRegister((byte)Registers.READ_USER_REGISTER); + var register = BusComms.ReadRegister((byte)Registers.READ_USER_REGISTER); var res = (byte)resolution; @@ -109,7 +109,7 @@ void SetResolution(SensorResolution resolution) register |= res; //Mask in the requested resolution bits //Request a write to user register - Peripheral.WriteRegister((byte)Registers.WRITE_USER_REGISTER, register); //Write the new resolution bits + BusComms.WriteRegister((byte)Registers.WRITE_USER_REGISTER, register); //Write the new resolution bits } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs index 4239aba1da..c8cd0cdd4c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs @@ -33,9 +33,9 @@ public Htu31d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? { (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - Peripheral?.Write((byte)Commands.Conversion); + BusComms?.Write((byte)Commands.Conversion); await Task.Delay(20); // Maximum conversion time is 20ms - Peripheral?.ReadRegister((byte)Commands.ReadTempHumidity, ReadBuffer.Span[0..5]);// 2 bytes for temp, checksum, 2 bytes humidity, checksum + BusComms?.ReadRegister((byte)Commands.ReadTempHumidity, ReadBuffer.Span[0..5]);// 2 bytes for temp, checksum, 2 bytes humidity, checksum var temperatureReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); @@ -56,11 +56,11 @@ public void Heater(bool heaterOn) { if (heaterOn) { - Peripheral?.WriteRegister((byte)Commands.HeaterOn, 1); + BusComms?.WriteRegister((byte)Commands.HeaterOn, 1); } else { - Peripheral?.WriteRegister((byte)Commands.HeaterOff, 1); + BusComms?.WriteRegister((byte)Commands.HeaterOff, 1); } } @@ -69,18 +69,18 @@ public void Heater(bool heaterOn) /// public void Reset() { - Peripheral?.WriteRegister((byte)Commands.Reset, 1); + BusComms?.WriteRegister((byte)Commands.Reset, 1); Thread.Sleep(15); //could make this async ... } private UInt32 GetSerial() { - if (Peripheral == null) return 0; + if (BusComms == null) return 0; var data = new byte[4]; - Peripheral.ReadRegister((byte)Commands.ReadSerial, data); + BusComms.ReadRegister((byte)Commands.ReadSerial, data); UInt32 serial; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs index 8de544b40c..a7bdf5ba1b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs @@ -42,10 +42,10 @@ public partial class Mpl3115a2 : /// public bool Standby { - get => (Peripheral?.ReadRegister(Registers.Control1) & 0x01) > 0; + get => (BusComms?.ReadRegister(Registers.Control1) & 0x01) > 0; set { - var status = Peripheral?.ReadRegister(Registers.Control1) ?? 0; + var status = BusComms?.ReadRegister(Registers.Control1) ?? 0; if (value) { status &= (byte)~ControlRegisterBits.Active; @@ -54,14 +54,14 @@ public bool Standby { status |= ControlRegisterBits.Active; } - Peripheral?.WriteRegister(Registers.Control1, status); + BusComms?.WriteRegister(Registers.Control1, status); } } /// /// Get the status register from the sensor /// - public byte Status => Peripheral?.ReadRegister(Registers.Status) ?? 0; + public byte Status => BusComms?.ReadRegister(Registers.Status) ?? 0; /// /// Create a new MPL3115A2 object with the default address and speed settings @@ -71,15 +71,15 @@ public bool Standby public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { - if (Peripheral?.ReadRegister(Registers.WhoAmI) != 0xc4) + if (BusComms?.ReadRegister(Registers.WhoAmI) != 0xc4) { throw new Exception("Unexpected device ID, expected 0xc4"); } - Peripheral?.WriteRegister(Registers.Control1, + BusComms?.WriteRegister(Registers.Control1, (byte)(ControlRegisterBits.Active | ControlRegisterBits.OverSample128)); - Peripheral?.WriteRegister(Registers.DataConfiguration, + BusComms?.WriteRegister(Registers.DataConfiguration, (byte)(ConfigurationRegisterBits.DataReadyEvent | ConfigurationRegisterBits.EnablePressureEvent | ConfigurationRegisterBits.EnableTemperatureEvent)); @@ -101,7 +101,7 @@ public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Addresses.Default) } await Task.Delay(100); - Peripheral?.ReadRegister(Registers.PressureMSB, ReadBuffer.Span); + BusComms?.ReadRegister(Registers.PressureMSB, ReadBuffer.Span); conditions.Pressure = new Pressure(DecodePresssure(ReadBuffer.Span[0], ReadBuffer.Span[1], ReadBuffer.Span[2]), Units.Pressure.UnitType.Pascal); conditions.Temperature = new Units.Temperature(DecodeTemperature(ReadBuffer.Span[3], ReadBuffer.Span[4]), Units.Temperature.UnitType.Celsius); @@ -163,9 +163,9 @@ private float DecodeTemperature(byte msb, byte lsb) /// public void Reset() { - var data = Peripheral?.ReadRegister(Registers.Control1) ?? 0; + var data = BusComms?.ReadRegister(Registers.Control1) ?? 0; data |= 0x04; - Peripheral?.WriteRegister(Registers.Control1, data); + BusComms?.WriteRegister(Registers.Control1, data); } async Task ISensor.Read() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs index 4ea6675dc1..7888f97eeb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs @@ -46,11 +46,11 @@ protected void Initialize() // write buffer for initialization commands only can be two bytes. Span tx = WriteBuffer.Span[0..2]; - Peripheral?.Write(sgp4x_get_serial_number); + BusComms?.Write(sgp4x_get_serial_number); Thread.Sleep(1); // per the data sheet - Peripheral?.Read(ReadBuffer.Span[0..9]); + BusComms?.Read(ReadBuffer.Span[0..9]); var bytes = ReadBuffer.ToArray(); @@ -63,11 +63,11 @@ protected void Initialize() /// true on sucessful test, otherwise false public bool RunSelfTest() { - Peripheral?.Write(sgp40_execute_self_test); + BusComms?.Write(sgp40_execute_self_test); Thread.Sleep(325); // test requires 320ms to complete - Peripheral?.Read(ReadBuffer.Span[0..3]); + BusComms?.Read(ReadBuffer.Span[0..3]); return ReadBuffer.Span[0..1][0] == 0xd4; } @@ -80,16 +80,16 @@ protected override Task ReadSensor() { if (_compensationData != null) { - Peripheral?.Write(_compensationData); + BusComms?.Write(_compensationData); } else { - Peripheral?.Write(sgp40_measure_raw_signal_uncompensated); + BusComms?.Write(sgp40_measure_raw_signal_uncompensated); } Thread.Sleep(30); // per the data sheet - Peripheral?.Read(ReadBuffer.Span[0..3]); + BusComms?.Read(ReadBuffer.Span[0..3]); var data = ReadBuffer.Span[0..3].ToArray(); @@ -112,7 +112,7 @@ protected override void RaiseEventsAndNotify(IChangeResult changeResult) /// public void TurnHeaterOff() { - Peripheral?.Write(sgp4x_turn_heater_off); + BusComms?.Write(sgp4x_turn_heater_off); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs index b158aad366..d334ef05b6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs @@ -74,7 +74,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T WriteBuffer.Span[0] = 0x2c; WriteBuffer.Span[1] = 0x06; - Peripheral?.Exchange(WriteBuffer.Span, ReadBuffer.Span); + BusComms?.Exchange(WriteBuffer.Span, ReadBuffer.Span); var humidity = (100 * (float)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4])) / 65535; var tempC = ((175 * (float)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1])) / 65535) - 45; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs index 8e2261ecf0..765e9feae3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs @@ -112,9 +112,9 @@ protected int GetDelayForPrecision(Precision precision) { (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - Peripheral?.Write((byte)ReadPrecision); + BusComms?.Write((byte)ReadPrecision); Thread.Sleep(GetDelayForPrecision(ReadPrecision)); - Peripheral?.Read(ReadBuffer.Span[0..5]); + BusComms?.Read(ReadBuffer.Span[0..5]); var temperature = (175 * (float)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]) / 65535) - 45; var humidity = (125 * (float)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]) / 65535) - 6; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs index 77a017a632..a683f99c7a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs @@ -72,7 +72,7 @@ public Si70xx(II2cBus i2cBus, byte address = (byte)Address.Default) /// protected void Reset() { - Peripheral?.Write(CMD_RESET); + BusComms?.Write(CMD_RESET); Thread.Sleep(100); } @@ -89,7 +89,7 @@ protected void Initialize() tx[0] = READ_ID_PART1; tx[1] = READ_ID_PART2; - Peripheral?.Exchange(tx, ReadBuffer.Span); + BusComms?.Exchange(tx, ReadBuffer.Span); for (var index = 0; index < 4; index++) { SerialNumber <<= 8; @@ -98,7 +98,7 @@ protected void Initialize() tx[0] = READ_2ND_ID_PART1; tx[1] = READ_2ND_ID_PART2; - Peripheral?.Exchange(tx, ReadBuffer.Span); + BusComms?.Exchange(tx, ReadBuffer.Span); SerialNumber <<= 8; SerialNumber += ReadBuffer.Span[0]; @@ -128,9 +128,9 @@ protected void Initialize() { (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; - Peripheral?.Write(HUMDITY_MEASURE_NOHOLD); + BusComms?.Write(HUMDITY_MEASURE_NOHOLD); await Task.Delay(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) + BusComms?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); conditions.Humidity = new RelativeHumidity(((125 * (float)humidityReading) / 65536) - 6, HU.Percent); if (conditions.Humidity < new RelativeHumidity(0, HU.Percent)) @@ -145,9 +145,9 @@ protected void Initialize() } } - Peripheral?.Write(TEMPERATURE_MEASURE_NOHOLD); + BusComms?.Write(TEMPERATURE_MEASURE_NOHOLD); Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - Peripheral?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) + BusComms?.Read(ReadBuffer.Span); // 2 data bytes plus a checksum (we ignore the checksum here) var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); conditions.Temperature = new Units.Temperature((float)((175.72 * temperatureReading / 65536) - 46.85), TU.Celsius); @@ -178,14 +178,14 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// Heater status, true = turn heater on, false = turn heater off. public void Heater(bool onOrOff) { - var register = Peripheral?.ReadRegister((byte)Register.USER_REG_1) ?? 0; + var register = BusComms?.ReadRegister((byte)Register.USER_REG_1) ?? 0; register &= 0xfd; if (onOrOff) { register |= 0x02; } - Peripheral?.WriteRegister((byte)Register.USER_REG_1, register); + BusComms?.WriteRegister((byte)Register.USER_REG_1, register); } /// @@ -200,7 +200,7 @@ public void Heater(bool onOrOff) /// The resolution to set void SetResolution(SensorResolution resolution) { - var register = Peripheral?.ReadRegister((byte)Register.USER_REG_1) ?? 0; + var register = BusComms?.ReadRegister((byte)Register.USER_REG_1) ?? 0; var res = (byte)resolution; @@ -209,7 +209,7 @@ void SetResolution(SensorResolution resolution) register |= res; //Mask in the requested resolution bits //Request a write to user register - Peripheral?.WriteRegister((byte)Register.USER_REG_1, register); //Write the new resolution bits + BusComms?.WriteRegister((byte)Register.USER_REG_1, register); //Write the new resolution bits } async Task ISensor.Read() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs index 6274c6687d..3ed3a5855b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs @@ -69,17 +69,17 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; // Read the humidity - Peripheral?.WriteRegister((byte)Registers.Config, MeasureHumidity); + BusComms?.WriteRegister((byte)Registers.Config, MeasureHumidity); // Maximum conversion time should be 40ms - while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) + while ((BusComms?.ReadRegister((byte)Registers.Status) & 0x01) > 0) { await Task.Delay(40); } byte[] data = new byte[2]; - Peripheral?.ReadRegister((byte)Registers.DataHigh, data); + BusComms?.ReadRegister((byte)Registers.DataHigh, data); int temp = data[0] << 8; temp |= data[1]; temp >>= 4; @@ -87,15 +87,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T conditions.Humidity = new RelativeHumidity(temp / 16.0 - 24); // Read the temperature - Peripheral?.WriteRegister((byte)Registers.Config, MeasureTemperature); + BusComms?.WriteRegister((byte)Registers.Config, MeasureTemperature); // Maximum conversion time should be 40ms - while ((Peripheral?.ReadRegister((byte)Registers.Status) & 0x01) > 0) + while ((BusComms?.ReadRegister((byte)Registers.Status) & 0x01) > 0) { Thread.Sleep(40); } - Peripheral?.ReadRegister((byte)Registers.DataHigh, data); + BusComms?.ReadRegister((byte)Registers.DataHigh, data); temp = data[0] << 8; temp |= data[1]; temp >>= 2; //drop the two unused bits (14 bit value) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs index 9880fcb62c..a310b68055 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs @@ -23,13 +23,13 @@ public MaxBotix(II2cBus i2cBus, SensorType sensor, byte address = (byte)Addresse void StartI2cSensor(byte address) { - Peripheral.ReadRegister(address); + BusComms.ReadRegister(address); Thread.Sleep(100); } Length ReadSensorI2c() { - return new Length(Peripheral.ReadRegisterAsUShort(0x51), GetUnitsForSensor(sensorType)); + return new Length(BusComms.ReadRegisterAsUShort(0x51), GetUnitsForSensor(sensorType)); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs index 0a02e4f120..c0302086ea 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs @@ -106,18 +106,18 @@ protected async Task Initialize() throw new Exception("Failed to find expected ID register values"); } - Peripheral.WriteRegister(0x88, 0x00); - Peripheral.WriteRegister(0x80, 0x01); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x00, 0x00); + BusComms.WriteRegister(0x88, 0x00); + BusComms.WriteRegister(0x80, 0x01); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x00, 0x00); stopVariable = Read(0x91); - Peripheral.WriteRegister(0x00, 0x01); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x80, 0x00); + BusComms.WriteRegister(0x00, 0x01); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x80, 0x00); - Peripheral.WriteRegister((byte)Register.SystemSequenceConfig, 0xFF); + BusComms.WriteRegister((byte)Register.SystemSequenceConfig, 0xFF); var spadInfo = GetSpadInfo(); int spadCount = spadInfo.Item1; bool spad_is_aperture = spadInfo.Item2; @@ -125,11 +125,11 @@ protected async Task Initialize() byte[] ref_spad_map = new byte[7]; ref_spad_map[0] = (byte)Register.GlobalConfigSpadEnablesRef0; - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister((byte)Register.DynamicSpadRefEnStartOffset, 0x00); - Peripheral.WriteRegister((byte)Register.DynamicSpadNumRequestedRefSpad, 0x2C); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister((byte)Register.GlobalConfigRefEnStartSelect, 0xB4); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister((byte)Register.DynamicSpadRefEnStartOffset, 0x00); + BusComms.WriteRegister((byte)Register.DynamicSpadNumRequestedRefSpad, 0x2C); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister((byte)Register.GlobalConfigRefEnStartSelect, 0xB4); var first_spad_to_enable = (spad_is_aperture) ? 12 : 0; var spads_enabled = 0; @@ -146,100 +146,100 @@ protected async Task Initialize() } } - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x00, 0x00); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x09, 0x00); - Peripheral.WriteRegister(0x10, 0x00); - Peripheral.WriteRegister(0x11, 0x00); - Peripheral.WriteRegister(0x24, 0x01); - Peripheral.WriteRegister(0x25, 0xFF); - Peripheral.WriteRegister(0x75, 0x00); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x4E, 0x2C); - Peripheral.WriteRegister(0x48, 0x00); - Peripheral.WriteRegister(0x30, 0x20); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x30, 0x09); - Peripheral.WriteRegister(0x54, 0x00); - Peripheral.WriteRegister(0x31, 0x04); - Peripheral.WriteRegister(0x32, 0x03); - Peripheral.WriteRegister(0x40, 0x83); - Peripheral.WriteRegister(0x46, 0x25); - Peripheral.WriteRegister(0x60, 0x00); - Peripheral.WriteRegister(0x27, 0x00); - Peripheral.WriteRegister(0x50, 0x06); - Peripheral.WriteRegister(0x51, 0x00); - Peripheral.WriteRegister(0x52, 0x96); - Peripheral.WriteRegister(0x56, 0x08); - Peripheral.WriteRegister(0x57, 0x30); - Peripheral.WriteRegister(0x61, 0x00); - Peripheral.WriteRegister(0x62, 0x00); - Peripheral.WriteRegister(0x64, 0x00); - Peripheral.WriteRegister(0x65, 0x00); - Peripheral.WriteRegister(0x66, 0xA0); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x22, 0x32); - Peripheral.WriteRegister(0x47, 0x14); - Peripheral.WriteRegister(0x49, 0xFF); - Peripheral.WriteRegister(0x4A, 0x00); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x7A, 0x0A); - Peripheral.WriteRegister(0x7B, 0x00); - Peripheral.WriteRegister(0x78, 0x21); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x23, 0x34); - Peripheral.WriteRegister(0x42, 0x00); - Peripheral.WriteRegister(0x44, 0xFF); - Peripheral.WriteRegister(0x45, 0x26); - Peripheral.WriteRegister(0x46, 0x05); - Peripheral.WriteRegister(0x40, 0x40); - Peripheral.WriteRegister(0x0E, 0x06); - Peripheral.WriteRegister(0x20, 0x1A); - Peripheral.WriteRegister(0x43, 0x40); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x34, 0x03); - Peripheral.WriteRegister(0x35, 0x44); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x31, 0x04); - Peripheral.WriteRegister(0x4B, 0x09); - Peripheral.WriteRegister(0x4C, 0x05); - Peripheral.WriteRegister(0x4D, 0x04); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x44, 0x00); - Peripheral.WriteRegister(0x45, 0x20); - Peripheral.WriteRegister(0x47, 0x08); - Peripheral.WriteRegister(0x48, 0x28); - Peripheral.WriteRegister(0x67, 0x00); - Peripheral.WriteRegister(0x70, 0x04); - Peripheral.WriteRegister(0x71, 0x01); - Peripheral.WriteRegister(0x72, 0xFE); - Peripheral.WriteRegister(0x76, 0x00); - Peripheral.WriteRegister(0x77, 0x00); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x0D, 0x01); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x80, 0x01); - Peripheral.WriteRegister(0x01, 0xF8); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x8E, 0x01); - Peripheral.WriteRegister(0x00, 0x01); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x80, 0x00); - - Peripheral.WriteRegister((byte)Register.SystemInterruptConfigGpio, 0x04); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x00, 0x00); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x09, 0x00); + BusComms.WriteRegister(0x10, 0x00); + BusComms.WriteRegister(0x11, 0x00); + BusComms.WriteRegister(0x24, 0x01); + BusComms.WriteRegister(0x25, 0xFF); + BusComms.WriteRegister(0x75, 0x00); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x4E, 0x2C); + BusComms.WriteRegister(0x48, 0x00); + BusComms.WriteRegister(0x30, 0x20); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x30, 0x09); + BusComms.WriteRegister(0x54, 0x00); + BusComms.WriteRegister(0x31, 0x04); + BusComms.WriteRegister(0x32, 0x03); + BusComms.WriteRegister(0x40, 0x83); + BusComms.WriteRegister(0x46, 0x25); + BusComms.WriteRegister(0x60, 0x00); + BusComms.WriteRegister(0x27, 0x00); + BusComms.WriteRegister(0x50, 0x06); + BusComms.WriteRegister(0x51, 0x00); + BusComms.WriteRegister(0x52, 0x96); + BusComms.WriteRegister(0x56, 0x08); + BusComms.WriteRegister(0x57, 0x30); + BusComms.WriteRegister(0x61, 0x00); + BusComms.WriteRegister(0x62, 0x00); + BusComms.WriteRegister(0x64, 0x00); + BusComms.WriteRegister(0x65, 0x00); + BusComms.WriteRegister(0x66, 0xA0); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x22, 0x32); + BusComms.WriteRegister(0x47, 0x14); + BusComms.WriteRegister(0x49, 0xFF); + BusComms.WriteRegister(0x4A, 0x00); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x7A, 0x0A); + BusComms.WriteRegister(0x7B, 0x00); + BusComms.WriteRegister(0x78, 0x21); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x23, 0x34); + BusComms.WriteRegister(0x42, 0x00); + BusComms.WriteRegister(0x44, 0xFF); + BusComms.WriteRegister(0x45, 0x26); + BusComms.WriteRegister(0x46, 0x05); + BusComms.WriteRegister(0x40, 0x40); + BusComms.WriteRegister(0x0E, 0x06); + BusComms.WriteRegister(0x20, 0x1A); + BusComms.WriteRegister(0x43, 0x40); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x34, 0x03); + BusComms.WriteRegister(0x35, 0x44); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x31, 0x04); + BusComms.WriteRegister(0x4B, 0x09); + BusComms.WriteRegister(0x4C, 0x05); + BusComms.WriteRegister(0x4D, 0x04); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x44, 0x00); + BusComms.WriteRegister(0x45, 0x20); + BusComms.WriteRegister(0x47, 0x08); + BusComms.WriteRegister(0x48, 0x28); + BusComms.WriteRegister(0x67, 0x00); + BusComms.WriteRegister(0x70, 0x04); + BusComms.WriteRegister(0x71, 0x01); + BusComms.WriteRegister(0x72, 0xFE); + BusComms.WriteRegister(0x76, 0x00); + BusComms.WriteRegister(0x77, 0x00); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x0D, 0x01); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x80, 0x01); + BusComms.WriteRegister(0x01, 0xF8); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x8E, 0x01); + BusComms.WriteRegister(0x00, 0x01); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x80, 0x00); + + BusComms.WriteRegister((byte)Register.SystemInterruptConfigGpio, 0x04); var gpio_hv_mux_active_high = Read((byte)Register.GpioHvMuxActiveHigh); - Peripheral.WriteRegister((byte)Register.GpioHvMuxActiveHigh, (byte)(gpio_hv_mux_active_high & ~0x10)); + BusComms.WriteRegister((byte)Register.GpioHvMuxActiveHigh, (byte)(gpio_hv_mux_active_high & ~0x10)); - Peripheral.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); - Peripheral.WriteRegister((byte)Register.SystemSequenceConfig, 0xE8); + BusComms.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); + BusComms.WriteRegister((byte)Register.SystemSequenceConfig, 0xE8); - Peripheral.WriteRegister((byte)Register.SystemSequenceConfig, 0x01); + BusComms.WriteRegister((byte)Register.SystemSequenceConfig, 0x01); PerformSingleRefCalibration(0x40); - Peripheral.WriteRegister((byte)Register.SystemSequenceConfig, 0x02); + BusComms.WriteRegister((byte)Register.SystemSequenceConfig, 0x02); PerformSingleRefCalibration(0x00); - Peripheral.WriteRegister((byte)Register.SystemSequenceConfig, 0xE8); + BusComms.WriteRegister((byte)Register.SystemSequenceConfig, 0xE8); } /// @@ -285,7 +285,7 @@ public void SetAddress(byte newAddress) return; byte address = (byte)(newAddress & 0x7F); - Peripheral.WriteRegister((byte)Register.I2CSlaveDeviceAddress, address); + BusComms.WriteRegister((byte)Register.I2CSlaveDeviceAddress, address); } /// @@ -317,19 +317,19 @@ public async Task ShutDown(bool state) /// protected Tuple GetSpadInfo() { - Peripheral.WriteRegister(0x80, 0x01); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x00, 0x00); - Peripheral.WriteRegister(0xFF, 0x06); + BusComms.WriteRegister(0x80, 0x01); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x00, 0x00); + BusComms.WriteRegister(0xFF, 0x06); var result = (byte)(Read(0x83) | 0x04); - Peripheral.WriteRegister(0x83, result); + BusComms.WriteRegister(0x83, result); - Peripheral.WriteRegister(0xFF, 0x07); - Peripheral.WriteRegister(0x81, 0x01); - Peripheral.WriteRegister(0x94, 0x6B); + BusComms.WriteRegister(0xFF, 0x07); + BusComms.WriteRegister(0x81, 0x01); + BusComms.WriteRegister(0x94, 0x6B); - Peripheral.WriteRegister(0x83, 0x00); + BusComms.WriteRegister(0x83, 0x00); int tCount = 0; while (Read(0x83) == 0x00) @@ -342,21 +342,21 @@ protected Tuple GetSpadInfo() } } - Peripheral.WriteRegister(0x83, 0x01); + BusComms.WriteRegister(0x83, 0x01); var tmp = Read(0x92); var count = tmp & 0x7F; var is_aperture = ((tmp >> 7) & 0x01) == 1; - Peripheral.WriteRegister(0x81, 0x00); - Peripheral.WriteRegister(0xFF, 0x06); + BusComms.WriteRegister(0x81, 0x00); + BusComms.WriteRegister(0xFF, 0x06); var t = (byte)(Read(0x83) & ~0x04); - Peripheral.WriteRegister(0xFF, t); + BusComms.WriteRegister(0xFF, t); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x00, 0x01); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x80, 0x00); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x00, 0x01); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x80, 0x00); return new Tuple(count, is_aperture); } @@ -368,7 +368,7 @@ protected Tuple GetSpadInfo() /// protected void PerformSingleRefCalibration(byte vhvInitByte) { - Peripheral.WriteRegister((byte)Register.RangeStart, (byte)(0x01 | vhvInitByte & 0xFF)); + BusComms.WriteRegister((byte)Register.RangeStart, (byte)(0x01 | vhvInitByte & 0xFF)); int tCount = 0; @@ -382,33 +382,33 @@ protected void PerformSingleRefCalibration(byte vhvInitByte) } } - Peripheral.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); - Peripheral.WriteRegister((byte)Register.RangeStart, 0x00); + BusComms.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); + BusComms.WriteRegister((byte)Register.RangeStart, 0x00); } byte Read(byte address) { - var result = Peripheral.ReadRegister(address); + var result = BusComms.ReadRegister(address); return result; } int Read16(byte address) { - //var result = Peripheral.ReadRegisters(address, 2); - Peripheral.ReadRegister(address, ReadBuffer.Span[0..2]); + //var result = BusComms.ReadRegisters(address, 2); + BusComms.ReadRegister(address, ReadBuffer.Span[0..2]); return (ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]; } async Task GetRawRangeData() { - Peripheral.WriteRegister(0x80, 0x01); - Peripheral.WriteRegister(0xFF, 0x01); - Peripheral.WriteRegister(0x00, 0x00); - Peripheral.WriteRegister(0x91, stopVariable); - Peripheral.WriteRegister(0x00, 0x01); - Peripheral.WriteRegister(0xFF, 0x00); - Peripheral.WriteRegister(0x80, 0x00); - Peripheral.WriteRegister((byte)Register.RangeStart, 0x01); + BusComms.WriteRegister(0x80, 0x01); + BusComms.WriteRegister(0xFF, 0x01); + BusComms.WriteRegister(0x00, 0x00); + BusComms.WriteRegister(0x91, stopVariable); + BusComms.WriteRegister(0x00, 0x01); + BusComms.WriteRegister(0xFF, 0x00); + BusComms.WriteRegister(0x80, 0x00); + BusComms.WriteRegister((byte)Register.RangeStart, 0x01); int tCount = 0; while ((byte)(Read((byte)Register.RangeStart) & 0x01) > 0) @@ -435,7 +435,7 @@ async Task GetRawRangeData() } var range_mm = Read16((byte)Register.ResultRangeStatus + 10); - Peripheral.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); + BusComms.WriteRegister((byte)Register.GpioHvMuxActiveHigh, 0x01); return range_mm; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs index ca23d8d866..b99eefe696 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs @@ -49,7 +49,7 @@ protected override Task ReadSensor() WriteBuffer.Span[0] = ASG_DATA_MSB; WriteBuffer.Span[1] = ASG_DATA_LSB; - Peripheral.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span); + BusComms.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span); var value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; @@ -71,7 +71,7 @@ public byte GetVersion() WriteBuffer.Span[0] = ASG_VERSION_MSB; WriteBuffer.Span[1] = ASG_VERSION_LSB; - Peripheral.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); // CRC check if (!CheckCrc8(ReadBuffer.Slice(0, 1).ToArray(), 1, ReadBuffer.Span[1])) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs index eeb03ce7c4..7f399bb2c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs @@ -62,8 +62,8 @@ public partial class Ens160 : /// public OperatingMode CurrentOperatingMode { - get => (OperatingMode)Peripheral.ReadRegister((byte)Registers.OPMODE); - set => Peripheral.WriteRegister((byte)Registers.OPMODE, (byte)value); + get => (OperatingMode)BusComms.ReadRegister((byte)Registers.OPMODE); + set => BusComms.WriteRegister((byte)Registers.OPMODE, (byte)value); } /// @@ -88,8 +88,8 @@ public Ens160(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected async Task Initialize() { - Peripheral.WriteRegister((byte)Registers.COMMAND, (byte)Commands.NOP); - Peripheral.WriteRegister((byte)Registers.COMMAND, (byte)Commands.CLRGPR); + BusComms.WriteRegister((byte)Registers.COMMAND, (byte)Commands.NOP); + BusComms.WriteRegister((byte)Registers.COMMAND, (byte)Commands.CLRGPR); await Task.Delay(10); await Reset(); @@ -101,7 +101,7 @@ protected async Task Initialize() /// public Task Reset() { - Peripheral.WriteRegister((byte)Registers.OPMODE, (byte)OperatingMode.Reset); + BusComms.WriteRegister((byte)Registers.OPMODE, (byte)OperatingMode.Reset); return Task.Delay(10); } @@ -112,7 +112,7 @@ public Task Reset() /// ID as a ushort (2 bytes) public ushort GetDeviceID() { - return Peripheral.ReadRegisterAsUShort((byte)Registers.PART_ID); + return BusComms.ReadRegisterAsUShort((byte)Registers.PART_ID); } /// @@ -121,11 +121,11 @@ public ushort GetDeviceID() /// The major, minor, release values as a ttuple of bytes public (byte Major, byte Minor, byte Release) GetFirmwareVersion() { - Peripheral.WriteRegister((byte)Registers.COMMAND, (byte)Commands.GET_APPVER); + BusComms.WriteRegister((byte)Registers.COMMAND, (byte)Commands.GET_APPVER); var version = new byte[3]; - Peripheral.ReadRegister((byte)Registers.GPR_READ_4); + BusComms.ReadRegister((byte)Registers.GPR_READ_4); return (version[0], version[1], version[2]); } @@ -135,7 +135,7 @@ public ushort GetDeviceID() /// void ClearGPRRegisters() { - Peripheral.WriteRegister((byte)Registers.COMMAND, (byte)Commands.CLRGPR); + BusComms.WriteRegister((byte)Registers.COMMAND, (byte)Commands.CLRGPR); } /// @@ -146,7 +146,7 @@ public void SetTemperature(Units.Temperature ambientTemperature) { ushort temp = (ushort)(ambientTemperature.Kelvin * 64); - Peripheral.WriteRegister((byte)Registers.TEMP_IN, temp); + BusComms.WriteRegister((byte)Registers.TEMP_IN, temp); } /// @@ -157,7 +157,7 @@ public void SetHumidity(RelativeHumidity humidity) { ushort hum = (ushort)(humidity.Percent * 64); - Peripheral.WriteRegister((byte)Registers.RH_IN, hum); + BusComms.WriteRegister((byte)Registers.RH_IN, hum); } /// @@ -165,7 +165,7 @@ public void SetHumidity(RelativeHumidity humidity) /// public UBAAirQualityIndex GetAirQualityIndex() { - var value = Peripheral.ReadRegister((byte)Registers.DATA_AQI); + var value = BusComms.ReadRegister((byte)Registers.DATA_AQI); var aqi = value >> 5; @@ -174,33 +174,33 @@ public UBAAirQualityIndex GetAirQualityIndex() bool IsNewDataAvailable() { - var value = Peripheral.ReadRegister((byte)Registers.DATA_STATUS); + var value = BusComms.ReadRegister((byte)Registers.DATA_STATUS); return BitHelpers.GetBitValue(value, 0x02); } bool IsNewGPRAvailable() { - var value = Peripheral.ReadRegister((byte)Registers.DATA_STATUS); + var value = BusComms.ReadRegister((byte)Registers.DATA_STATUS); return BitHelpers.GetBitValue(value, 0x03); } Concentration GetTotalVolotileOrganicCompounds() { - var con = Peripheral.ReadRegisterAsUShort((byte)Registers.DATA_TVOC); + var con = BusComms.ReadRegisterAsUShort((byte)Registers.DATA_TVOC); return new Concentration(con, Units.Concentration.UnitType.PartsPerBillion); } Concentration GetCO2Concentration() { - var con = Peripheral.ReadRegisterAsUShort((byte)Registers.DATA_ECO2); + var con = BusComms.ReadRegisterAsUShort((byte)Registers.DATA_ECO2); return new Concentration(con, Units.Concentration.UnitType.PartsPerMillion); } Concentration GetEthanolConcentration() { - var con = Peripheral.ReadRegisterAsUShort((byte)Registers.DATA_ETOH); + var con = BusComms.ReadRegisterAsUShort((byte)Registers.DATA_ETOH); return new Concentration(con, Units.Concentration.UnitType.PartsPerBillion); } @@ -210,7 +210,7 @@ Concentration GetEthanolConcentration() /// Temperature public Units.Temperature GetTemperature() { - var temp = Peripheral.ReadRegisterAsUShort((byte)Registers.DATA_T); + var temp = BusComms.ReadRegisterAsUShort((byte)Registers.DATA_T); return new Units.Temperature(temp / 64.0, Units.Temperature.UnitType.Kelvin); } @@ -220,7 +220,7 @@ public Units.Temperature GetTemperature() /// public RelativeHumidity GetHumidity() { - var hum = Peripheral.ReadRegisterAsUShort((byte)Registers.DATA_T); + var hum = BusComms.ReadRegisterAsUShort((byte)Registers.DATA_T); return new RelativeHumidity(hum / 512.0); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs index 41d793981c..4b42cf848c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs @@ -186,7 +186,7 @@ public override void StopUpdating() ParticleDensity? ParticleDensity_100microns)> ReadSensor() { var buffer = new byte[32]; - Peripheral.Read(buffer); + BusComms.Read(buffer); var span = buffer.AsSpan(); span.Reverse(); if (buffer[30..32].SequenceEqual(Preamble) == false) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs index 7b44a29c36..fdc95ea3e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs @@ -106,7 +106,7 @@ public byte[] GetSerialNumber() Thread.Sleep(1); var data = new byte[9]; - Peripheral.Read(data); + BusComms.Read(data); var ret = new byte[6]; @@ -130,7 +130,7 @@ protected bool IsDataReady() SendCommand(Commands.GetDataReadyStatus); Thread.Sleep(1); var data = new byte[3]; - Peripheral.Read(data); + BusComms.Read(data); if (data[1] == 0 && (data[0] & 0x07) == 0) { @@ -184,7 +184,7 @@ void SendCommand(Commands command) data[0] = (byte)((ushort)command >> 8); data[1] = (byte)(ushort)command; - Peripheral.Write(data); + BusComms.Write(data); } /// @@ -202,7 +202,7 @@ void SendCommand(Commands command) SendCommand(Commands.ReadMeasurement); Thread.Sleep(1); - Peripheral.Read(ReadBuffer.Span[0..9]); + BusComms.Read(ReadBuffer.Span[0..9]); int value = ReadBuffer.Span[0] << 8 | ReadBuffer.Span[1]; conditions.Concentration = new Concentration(value, Units.Concentration.UnitType.PartsPerMillion); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs index 49a38db82b..75d7b9c815 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs @@ -44,7 +44,7 @@ public InterruptStatus InterruptReset { get { - var intReset = Peripheral.ReadRegister(Registers.SYSTEM_CONTROL); + var intReset = BusComms.ReadRegister(Registers.SYSTEM_CONTROL); intReset = (byte)((intReset & MaskValues.INT_RESET) >> 6); return (InterruptStatus)intReset; } @@ -54,9 +54,9 @@ public InterruptStatus InterruptReset { throw new ArgumentOutOfRangeException(); } - var intReset = Peripheral.ReadRegister(Registers.SYSTEM_CONTROL); + var intReset = BusComms.ReadRegister(Registers.SYSTEM_CONTROL); intReset = (byte)((intReset & ~MaskValues.INT_RESET) | (byte)value << 6); - Peripheral?.WriteRegister(Registers.SYSTEM_CONTROL, intReset); + BusComms?.WriteRegister(Registers.SYSTEM_CONTROL, intReset); } } @@ -72,9 +72,9 @@ public MeasurementTimeType MeasurementTime { throw new ArgumentOutOfRangeException(); } - var time = Peripheral.ReadRegister(Registers.MODE_CONTROL1); + var time = BusComms.ReadRegister(Registers.MODE_CONTROL1); time = (byte)((time & ~MaskValues.MEASUREMENT_TIME) | (byte)value); - Peripheral?.WriteRegister(Registers.MODE_CONTROL1, time); + BusComms?.WriteRegister(Registers.MODE_CONTROL1, time); measurementTime = value; } } @@ -88,9 +88,9 @@ public bool IsMeasurementActive get => isMeasurementActive; set { - var active = Peripheral.ReadRegister(Registers.MODE_CONTROL2); + var active = BusComms.ReadRegister(Registers.MODE_CONTROL2); active = (byte)((active & ~MaskValues.RGBC_EN) | Convert.ToByte(value) << 4); - Peripheral?.WriteRegister(Registers.MODE_CONTROL2, active); + BusComms?.WriteRegister(Registers.MODE_CONTROL2, active); isMeasurementActive = value; } } @@ -108,9 +108,9 @@ public AdcGainTypes AdcGain { throw new ArgumentOutOfRangeException(); } - var adcGain = Peripheral.ReadRegister(Registers.MODE_CONTROL2); + var adcGain = BusComms.ReadRegister(Registers.MODE_CONTROL2); adcGain = (byte)((adcGain & ~MaskValues.ADC_GAIN) | (byte)value); - Peripheral?.WriteRegister(Registers.MODE_CONTROL2, adcGain); + BusComms?.WriteRegister(Registers.MODE_CONTROL2, adcGain); this.adcGain = value; } } @@ -123,7 +123,7 @@ public bool InterruptSignalIsActive { get { - var intStatus = Peripheral.ReadRegister(Registers.INTERRUPT); + var intStatus = BusComms.ReadRegister(Registers.INTERRUPT); intStatus = (byte)((intStatus & MaskValues.INT_STATUS) >> 7); return Convert.ToBoolean(intStatus); } @@ -141,9 +141,9 @@ public LatchBehaviorTypes LatchBehavior { throw new ArgumentOutOfRangeException(); } - var intLatch = Peripheral.ReadRegister(Registers.INTERRUPT); + var intLatch = BusComms.ReadRegister(Registers.INTERRUPT); intLatch = (byte)((intLatch & ~MaskValues.INT_LATCH) | (byte)value << 4); - Peripheral?.WriteRegister(Registers.INTERRUPT, intLatch); + BusComms?.WriteRegister(Registers.INTERRUPT, intLatch); latchBehavior = value; } } @@ -158,9 +158,9 @@ public InterruptChannels InterruptSource set { if (!Enum.IsDefined(typeof(InterruptChannels), value)) { throw new ArgumentOutOfRangeException(); } - var intSource = Peripheral.ReadRegister(Registers.INTERRUPT); + var intSource = BusComms.ReadRegister(Registers.INTERRUPT); intSource = (byte)((intSource & ~MaskValues.INT_SOURCE) | (byte)value << 2); - Peripheral?.WriteRegister(Registers.INTERRUPT, intSource); + BusComms?.WriteRegister(Registers.INTERRUPT, intSource); interruptSource = value; } } @@ -174,9 +174,9 @@ public bool InterruptIsEnabled get => isInterruptEnabled; set { - var intPin = Peripheral.ReadRegister(Registers.INTERRUPT); + var intPin = BusComms.ReadRegister(Registers.INTERRUPT); intPin = (byte)((intPin & ~MaskValues.INT_ENABLE) | Convert.ToByte(value)); - Peripheral?.WriteRegister(Registers.INTERRUPT, intPin); + BusComms?.WriteRegister(Registers.INTERRUPT, intPin); isInterruptEnabled = value; } } @@ -194,9 +194,9 @@ public InterruptTypes InterruptPersistence { throw new ArgumentOutOfRangeException(); } - var intPersistence = Peripheral.ReadRegister(Registers.PERSISTENCE); + var intPersistence = BusComms.ReadRegister(Registers.PERSISTENCE); intPersistence = (byte)((intPersistence & ~MaskValues.PERSISTENCE_MASK) | (byte)value); - Peripheral?.WriteRegister(Registers.PERSISTENCE, intPersistence); + BusComms?.WriteRegister(Registers.PERSISTENCE, intPersistence); interruptPersistence = value; } } @@ -210,7 +210,7 @@ public ushort LowerInterruptThreshold get => lowerInterruptThreshold; set { - Peripheral.WriteRegister(Registers.TL, value); + BusComms.WriteRegister(Registers.TL, value); lowerInterruptThreshold = value; } } @@ -224,7 +224,7 @@ public ushort UpperInterruptThreshold get => upperInterruptThreshold; set { - Peripheral.WriteRegister(Registers.TH, value); + BusComms.WriteRegister(Registers.TH, value); upperInterruptThreshold = value; } } @@ -306,10 +306,10 @@ protected void Reset() { Resolver.Log.Info("Reset"); - var status = Peripheral.ReadRegister(Registers.SYSTEM_CONTROL); + var status = BusComms.ReadRegister(Registers.SYSTEM_CONTROL); status = (byte)((status & ~MaskValues.SW_RESET) | 0x01 << 7); - Peripheral.WriteRegister(Registers.SYSTEM_CONTROL, status); + BusComms.WriteRegister(Registers.SYSTEM_CONTROL, status); // set default measurement configuration MeasurementTime = MeasurementTimeType.Ms160; @@ -326,7 +326,7 @@ protected void Reset() upperInterruptThreshold = 0xFFFF; // write default value to Mode_Control3 - Peripheral.WriteRegister(Registers.MODE_CONTROL3, 0x02); + BusComms.WriteRegister(Registers.MODE_CONTROL3, 0x02); } /// @@ -334,7 +334,7 @@ protected void Reset() /// protected bool ReadMeasurementIsValid() { - var valid = Peripheral.ReadRegister(Registers.MODE_CONTROL2); + var valid = BusComms.ReadRegister(Registers.MODE_CONTROL2); valid = (byte)(valid & MaskValues.VALID); return Convert.ToBoolean(valid); } @@ -343,25 +343,25 @@ protected bool ReadMeasurementIsValid() /// Reads the red data register of the sensor /// /// - protected ushort ReadRedDataRegister() => Peripheral.ReadRegisterAsUShort(Registers.RED_DATA); + protected ushort ReadRedDataRegister() => BusComms.ReadRegisterAsUShort(Registers.RED_DATA); /// /// Reads the green data register of the sensor /// /// - protected ushort ReadGreenDataRegister() => Peripheral.ReadRegisterAsUShort(Registers.GREEN_DATA); + protected ushort ReadGreenDataRegister() => BusComms.ReadRegisterAsUShort(Registers.GREEN_DATA); /// /// Reads the blue data register of the sensor /// /// - protected ushort ReadBlueDataRegister() => Peripheral.ReadRegisterAsUShort(Registers.BLUE_DATA); + protected ushort ReadBlueDataRegister() => BusComms.ReadRegisterAsUShort(Registers.BLUE_DATA); /// /// Reads the clear data register of the sensor /// /// - protected ushort ReadClearDataRegister() => Peripheral.ReadRegisterAsUShort(Registers.CLEAR_DATA); + protected ushort ReadClearDataRegister() => BusComms.ReadRegisterAsUShort(Registers.CLEAR_DATA); async Task ISensor.Read() => (await Read()).AmbientLight.Value; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs index 16cd2ecbf1..0bb2d50b80 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs @@ -59,8 +59,8 @@ public Bh1750( private void Initialize() { - Peripheral.Write((byte)Commands.PowerOn); - Peripheral.Write((byte)Commands.Reset); + BusComms.Write((byte)Commands.PowerOn); + BusComms.Write((byte)Commands.Reset); } /// @@ -73,15 +73,15 @@ protected async override Task ReadSensor() MeasuringMode == MeasuringModes.OneTimeHighResolutionMode2 || MeasuringMode == MeasuringModes.OneTimeLowResolutionMode) { - Peripheral.Write((byte)Commands.PowerOn); + BusComms.Write((byte)Commands.PowerOn); } - Peripheral.Write((byte)MeasuringMode); + BusComms.Write((byte)MeasuringMode); //wait for the measurement to complete before reading await Task.Delay(GetMeasurementTime(MeasuringMode)); - Peripheral.Read(ReadBuffer.Span[0..2]); + BusComms.Read(ReadBuffer.Span[0..2]); ushort raw = BinaryPrimitives.ReadUInt16BigEndian(ReadBuffer.Span[0..2]); @@ -123,8 +123,8 @@ private void SetLightTransmittance(double transmittance) byte val = (byte)(DefaultLightTransmittance / transmittance); - Peripheral.Write((byte)((byte)Commands.MeasurementTimeHigh | (val >> 5))); - Peripheral.Write((byte)((byte)Commands.MeasurementTimeLow | (val & 0b_0001_1111))); + BusComms.Write((byte)((byte)Commands.MeasurementTimeHigh | (val >> 5))); + BusComms.Write((byte)((byte)Commands.MeasurementTimeLow | (val & 0b_0001_1111))); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs index 4e6a1ececf..c8593ff863 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs @@ -26,7 +26,7 @@ public Max44009(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected void Initialize() { - Peripheral.WriteRegister(0x02, 0x00); + BusComms.WriteRegister(0x02, 0x00); } /// @@ -35,7 +35,7 @@ protected void Initialize() /// The latest sensor reading protected override Task ReadSensor() { - Peripheral.ReadRegister(0x03, ReadBuffer.Span[0..2]); + BusComms.ReadRegister(0x03, ReadBuffer.Span[0..2]); var exponent = (ReadBuffer.Span[0] >> 4); if (exponent == 0x0f) throw new Exception("Out of range"); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs index 92afb2129d..302e52351c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs @@ -23,7 +23,7 @@ public partial class Si1145 /// I2cBus (default to 400 KHz) public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) { - if (Peripheral.ReadRegister(Registers.REG_PARTID) != 0x45) + if (BusComms.ReadRegister(Registers.REG_PARTID) != 0x45) { throw new Exception("Invalid part ID"); } @@ -39,17 +39,17 @@ public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) (Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared) conditions; // ultraviolet (UV) index - Peripheral.ReadRegister(0x2C, ReadBuffer.Span[0..2]); + BusComms.ReadRegister(0x2C, ReadBuffer.Span[0..2]); int rawUVIndex = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; conditions.UltravioletIndex = rawUVIndex / 100.0; // Infrared - Peripheral.ReadRegister(0x22, ReadBuffer.Span[0..2]); + BusComms.ReadRegister(0x22, ReadBuffer.Span[0..2]); int rawInfrared = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; conditions.Infrared = new Illuminance(rawInfrared, Illuminance.UnitType.Lux); // Visible - Peripheral.ReadRegister(0x24, ReadBuffer.Span[0..2]); + BusComms.ReadRegister(0x24, ReadBuffer.Span[0..2]); int rawVisible = (ReadBuffer.Span[1] << 8) | ReadBuffer.Span[0]; conditions.VisibleLight = new Illuminance(rawVisible, Illuminance.UnitType.Lux); @@ -61,10 +61,10 @@ private void Initialize() Reset(); // enable UVindex measurement coefficients! - Peripheral.WriteRegister(Registers.REG_UCOEFF0, 0x29); - Peripheral.WriteRegister(Registers.REG_UCOEFF1, 0x89); - Peripheral.WriteRegister(Registers.REG_UCOEFF2, 0x02); - Peripheral.WriteRegister(Registers.REG_UCOEFF3, 0x00); + BusComms.WriteRegister(Registers.REG_UCOEFF0, 0x29); + BusComms.WriteRegister(Registers.REG_UCOEFF1, 0x89); + BusComms.WriteRegister(Registers.REG_UCOEFF2, 0x02); + BusComms.WriteRegister(Registers.REG_UCOEFF3, 0x00); // enable UV sensor WriteParam(Parameters.PARAM_CHLIST, Parameters.PARAM_CHLIST_ENUV | @@ -72,11 +72,11 @@ private void Initialize() Parameters.PARAM_CHLIST_ENPS1); // enable interrupt on every sample - Peripheral.WriteRegister(Registers.REG_INTCFG, Registers.REG_INTCFG_INTOE); - Peripheral.WriteRegister(Registers.REG_IRQEN, Registers.REG_IRQEN_ALSEVERYSAMPLE); + BusComms.WriteRegister(Registers.REG_INTCFG, Registers.REG_INTCFG_INTOE); + BusComms.WriteRegister(Registers.REG_IRQEN, Registers.REG_IRQEN_ALSEVERYSAMPLE); // program LED current - Peripheral.WriteRegister(Registers.REG_PSLED21, 0x03); // 20mA for LED 1 only + BusComms.WriteRegister(Registers.REG_PSLED21, 0x03); // 20mA for LED 1 only WriteParam(Parameters.PARAM_PS1ADCMUX, Parameters.PARAM_ADCMUX_LARGEIR); // prox sensor #1 uses LED #1 WriteParam(Parameters.PARAM_PSLED12SEL, Parameters.PARAM_PSLED12SEL_PS1LED1); @@ -103,41 +103,41 @@ private void Initialize() WriteParam(Parameters.PARAM_ALSVISADCMISC, Parameters.PARAM_ALSVISADCMISC_VISRANGE); // measurement rate for auto - Peripheral.WriteRegister(Registers.REG_MEASRATE0, 0xFF); // 255 * 31.25uS = 8ms + BusComms.WriteRegister(Registers.REG_MEASRATE0, 0xFF); // 255 * 31.25uS = 8ms // auto run - Peripheral.WriteRegister(Registers.REG_COMMAND, Commands.PSALS_AUTO); + BusComms.WriteRegister(Registers.REG_COMMAND, Commands.PSALS_AUTO); } private byte WriteParam(byte param, int value) { - Peripheral.WriteRegister(Registers.REG_PARAMWR, (byte)value); - Peripheral.WriteRegister(Registers.REG_COMMAND, (byte)(param | Commands.PARAM_SET)); + BusComms.WriteRegister(Registers.REG_PARAMWR, (byte)value); + BusComms.WriteRegister(Registers.REG_COMMAND, (byte)(param | Commands.PARAM_SET)); - return Peripheral.ReadRegister(Registers.REG_PARAMRD); + return BusComms.ReadRegister(Registers.REG_PARAMRD); } private byte ReadParam(byte param) { - Peripheral.WriteRegister(Registers.REG_COMMAND, (byte)(param | Commands.PARAM_QUERY)); - return Peripheral.ReadRegister(Registers.REG_PARAMRD); + BusComms.WriteRegister(Registers.REG_COMMAND, (byte)(param | Commands.PARAM_QUERY)); + return BusComms.ReadRegister(Registers.REG_PARAMRD); } private void Reset() { - Peripheral.WriteRegister(Registers.REG_MEASRATE0, 0); - Peripheral.WriteRegister(Registers.REG_MEASRATE1, 0); - Peripheral.WriteRegister(Registers.REG_IRQEN, 0); - Peripheral.WriteRegister(Registers.REG_IRQMODE1, 0); - Peripheral.WriteRegister(Registers.REG_IRQMODE2, 0); - Peripheral.WriteRegister(Registers.REG_INTCFG, 0); - Peripheral.WriteRegister(Registers.REG_IRQSTAT, 0xFF); + BusComms.WriteRegister(Registers.REG_MEASRATE0, 0); + BusComms.WriteRegister(Registers.REG_MEASRATE1, 0); + BusComms.WriteRegister(Registers.REG_IRQEN, 0); + BusComms.WriteRegister(Registers.REG_IRQMODE1, 0); + BusComms.WriteRegister(Registers.REG_IRQMODE2, 0); + BusComms.WriteRegister(Registers.REG_INTCFG, 0); + BusComms.WriteRegister(Registers.REG_IRQSTAT, 0xFF); - Peripheral.WriteRegister(Registers.REG_COMMAND, Commands.RESET); + BusComms.WriteRegister(Registers.REG_COMMAND, Commands.RESET); Thread.Sleep(10); - Peripheral.WriteRegister(Registers.REG_HWKEY, 0x17); + BusComms.WriteRegister(Registers.REG_HWKEY, 0x17); Thread.Sleep(10); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs index 32ed298d5e..db2875d788 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs @@ -41,12 +41,12 @@ public partial class Tsl2591 : /// /// Sensor package ID /// - public int PackageID => Peripheral.ReadRegister((byte)(Register.PackageID | Register.Command)); + public int PackageID => BusComms.ReadRegister((byte)(Register.PackageID | Register.Command)); /// /// Sensor device ID /// - public int DeviceID => Peripheral.ReadRegister((byte)(Register.DeviceID | Register.Command)); + public int DeviceID => BusComms.ReadRegister((byte)(Register.DeviceID | Register.Command)); /// /// Gain of the sensor @@ -58,7 +58,7 @@ public GainFactor Gain { PowerOff(); gainFactor = value; - Peripheral.WriteRegister((byte)(Register.Command | Register.Config), (byte)((byte)integrationTime | (byte)gainFactor)); + BusComms.WriteRegister((byte)(Register.Command | Register.Config), (byte)((byte)integrationTime | (byte)gainFactor)); PowerOn(); } } @@ -73,7 +73,7 @@ public IntegrationTimes IntegrationTime { PowerOff(); integrationTime = value; - Peripheral.WriteRegister((byte)(Register.Command | Register.Config), (byte)((byte)integrationTime | (byte)gainFactor)); + BusComms.WriteRegister((byte)(Register.Command | Register.Config), (byte)((byte)integrationTime | (byte)gainFactor)); PowerOn(); } } @@ -124,8 +124,8 @@ public Tsl2591(II2cBus i2cBus, (Illuminance? FullSpectrum, Illuminance? Infrared, Illuminance? VisibleLight, Illuminance? Integrated) conditions; // data sheet indicates you should always read all 4 bytes, in order, for valid data - var channel0 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH0DataL | Register.Command)); - var channel1 = Peripheral.ReadRegisterAsUShort((byte)(Register.CH1DataL | Register.Command)); + var channel0 = BusComms.ReadRegisterAsUShort((byte)(Register.CH0DataL | Register.Command)); + var channel1 = BusComms.ReadRegisterAsUShort((byte)(Register.CH1DataL | Register.Command)); conditions.FullSpectrum = new Illuminance(channel0, IU.Lux); conditions.Infrared = new Illuminance(channel1, IU.Lux); @@ -177,7 +177,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Illuminance? FullSpe /// public Task PowerOn() { - Peripheral.WriteRegister((byte)(Register.Enable | Register.Command), 3); + BusComms.WriteRegister((byte)(Register.Enable | Register.Command), 3); return Task.CompletedTask; } @@ -186,7 +186,7 @@ public Task PowerOn() /// public Task PowerOff() { - Peripheral.WriteRegister((byte)(Register.Enable | Register.Command), 0); + BusComms.WriteRegister((byte)(Register.Enable | Register.Command), 0); return Task.CompletedTask; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs index 2ff52664ce..9b07ebcd87 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs @@ -312,12 +312,12 @@ private async Task DelayForIntegrationTime(int integrationTime) private ushort ReadRegister(Registers register) { - return Peripheral.ReadRegisterAsUShort((byte)register, ByteOrder.LittleEndian); + return BusComms.ReadRegisterAsUShort((byte)register, ByteOrder.LittleEndian); } private void WriteRegister(Registers register, ushort value) { - Peripheral.WriteRegister((byte)register, value, ByteOrder.LittleEndian); + BusComms.WriteRegister((byte)register, value, ByteOrder.LittleEndian); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs index e4fe7232e8..b6cb0d4b86 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs @@ -66,7 +66,7 @@ private int ReadADC() Thread.Sleep(1); } - Peripheral?.ReadRegister((byte)Register.ADCO_B2, _read); + BusComms?.ReadRegister((byte)Register.ADCO_B2, _read); return _read[0] << 16 | _read[1] << 8 | _read[2]; } @@ -90,16 +90,16 @@ private void PowerOn() // Set and clear the RR bit in 0x00, to guarantee a reset of all register values _currentPU_CTRL = PU_CTRL_BITS.RR; - Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); Thread.Sleep(1); // make sure it has time to do it's thing _currentPU_CTRL &= ~PU_CTRL_BITS.RR; - Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // turn on the analog and digital power _currentPU_CTRL |= (PU_CTRL_BITS.PUD | PU_CTRL_BITS.PUA); - Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // wait for power-up ready var timeout = 100; do @@ -110,7 +110,7 @@ private void PowerOn() throw new Exception("Timeout powering up"); } Thread.Sleep(10); - _currentPU_CTRL = (PU_CTRL_BITS)(Peripheral?.ReadRegister((byte)Register.PU_CTRL) ?? 0); + _currentPU_CTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); } while ((_currentPU_CTRL & PU_CTRL_BITS.PUR) != PU_CTRL_BITS.PUR); @@ -119,7 +119,7 @@ private void PowerOn() SetLDO(LdoVoltage.LDO_3V3); SetGain(AdcGain.Gain128); SetConversionRate(ConversionRate.SamplePerSecond80); - Peripheral?.WriteRegister((byte)Register.OTP_ADC, 0x30); // turn off CLK_CHP + BusComms?.WriteRegister((byte)Register.OTP_ADC, 0x30); // turn off CLK_CHP EnableCh2DecouplingCap(); if (!CalibrateAdc()) @@ -128,10 +128,10 @@ private void PowerOn() } // turn on cycle start - _currentPU_CTRL = (PU_CTRL_BITS)(Peripheral?.ReadRegister((byte)Register.PU_CTRL) ?? 0); + _currentPU_CTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); _currentPU_CTRL |= PU_CTRL_BITS.CS; - Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); Output.WriteLine($"PU_CTRL: {_currentPU_CTRL}"); // 0xBE @@ -143,61 +143,61 @@ private void PowerOn() private bool IsConversionComplete() { - var puctrl = (PU_CTRL_BITS)(Peripheral?.ReadRegister((byte)Register.PU_CTRL) ?? 0); + var puctrl = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); return (puctrl & PU_CTRL_BITS.CR) == PU_CTRL_BITS.CR; } private void EnableCh2DecouplingCap() { // app note - enable ch2 decoupling cap - var pga_pwr = Peripheral?.ReadRegister((byte)Register.PGA_PWR) ?? 0; + var pga_pwr = BusComms?.ReadRegister((byte)Register.PGA_PWR) ?? 0; pga_pwr |= 1 << 7; - Peripheral?.WriteRegister((byte)Register.PGA_PWR, pga_pwr); + BusComms?.WriteRegister((byte)Register.PGA_PWR, pga_pwr); } private void SetLDO(LdoVoltage value) { - var ctrl1 = Peripheral?.ReadRegister((byte)Register.CTRL1) ?? 0; + var ctrl1 = BusComms?.ReadRegister((byte)Register.CTRL1) ?? 0; ctrl1 &= 0b11000111; // clear LDO ctrl1 |= (byte)((byte)value << 3); - Peripheral?.WriteRegister((byte)Register.CTRL1, ctrl1); + BusComms?.WriteRegister((byte)Register.CTRL1, ctrl1); _currentPU_CTRL |= PU_CTRL_BITS.AVDDS; - Peripheral?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // enable internal LDO + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // enable internal LDO } private void SetGain(AdcGain value) { - var ctrl1 = Peripheral?.ReadRegister((byte)Register.CTRL1) ?? 0; + var ctrl1 = BusComms?.ReadRegister((byte)Register.CTRL1) ?? 0; ctrl1 &= 0b11111000; // clear gain ctrl1 |= (byte)value; //Bus.WriteRegister((byte)Register.CTRL1, ctrl1); - Peripheral?.WriteRegister((byte)Register.CTRL1, ctrl1); + BusComms?.WriteRegister((byte)Register.CTRL1, ctrl1); } void SetConversionRate(ConversionRate value) { - var ctrl2 = Peripheral?.ReadRegister((byte)Register.CTRL2) ?? 0; + var ctrl2 = BusComms?.ReadRegister((byte)Register.CTRL2) ?? 0; ctrl2 &= 0b10001111; // clear gain ctrl2 |= (byte)((byte)value << 4); - Peripheral?.WriteRegister((byte)Register.CTRL2, ctrl2); + BusComms?.WriteRegister((byte)Register.CTRL2, ctrl2); } bool CalibrateAdc() { - var ctrl2 = Peripheral?.ReadRegister((byte)Register.CTRL2) ?? 0; + var ctrl2 = BusComms?.ReadRegister((byte)Register.CTRL2) ?? 0; // turn on the calibration bit ctrl2 |= (byte)CTRL2_BITS.CALS; - Peripheral?.WriteRegister((byte)Register.CTRL2, ctrl2); + BusComms?.WriteRegister((byte)Register.CTRL2, ctrl2); do { - ctrl2 = Peripheral?.ReadRegister((byte)Register.CTRL2) ?? 0; + ctrl2 = BusComms?.ReadRegister((byte)Register.CTRL2) ?? 0; if ((ctrl2 & (byte)CTRL2_BITS.CAL_ERROR) != 0) { // calibration error diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs index 3a4613c2da..3d8846ef18 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs @@ -99,7 +99,7 @@ public Adxl345(II2cBus i2cBus, byte address) /// Current acceleration protected override Task ReadSensor() { - Peripheral.ReadRegister((byte)Register.X0, ReadBuffer.Span[0..6]); + BusComms.ReadRegister((byte)Register.X0, ReadBuffer.Span[0..6]); var conditions = new Acceleration3D( new Acceleration(ADXL345_MG2G_MULTIPLIER * (short)(ReadBuffer.Span[0] + (ReadBuffer.Span[1] << 8)), Acceleration.UnitType.Gravity), @@ -220,12 +220,12 @@ public void SetDataRate(byte dataRate, bool lowPower) private void WriteRegister(Register register, byte value) { - Peripheral.WriteRegister((byte)register, value); + BusComms.WriteRegister((byte)register, value); } private byte ReadRegister(Register register) { - return Peripheral.ReadRegister((byte)register); + return BusComms.ReadRegister((byte)register); } /// @@ -234,7 +234,7 @@ private byte ReadRegister(Register register) public void DisplayRegisters() { byte[] registerData = new byte[29]; - Peripheral.ReadRegister((byte)Register.TAP_THRESHOLD, registerData); + BusComms.ReadRegister((byte)Register.TAP_THRESHOLD, registerData); DebugInformation.DisplayRegisters((byte)Register.TAP_THRESHOLD, registerData); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index f7d7c479d6..a82cb37521 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -70,8 +70,8 @@ public partial class Adxl362 /// public Frequency SpiBusSpeed { - get => ((SpiCommunications)Peripheral).BusSpeed; - set => ((SpiCommunications)Peripheral).BusSpeed = value; + get => ((SpiCommunications)BusComms).BusSpeed; + set => ((SpiCommunications)BusComms).BusSpeed = value; } /// @@ -85,8 +85,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((SpiCommunications)Peripheral).BusMode; - set => ((SpiCommunications)Peripheral).BusMode = value; + get => ((SpiCommunications)BusComms).BusMode; + set => ((SpiCommunications)BusComms).BusMode = value; } /// @@ -98,7 +98,7 @@ public bool DataReady { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.DATA_READY) != 0; } } @@ -112,7 +112,7 @@ public bool FIFOReady { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.FIFO_READY) != 0; } } @@ -126,7 +126,7 @@ public bool FIFOWatermark { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.FIFO_WATERMARK) != 0; } } @@ -141,7 +141,7 @@ public bool FIFOOverrun { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.FIFO_OVERRUN) != 0; } } @@ -155,7 +155,7 @@ public bool ActivityDetected { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.ACTIVITY_DETECTED) != 0; } } @@ -169,7 +169,7 @@ public bool InactivityDetected { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.INACTIVITY_DETECTED) != 0; } } @@ -183,7 +183,7 @@ public bool IsAwake { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return (ReadBuffer.Span[0] & StatusBitsMasks.AWAKE) != 0; } } @@ -198,7 +198,7 @@ public int DeviceID { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..6]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..6]); int result = WriteBuffer.Span[0]; result |= WriteBuffer.Span[1] << 8; result |= WriteBuffer.Span[2] << 16; @@ -216,7 +216,7 @@ public byte Status { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.DEVICE_ID; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return ReadBuffer.Span[0]; } } @@ -230,12 +230,12 @@ public byte ActivityInactivityControl { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.ACTIVITY_INACTIVITY_CONTROL; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return ReadBuffer.Span[0]; } set { - Peripheral.WriteRegister(Commands.WRITE_REGISTER, value); + BusComms.WriteRegister(Commands.WRITE_REGISTER, value); } } @@ -252,7 +252,7 @@ public bool SelfTest { selfTest = 1; } - Peripheral.WriteRegister(Commands.WRITE_REGISTER, selfTest); + BusComms.WriteRegister(Commands.WRITE_REGISTER, selfTest); } } @@ -265,12 +265,12 @@ public byte FilterControl { WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.FILTER_CONTROL; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..1]); return ReadBuffer.Span[0]; } set { - Peripheral.WriteRegister(Commands.WRITE_REGISTER, value); + BusComms.WriteRegister(Commands.WRITE_REGISTER, value); } } @@ -308,7 +308,7 @@ public void Reset() WriteBuffer.Span[0] = Commands.WRITE_REGISTER; WriteBuffer.Span[1] = Registers.SOFT_RESET; WriteBuffer.Span[2] = 0x52; - Peripheral.Write(WriteBuffer.Span[0..3]); + BusComms.Write(WriteBuffer.Span[0..3]); Thread.Sleep(10); } @@ -320,7 +320,7 @@ public void Start() WriteBuffer.Span[0] = Commands.WRITE_REGISTER; WriteBuffer.Span[1] = Registers.POWER_CONTROL; WriteBuffer.Span[2] = 0x02; - Peripheral.Write(WriteBuffer.Span[0..3]); + BusComms.Write(WriteBuffer.Span[0..3]); } /// @@ -331,10 +331,10 @@ public void Stop() WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.POWER_CONTROL; WriteBuffer.Span[2] = 0x02; - Peripheral.Exchange(WriteBuffer.Span[0..3], ReadBuffer.Span[0..1]); + BusComms.Exchange(WriteBuffer.Span[0..3], ReadBuffer.Span[0..1]); byte power = (byte)((ReadBuffer.Span[0] & (~PowerControlMasks.MEASURE)) & 0xff); WriteBuffer.Span[2] = power; - Peripheral.Write(WriteBuffer.Span[0..3]); + BusComms.Write(WriteBuffer.Span[0..3]); } /// @@ -377,7 +377,7 @@ public override void StopUpdating() // read the XYZ and Temp registers in one go WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = Registers.X_AXIS_LSB; - Peripheral.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..8]); + BusComms.Exchange(WriteBuffer.Span[0..2], ReadBuffer.Span[0..8]); // milli-gravity (1/1000 G) conditions.Acceleration3D = new Acceleration3D( @@ -423,7 +423,7 @@ public void ConfigureActivityThreshold(ushort threshold, byte numberOfSamples) WriteBuffer.Span[2] = (byte)(threshold & 0xff); WriteBuffer.Span[3] = (byte)((threshold >> 8) & 0xff); WriteBuffer.Span[4] = numberOfSamples; - Peripheral.Write(WriteBuffer.Span[0..5]); + BusComms.Write(WriteBuffer.Span[0..5]); } /// @@ -457,7 +457,7 @@ public void ConfigureInactivityThreshold(ushort threshold, ushort numberOfSample WriteBuffer.Span[3] = (byte)((threshold >> 8) & 0xff); WriteBuffer.Span[4] = (byte)(numberOfSamples & 0xff); WriteBuffer.Span[5] = (byte)((threshold >> 8) & 0xff); - Peripheral.Write(WriteBuffer.Span[0..6]); + BusComms.Write(WriteBuffer.Span[0..6]); } /// @@ -502,7 +502,7 @@ private void ConfigureInterrupts(byte interruptMap1, IPin interruptPin1, byte in WriteBuffer.Span[0] = Commands.WRITE_REGISTER; WriteBuffer.Span[1] = interruptMap1; WriteBuffer.Span[2] = interruptMap2; - Peripheral.Write(WriteBuffer.Span[0..3]); + BusComms.Write(WriteBuffer.Span[0..3]); if (interruptPin1 != null) { @@ -548,13 +548,13 @@ private void DisplayRegisters() WriteBuffer.Span[0] = Commands.READ_REGISTER; WriteBuffer.Span[1] = 0x00; - Peripheral.Exchange(WriteBuffer.Span[0..2], rxBuffer[0..6]); + BusComms.Exchange(WriteBuffer.Span[0..2], rxBuffer[0..6]); DebugInformation.DisplayRegisters(0x00, rxBuffer[2..6].ToArray()); WriteBuffer.Span[1] = Registers.X_AXIS_8BITS; - Peripheral.Exchange(WriteBuffer.Span[0..2], rxBuffer); + BusComms.Exchange(WriteBuffer.Span[0..2], rxBuffer); DebugInformation.DisplayRegisters(Registers.X_AXIS_8BITS, ReadBuffer.Span[2..].ToArray()); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs index 1b904d6c1d..64b0aefb2e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs @@ -140,7 +140,7 @@ private void InterruptPort_Changed(object sender, DigitalPortResult e) void Initialize() { - var id = Peripheral.ReadRegister(Registers.APDS9960_ID); + var id = BusComms.ReadRegister(Registers.APDS9960_ID); // if ((id != APDS9960_ID) && (id != APDS9960_ID_1) && (id != APDS9960_ID_2)) // if(id == 0) @@ -152,12 +152,12 @@ void Initialize() SetMode(OperatingModes.ALL, BooleanValues.OFF); /* Set default values for ambient light and proximity registers */ - Peripheral.WriteRegister(Registers.APDS9960_ATIME, DefaultValues.DEFAULT_ATIME); - Peripheral.WriteRegister(Registers.APDS9960_WTIME, DefaultValues.DEFAULT_WTIME); - Peripheral.WriteRegister(Registers.APDS9960_PPULSE, DefaultValues.DEFAULT_PROX_PPULSE); - Peripheral.WriteRegister(Registers.APDS9960_POFFSET_UR, DefaultValues.DEFAULT_POFFSET_UR); - Peripheral.WriteRegister(Registers.APDS9960_POFFSET_DL, DefaultValues.DEFAULT_POFFSET_DL); - Peripheral.WriteRegister(Registers.APDS9960_CONFIG1, DefaultValues.DEFAULT_CONFIG1); + BusComms.WriteRegister(Registers.APDS9960_ATIME, DefaultValues.DEFAULT_ATIME); + BusComms.WriteRegister(Registers.APDS9960_WTIME, DefaultValues.DEFAULT_WTIME); + BusComms.WriteRegister(Registers.APDS9960_PPULSE, DefaultValues.DEFAULT_PROX_PPULSE); + BusComms.WriteRegister(Registers.APDS9960_POFFSET_UR, DefaultValues.DEFAULT_POFFSET_UR); + BusComms.WriteRegister(Registers.APDS9960_POFFSET_DL, DefaultValues.DEFAULT_POFFSET_DL); + BusComms.WriteRegister(Registers.APDS9960_CONFIG1, DefaultValues.DEFAULT_CONFIG1); SetLEDDrive(DefaultValues.DEFAULT_LDRIVE); Resolver.Log.Info("SetProximityGain"); @@ -170,18 +170,18 @@ void Initialize() SetLightIntHighThreshold(DefaultValues.DEFAULT_AIHT); - Peripheral.WriteRegister(Registers.APDS9960_PERS, DefaultValues.DEFAULT_PERS); + BusComms.WriteRegister(Registers.APDS9960_PERS, DefaultValues.DEFAULT_PERS); - Peripheral.WriteRegister(Registers.APDS9960_CONFIG2, DefaultValues.DEFAULT_CONFIG2); + BusComms.WriteRegister(Registers.APDS9960_CONFIG2, DefaultValues.DEFAULT_CONFIG2); - Peripheral.WriteRegister(Registers.APDS9960_CONFIG3, DefaultValues.DEFAULT_CONFIG3); + BusComms.WriteRegister(Registers.APDS9960_CONFIG3, DefaultValues.DEFAULT_CONFIG3); Resolver.Log.Info("SetGestureEnterThresh"); SetGestureEnterThresh(DefaultValues.DEFAULT_GPENTH); SetGestureExitThresh(DefaultValues.DEFAULT_GEXTH); - Peripheral.WriteRegister(Registers.APDS9960_GCONF1, DefaultValues.DEFAULT_GCONF1); + BusComms.WriteRegister(Registers.APDS9960_GCONF1, DefaultValues.DEFAULT_GCONF1); SetGestureGain(DefaultValues.DEFAULT_GGAIN); @@ -189,12 +189,12 @@ void Initialize() SetGestureWaitTime(DefaultValues.DEFAULT_GWTIME); - Peripheral.WriteRegister(Registers.APDS9960_GOFFSET_U, DefaultValues.DEFAULT_GOFFSET); - Peripheral.WriteRegister(Registers.APDS9960_GOFFSET_D, DefaultValues.DEFAULT_GOFFSET); - Peripheral.WriteRegister(Registers.APDS9960_GOFFSET_L, DefaultValues.DEFAULT_GOFFSET); - Peripheral.WriteRegister(Registers.APDS9960_GOFFSET_R, DefaultValues.DEFAULT_GOFFSET); - Peripheral.WriteRegister(Registers.APDS9960_GPULSE, DefaultValues.DEFAULT_GPULSE); - Peripheral.WriteRegister(Registers.APDS9960_GCONF3, DefaultValues.DEFAULT_GCONF3); + BusComms.WriteRegister(Registers.APDS9960_GOFFSET_U, DefaultValues.DEFAULT_GOFFSET); + BusComms.WriteRegister(Registers.APDS9960_GOFFSET_D, DefaultValues.DEFAULT_GOFFSET); + BusComms.WriteRegister(Registers.APDS9960_GOFFSET_L, DefaultValues.DEFAULT_GOFFSET); + BusComms.WriteRegister(Registers.APDS9960_GOFFSET_R, DefaultValues.DEFAULT_GOFFSET); + BusComms.WriteRegister(Registers.APDS9960_GPULSE, DefaultValues.DEFAULT_GPULSE); + BusComms.WriteRegister(Registers.APDS9960_GCONF3, DefaultValues.DEFAULT_GCONF3); SetGestureIntEnable(DefaultValues.DEFAULT_GIEN); } @@ -205,7 +205,7 @@ void Initialize() */ byte GetMode() { - return Peripheral.ReadRegister(Registers.APDS9960_ENABLE); + return BusComms.ReadRegister(Registers.APDS9960_ENABLE); } /** @@ -253,7 +253,7 @@ void SetMode(byte mode, byte enable) } /* Write value back to ENABLE register */ - Peripheral.WriteRegister(Registers.APDS9960_ENABLE, reg_val); + BusComms.WriteRegister(Registers.APDS9960_ENABLE, reg_val); } /// @@ -325,8 +325,8 @@ Set AUX to LED_BOOST_100 Enable PON, WEN, PEN, GEN in ENABLE */ ResetGestureParameters(); - Peripheral.WriteRegister(Registers.APDS9960_WTIME, 0xFF); - Peripheral.WriteRegister(Registers.APDS9960_PPULSE, DefaultValues.DEFAULT_GESTURE_PPULSE); + BusComms.WriteRegister(Registers.APDS9960_WTIME, 0xFF); + BusComms.WriteRegister(Registers.APDS9960_PPULSE, DefaultValues.DEFAULT_GESTURE_PPULSE); SetLEDBoost(GainValues.LED_BOOST_100); @@ -358,7 +358,7 @@ public void DisableGestureSensor() /// True if available public bool IsGestureAvailable() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GSTATUS); + byte val = BusComms.ReadRegister(Registers.APDS9960_GSTATUS); /* Shift and mask out GVALID bit */ val &= BitFields.APDS9960_GVALID; @@ -389,19 +389,19 @@ public Direction ReadGesture() /* Wait some time to collect next batch of FIFO data */ Thread.Sleep(FIFO_PAUSE_TIME); - var gstatus = Peripheral.ReadRegister(Registers.APDS9960_GSTATUS); + var gstatus = BusComms.ReadRegister(Registers.APDS9960_GSTATUS); /* If we have valid data, read in FIFO */ if ((gstatus & BitFields.APDS9960_GVALID) == BitFields.APDS9960_GVALID) { - fifo_level = Peripheral.ReadRegister(Registers.APDS9960_GFLVL); + fifo_level = BusComms.ReadRegister(Registers.APDS9960_GFLVL); /* If there's stuff in the FIFO, read it into our data block */ if (fifo_level > 0) { byte len = (byte)(fifo_level * 4); - Peripheral.ReadRegister(Registers.APDS9960_GFIFO_U, readBuffer.Span[0..len]); + BusComms.ReadRegister(Registers.APDS9960_GFIFO_U, readBuffer.Span[0..len]); Resolver.Log.Info(BitConverter.ToString(readBuffer.Span[0..len].ToArray())); @@ -467,9 +467,9 @@ public void EnablePower(bool enable) /// protected ushort ReadAmbientLight() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CDATAL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CDATAL); - byte val_byte = Peripheral.ReadRegister(Registers.APDS9960_CDATAH); + byte val_byte = BusComms.ReadRegister(Registers.APDS9960_CDATAH); return (ushort)(val + (val_byte << 8)); } @@ -480,9 +480,9 @@ protected ushort ReadAmbientLight() /// protected ushort ReadRedLight() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_RDATAL); + byte val = BusComms.ReadRegister(Registers.APDS9960_RDATAL); - byte val_byte = Peripheral.ReadRegister(Registers.APDS9960_RDATAH); + byte val_byte = BusComms.ReadRegister(Registers.APDS9960_RDATAH); return (ushort)(val + (val_byte << 8)); } @@ -493,9 +493,9 @@ protected ushort ReadRedLight() /// protected ushort ReadGreenLight() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GDATAL); + byte val = BusComms.ReadRegister(Registers.APDS9960_GDATAL); - byte val_byte = Peripheral.ReadRegister(Registers.APDS9960_GDATAH); + byte val_byte = BusComms.ReadRegister(Registers.APDS9960_GDATAH); return (ushort)(val + (val_byte << 8)); } @@ -506,9 +506,9 @@ protected ushort ReadGreenLight() /// protected ushort ReadBlueLight() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_BDATAL); + byte val = BusComms.ReadRegister(Registers.APDS9960_BDATAL); - byte val_byte = Peripheral.ReadRegister(Registers.APDS9960_BDATAH); + byte val_byte = BusComms.ReadRegister(Registers.APDS9960_BDATAH); return (ushort)(val + (val_byte << 8)); } @@ -519,7 +519,7 @@ protected ushort ReadBlueLight() /// public byte ReadProximity() { - return Peripheral.ReadRegister(Registers.APDS9960_PDATA); + return BusComms.ReadRegister(Registers.APDS9960_PDATA); } /// @@ -810,7 +810,7 @@ bool DecodeGesture() */ public byte GetProxIntLowThresh() { - return Peripheral.ReadRegister(Registers.APDS9960_PILT); + return BusComms.ReadRegister(Registers.APDS9960_PILT); } /** @@ -821,7 +821,7 @@ public byte GetProxIntLowThresh() */ public void SetProxIntLowThresh(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_PILT, threshold); + BusComms.WriteRegister(Registers.APDS9960_PILT, threshold); } /** @@ -831,7 +831,7 @@ public void SetProxIntLowThresh(byte threshold) */ public byte GetProxIntHighThresh() { - return Peripheral.ReadRegister(Registers.APDS9960_PIHT); + return BusComms.ReadRegister(Registers.APDS9960_PIHT); } /** @@ -842,7 +842,7 @@ public byte GetProxIntHighThresh() */ public void SetProxIntHighThresh(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_PIHT, threshold); + BusComms.WriteRegister(Registers.APDS9960_PIHT, threshold); } /** @@ -858,7 +858,7 @@ public void SetProxIntHighThresh(byte threshold) */ public byte GetLEDDrive() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Shift and mask out LED drive bits */ val = (byte)((val >> 6) & 0b00000011); @@ -880,7 +880,7 @@ public byte GetLEDDrive() */ public bool SetLEDDrive(byte drive) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Set bits in register to given value */ drive &= 0b00000011; @@ -889,7 +889,7 @@ public bool SetLEDDrive(byte drive) val |= drive; /* Write register value back into CONTROL register */ - Peripheral.WriteRegister(Registers.APDS9960_CONTROL, val); + BusComms.WriteRegister(Registers.APDS9960_CONTROL, val); return true; } @@ -907,7 +907,7 @@ public bool SetLEDDrive(byte drive) */ public byte GetProximityGain() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Shift and mask out PDRIVE bits */ val = (byte)((val >> 2) & 0b00000011); @@ -929,7 +929,7 @@ public byte GetProximityGain() */ public void SetProximityGain(byte drive) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Set bits in register to given value */ drive &= 0b00000011; @@ -938,7 +938,7 @@ public void SetProximityGain(byte drive) val |= drive; /* Write register value back into CONTROL register */ - Peripheral.WriteRegister(Registers.APDS9960_CONTROL, val); + BusComms.WriteRegister(Registers.APDS9960_CONTROL, val); } /** @@ -954,7 +954,7 @@ public void SetProximityGain(byte drive) */ byte GetAmbientLightGain() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Shift and mask out ADRIVE bits */ val &= 0b00000011; @@ -976,13 +976,13 @@ byte GetAmbientLightGain() */ void SetAmbientLightGain(byte drive) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); drive &= 0b00000011; val &= 0b11111100; val |= drive; - Peripheral.WriteRegister(Registers.APDS9960_CONTROL, val); + BusComms.WriteRegister(Registers.APDS9960_CONTROL, val); } /** @@ -998,7 +998,7 @@ void SetAmbientLightGain(byte drive) */ byte GetLEDBoost() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONTROL); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONTROL); /* Shift and mask out LED_BOOST bits */ val = (byte)((val >> 4) & 0b00000011); @@ -1020,7 +1020,7 @@ byte GetLEDBoost() */ void SetLEDBoost(byte boost) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONFIG2); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONFIG2); /* Set bits in register to given value */ boost &= 0b00000011; @@ -1028,7 +1028,7 @@ void SetLEDBoost(byte boost) val &= 0b11001111; val |= boost; - Peripheral.WriteRegister(Registers.APDS9960_CONFIG2, val); + BusComms.WriteRegister(Registers.APDS9960_CONFIG2, val); } /** @@ -1038,7 +1038,7 @@ void SetLEDBoost(byte boost) */ byte GetProxGainCompEnable() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONFIG3); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONFIG3); /* Shift and mask out PCMP bits */ val = (byte)((val >> 5) & 0b00000001); @@ -1054,7 +1054,7 @@ byte GetProxGainCompEnable() */ void SetProxGainCompEnable(byte enable) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONFIG3); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONFIG3); /* Set bits in register to given value */ enable &= 0b00000001; @@ -1063,7 +1063,7 @@ void SetProxGainCompEnable(byte enable) val |= enable; /* Write register value back into CONFIG3 register */ - Peripheral.WriteRegister(Registers.APDS9960_CONFIG3, val); + BusComms.WriteRegister(Registers.APDS9960_CONFIG3, val); } /** @@ -1080,7 +1080,7 @@ void SetProxGainCompEnable(byte enable) */ byte GetProxPhotoMask() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONFIG3); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONFIG3); /* Mask out photodiode enable mask bits */ val &= 0b00001111; @@ -1103,14 +1103,14 @@ byte GetProxPhotoMask() */ void SetProxPhotoMask(byte mask) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_CONFIG3); + byte val = BusComms.ReadRegister(Registers.APDS9960_CONFIG3); /* Set bits in register to given value */ mask &= 0b00001111; val &= 0b11110000; val |= mask; - Peripheral.WriteRegister(Registers.APDS9960_CONFIG3, val); + BusComms.WriteRegister(Registers.APDS9960_CONFIG3, val); } /** @@ -1120,7 +1120,7 @@ void SetProxPhotoMask(byte mask) */ byte GetGestureEnterThresh() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GPENTH); + byte val = BusComms.ReadRegister(Registers.APDS9960_GPENTH); return val; } @@ -1133,7 +1133,7 @@ byte GetGestureEnterThresh() */ void SetGestureEnterThresh(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_GPENTH, threshold); + BusComms.WriteRegister(Registers.APDS9960_GPENTH, threshold); } /** @@ -1143,7 +1143,7 @@ void SetGestureEnterThresh(byte threshold) */ byte GetGestureExitThresh() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GEXTH); + byte val = BusComms.ReadRegister(Registers.APDS9960_GEXTH); return val; } @@ -1156,7 +1156,7 @@ byte GetGestureExitThresh() */ void SetGestureExitThresh(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_GEXTH, threshold); + BusComms.WriteRegister(Registers.APDS9960_GEXTH, threshold); } /** @@ -1172,7 +1172,7 @@ void SetGestureExitThresh(byte threshold) */ byte GetGestureGain() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Shift and mask out GGAIN bits */ val = (byte)((val >> 5) & 0b00000011); @@ -1194,7 +1194,7 @@ byte GetGestureGain() */ void SetGestureGain(byte gain) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Set bits in register to given value */ gain &= 0b00000011; @@ -1203,7 +1203,7 @@ void SetGestureGain(byte gain) val |= gain; /* Write register value back into GCONF2 register */ - Peripheral.WriteRegister(Registers.APDS9960_GCONF2, val); + BusComms.WriteRegister(Registers.APDS9960_GCONF2, val); } /** @@ -1220,7 +1220,7 @@ void SetGestureGain(byte gain) byte GetGestureLEDDrive() { /* Read value from GCONF2 register */ - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Shift and mask out GLDRIVE bits */ val = (byte)((val >> 3) & 0b00000011); @@ -1242,7 +1242,7 @@ byte GetGestureLEDDrive() */ void SetGestureLEDDrive(byte drive) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Set bits in register to given value */ drive &= 0b00000011; @@ -1250,7 +1250,7 @@ void SetGestureLEDDrive(byte drive) val &= 0b11100111; val |= drive; - Peripheral.WriteRegister(Registers.APDS9960_GCONF2, val); + BusComms.WriteRegister(Registers.APDS9960_GCONF2, val); } /** @@ -1270,7 +1270,7 @@ void SetGestureLEDDrive(byte drive) */ byte GetGestureWaitTime() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Mask out GWTIME bits */ val &= 0b00000111; @@ -1296,14 +1296,14 @@ byte GetGestureWaitTime() */ void SetGestureWaitTime(byte time) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF2); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF2); /* Set bits in register to given value */ time &= 0b00000111; val &= 0b11111000; val |= time; - Peripheral.WriteRegister(Registers.APDS9960_GCONF2, val); + BusComms.WriteRegister(Registers.APDS9960_GCONF2, val); } /** @@ -1314,9 +1314,9 @@ void SetGestureWaitTime(byte time) */ ushort GetLightIntLowThreshold() { - var threshold = Peripheral.ReadRegister(Registers.APDS9960_AILTL); + var threshold = BusComms.ReadRegister(Registers.APDS9960_AILTL); - var val_byte = Peripheral.ReadRegister(Registers.APDS9960_AILTH); + var val_byte = BusComms.ReadRegister(Registers.APDS9960_AILTH); return (byte)(threshold + (val_byte << 8)); } @@ -1336,8 +1336,8 @@ void SetLightIntLowThreshold(ushort threshold) val_low = (byte)(threshold & 0x00FF); val_high = (byte)((threshold & 0xFF00) >> 8); - Peripheral.WriteRegister(Registers.APDS9960_AILTL, val_low); - Peripheral.WriteRegister(Registers.APDS9960_AILTL, val_high); + BusComms.WriteRegister(Registers.APDS9960_AILTL, val_low); + BusComms.WriteRegister(Registers.APDS9960_AILTL, val_high); } /** @@ -1348,9 +1348,9 @@ void SetLightIntLowThreshold(ushort threshold) */ ushort GetLightIntHighThreshold() { - var threshold = Peripheral.ReadRegister(Registers.APDS9960_AIHTL); + var threshold = BusComms.ReadRegister(Registers.APDS9960_AIHTL); - var val_byte = Peripheral.ReadRegister(Registers.APDS9960_AIHTH); + var val_byte = BusComms.ReadRegister(Registers.APDS9960_AIHTH); return (byte)(threshold + (val_byte << 8)); } @@ -1367,8 +1367,8 @@ void SetLightIntHighThreshold(ushort threshold) byte val_low = (byte)(threshold & 0x00FF); byte val_high = (byte)((threshold & 0xFF00) >> 8); - Peripheral.WriteRegister(Registers.APDS9960_AIHTL, val_low); - Peripheral.WriteRegister(Registers.APDS9960_AIHTH, val_high); + BusComms.WriteRegister(Registers.APDS9960_AIHTL, val_low); + BusComms.WriteRegister(Registers.APDS9960_AIHTH, val_high); } /** @@ -1379,7 +1379,7 @@ void SetLightIntHighThreshold(ushort threshold) */ byte GetProximityIntLowThreshold() { - return Peripheral.ReadRegister(Registers.APDS9960_PILT); + return BusComms.ReadRegister(Registers.APDS9960_PILT); } /** @@ -1390,7 +1390,7 @@ byte GetProximityIntLowThreshold() */ void SetProximityIntLowThreshold(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_PILT, threshold); + BusComms.WriteRegister(Registers.APDS9960_PILT, threshold); } /** @@ -1401,7 +1401,7 @@ void SetProximityIntLowThreshold(byte threshold) */ byte GetProximityIntHighThreshold() { - return Peripheral.ReadRegister(Registers.APDS9960_PIHT); + return BusComms.ReadRegister(Registers.APDS9960_PIHT); } /** @@ -1412,7 +1412,7 @@ byte GetProximityIntHighThreshold() */ void SetProximityIntHighThreshold(byte threshold) { - Peripheral.WriteRegister(Registers.APDS9960_PIHT, threshold); + BusComms.WriteRegister(Registers.APDS9960_PIHT, threshold); } /** @@ -1422,7 +1422,7 @@ void SetProximityIntHighThreshold(byte threshold) */ byte GetAmbientLightIntEnable() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_ENABLE); + byte val = BusComms.ReadRegister(Registers.APDS9960_ENABLE); /* Shift and mask out AIEN bit */ val = (byte)((val >> 4) & 0b00000001); @@ -1438,7 +1438,7 @@ byte GetAmbientLightIntEnable() */ void SetAmbientLightIntEnable(bool enable) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_ENABLE); + byte val = BusComms.ReadRegister(Registers.APDS9960_ENABLE); /* Set bits in register to given value */ byte data = (byte)(enable ? 0x1 : 0x0); @@ -1447,7 +1447,7 @@ void SetAmbientLightIntEnable(bool enable) val &= 0b11101111; val |= data; - Peripheral.WriteRegister(Registers.APDS9960_ENABLE, val); + BusComms.WriteRegister(Registers.APDS9960_ENABLE, val); } /** @@ -1457,7 +1457,7 @@ void SetAmbientLightIntEnable(bool enable) */ byte GetProximityIntEnable() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_ENABLE); + byte val = BusComms.ReadRegister(Registers.APDS9960_ENABLE); /* Shift and mask out PIEN bit */ val = (byte)((val >> 5) & 0b00000001); @@ -1473,7 +1473,7 @@ byte GetProximityIntEnable() */ void SetProximityIntEnable(byte enable) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_ENABLE); + byte val = BusComms.ReadRegister(Registers.APDS9960_ENABLE); /* Set bits in register to given value */ enable &= 0b00000001; @@ -1481,7 +1481,7 @@ void SetProximityIntEnable(byte enable) val &= 0b11011111; val |= enable; - Peripheral.WriteRegister(Registers.APDS9960_ENABLE, val); + BusComms.WriteRegister(Registers.APDS9960_ENABLE, val); } /** @@ -1491,7 +1491,7 @@ void SetProximityIntEnable(byte enable) */ byte GetGestureIntEnable() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF4); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF4); /* Shift and mask out GIEN bit */ val = (byte)((val >> 1) & 0b00000001); @@ -1507,7 +1507,7 @@ byte GetGestureIntEnable() */ void SetGestureIntEnable(byte enable) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF4); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF4); /* Set bits in register to given value */ enable &= 0b00000001; @@ -1515,7 +1515,7 @@ void SetGestureIntEnable(byte enable) val &= 0b11111101; val |= enable; - Peripheral.WriteRegister(Registers.APDS9960_GCONF4, val); + BusComms.WriteRegister(Registers.APDS9960_GCONF4, val); } /** @@ -1525,7 +1525,7 @@ void SetGestureIntEnable(byte enable) */ void ClearAmbientLightInt() { - Peripheral.WriteRegister(Registers.APDS9960_AICLEAR, 0); + BusComms.WriteRegister(Registers.APDS9960_AICLEAR, 0); } /** @@ -1535,7 +1535,7 @@ void ClearAmbientLightInt() */ void ClearProximityInt() { - Peripheral.WriteRegister(Registers.APDS9960_PICLEAR, 0); + BusComms.WriteRegister(Registers.APDS9960_PICLEAR, 0); } /** @@ -1545,7 +1545,7 @@ void ClearProximityInt() */ byte GetGestureMode() { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF4); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF4); /* Mask out GMODE bit */ val &= 0b00000001; @@ -1561,14 +1561,14 @@ byte GetGestureMode() */ void SetGestureMode(byte mode) { - byte val = Peripheral.ReadRegister(Registers.APDS9960_GCONF4); + byte val = BusComms.ReadRegister(Registers.APDS9960_GCONF4); /* Set bits in register to given value */ mode &= 0b00000001; val &= 0b11111110; val |= mode; - Peripheral.WriteRegister(Registers.APDS9960_GCONF4, val); + BusComms.WriteRegister(Registers.APDS9960_GCONF4, val); } /* Container for gesture data */ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs index d695ebd9bd..645569aa8b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs @@ -32,7 +32,7 @@ public enum ErrorCodes : byte NoError = 0x00, /// - /// Peripheral initialization error. + /// BusComms initialization error. /// PeripheralInitializationError = 0x01, @@ -93,7 +93,7 @@ public enum SystemStatusCodes : byte SystemError = 0x01, /// - /// Peripheral initialization in progess. + /// BusComms initialization in progess. /// PeripheralInitializationInProgess = 0x02, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Registers.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Registers.cs index 25f52154fb..76736732e6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Registers.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Registers.cs @@ -532,7 +532,7 @@ private static class Registers /// /// Indicates the type of error (if any) that has occurred. /// 0: No error - /// 1: Peripheral initialization error + /// 1: BusComms initialization error /// 2: System initialization error /// 3: Self test failed /// 4: Register map value out of range diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs index ae65db1b5a..bcb9f3ddb1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs @@ -137,13 +137,13 @@ public Sensor TemperatureSource { get { - return (Sensor)Peripheral.ReadRegister(Registers.TemperatureSource); + return (Sensor)BusComms.ReadRegister(Registers.TemperatureSource); } set { if ((value == Sensor.Accelerometer) || (value == Sensor.Gyroscope)) { - Peripheral.WriteRegister(Registers.TemperatureSource, (byte)value); + BusComms.WriteRegister(Registers.TemperatureSource, (byte)value); } else { @@ -157,10 +157,10 @@ public Sensor TemperatureSource /// public byte PowerMode { - get => Peripheral.ReadRegister(Registers.PowerMode); + get => BusComms.ReadRegister(Registers.PowerMode); set { - Peripheral.WriteRegister(Registers.PowerMode, value); + BusComms.WriteRegister(Registers.PowerMode, value); Thread.Sleep(15); } } @@ -173,14 +173,14 @@ public byte PowerMode /// public byte OperatingMode { - get => Peripheral.ReadRegister(Registers.OperatingMode); + get => BusComms.ReadRegister(Registers.OperatingMode); set { if (value > OperatingModes.MAXIMUM_VALUE) { throw new ArgumentOutOfRangeException(); } - Peripheral.WriteRegister(Registers.OperatingMode, value); + BusComms.WriteRegister(Registers.OperatingMode, value); Thread.Sleep(20); } } @@ -197,14 +197,14 @@ public byte OperatingMode /// private byte Page { - get => Peripheral.ReadRegister(Registers.PageID); + get => BusComms.ReadRegister(Registers.PageID); set { if ((value != 0) && (value != 1)) { throw new ArgumentOutOfRangeException(); } - Peripheral.WriteRegister(Registers.PageID, value); + BusComms.WriteRegister(Registers.PageID, value); } } @@ -220,22 +220,22 @@ private byte Page /// /// Get the system calibration status. /// - public bool IsSystemCalibrated => ((Peripheral.ReadRegister(Registers.CalibrationStatus) >> 6) & 0x03) != 0; + public bool IsSystemCalibrated => ((BusComms.ReadRegister(Registers.CalibrationStatus) >> 6) & 0x03) != 0; /// /// Get the accelerometer calibration status. /// - public bool IsAccelerometerCalibrated => ((Peripheral.ReadRegister(Registers.CalibrationStatus) >> 2) & 0x03) != 0; + public bool IsAccelerometerCalibrated => ((BusComms.ReadRegister(Registers.CalibrationStatus) >> 2) & 0x03) != 0; /// /// Get the gyroscope calibration status. /// - public bool IsGyroscopeCalibrated => ((Peripheral.ReadRegister(Registers.CalibrationStatus) >> 4) & 0x03) != 0; + public bool IsGyroscopeCalibrated => ((BusComms.ReadRegister(Registers.CalibrationStatus) >> 4) & 0x03) != 0; /// /// Get the magnetometer status. /// - public bool IsMagnetometerCalibrated => (Peripheral.ReadRegister(Registers.CalibrationStatus) & 0x03) != 0; + public bool IsMagnetometerCalibrated => (BusComms.ReadRegister(Registers.CalibrationStatus) & 0x03) != 0; /// /// Is the system fully calibrated? @@ -265,7 +265,7 @@ public Bno055(II2cBus i2cBus, Addresses address = Addresses.Default) public Bno055(II2cBus i2cBus, byte address) : base(i2cBus, address, readBufferSize: 256) { - var id = Peripheral.ReadRegister(Registers.ChipID); + var id = BusComms.ReadRegister(Registers.ChipID); if (id != 0xa0) { @@ -326,7 +326,7 @@ protected override Task< // in order to get the correct offset into the _sensorReadings array. int length = Registers.GravityVectorZMSB + 1 - Registers.AccelerometerXLSB; - Peripheral.ReadRegister(Registers.AccelerometerXLSB, ReadBuffer.Span[0..length]); + BusComms.ReadRegister(Registers.AccelerometerXLSB, ReadBuffer.Span[0..length]); // for debugging, you can look at the raw data: //DebugInformation.DisplayRegisters(0x00, ReadBuffer.Span[0..length].ToArray()); @@ -369,7 +369,7 @@ protected override Task< conditions.EulerOrientation = ConvertReadingToEulerAngles(Registers.EulerAngleXLSB - Registers.StartOfSensorData, eulerDivisor); //---- temperature - conditions.Temperature = new Units.Temperature(Peripheral.ReadRegister(Registers.Temperature), Units.Temperature.UnitType.Celsius); + conditions.Temperature = new Units.Temperature(BusComms.ReadRegister(Registers.Temperature), Units.Temperature.UnitType.Celsius); return Task.FromResult(conditions); } @@ -457,7 +457,7 @@ public void DisplayRegisters() int length = 0x6A; byte[] buffer = new byte[length]; - Peripheral.ReadRegister(Registers.ChipID, buffer); + BusComms.ReadRegister(Registers.ChipID, buffer); DebugInformation.DisplayRegisters(0x00, buffer); Resolver.Log.Info("== /REGISTERS ======================================================================="); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index 92df6b6cfb..6d433e63f7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -74,9 +74,9 @@ protected virtual void Initialize() byte configA = (byte)(sampleAmount | (outputRate << 2) | measurementConfig); byte configB = (byte)(gain << 5); - Peripheral.WriteRegister(Registers.HMC_CONFIG_REG_A_ADDR, configA); - Peripheral.WriteRegister(Registers.HMC_CONFIG_REG_B_ADDR, configB); - Peripheral.WriteRegister(Registers.HMC_MODE_REG_ADDR, measuringMode); + BusComms.WriteRegister(Registers.HMC_CONFIG_REG_A_ADDR, configA); + BusComms.WriteRegister(Registers.HMC_CONFIG_REG_B_ADDR, configB); + BusComms.WriteRegister(Registers.HMC_MODE_REG_ADDR, measuringMode); } /// @@ -95,9 +95,9 @@ protected override void RaiseEventsAndNotify(IChangeResult changeResult) /// The latest sensor reading protected override Task ReadSensor() { - ushort x = Peripheral.ReadRegisterAsUShort(Registers.HMC_X_MSB_REG_ADDR, ByteOrder.BigEndian); - ushort y = Peripheral.ReadRegisterAsUShort(Registers.HMC_Y_MSB_REG_ADDR, ByteOrder.BigEndian); - ushort z = Peripheral.ReadRegisterAsUShort(Registers.HMC_Z_MSB_REG_ADDR, ByteOrder.BigEndian); + ushort x = BusComms.ReadRegisterAsUShort(Registers.HMC_X_MSB_REG_ADDR, ByteOrder.BigEndian); + ushort y = BusComms.ReadRegisterAsUShort(Registers.HMC_Y_MSB_REG_ADDR, ByteOrder.BigEndian); + ushort z = BusComms.ReadRegisterAsUShort(Registers.HMC_Z_MSB_REG_ADDR, ByteOrder.BigEndian); return Task.FromResult(new Vector(x, y, z)); } @@ -123,8 +123,8 @@ public static Azimuth DirectionToHeading(Vector direction) /// private Statuses GetStatus() { - Peripheral.Write(Registers.HMC_STATUS_REG_ADDR); - Peripheral.Read(ReadBuffer.Span[0..1]); + BusComms.Write(Registers.HMC_STATUS_REG_ADDR); + BusComms.Read(ReadBuffer.Span[0..1]); return (Statuses)ReadBuffer.Span[0]; } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs index d36cd4dd52..38414c3217 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs @@ -36,16 +36,16 @@ public Qmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Qmc5883, /// override protected void Initialize() { - Peripheral.WriteRegister(0x0B, 0x01); + BusComms.WriteRegister(0x0B, 0x01); Thread.Sleep(50); - Peripheral.WriteRegister(0x20, 0x40); + BusComms.WriteRegister(0x20, 0x40); Thread.Sleep(50); - Peripheral.WriteRegister(0x21, 0x01); + BusComms.WriteRegister(0x21, 0x01); Thread.Sleep(50); - Peripheral.WriteRegister(0x09, 0x0D); + BusComms.WriteRegister(0x09, 0x0D); } /// @@ -54,7 +54,7 @@ override protected void Initialize() /// The latest sensor reading protected override Task ReadSensor() { - Peripheral.ReadRegister(0x00, ReadBuffer.Span[0..6]); + BusComms.ReadRegister(0x00, ReadBuffer.Span[0..6]); ushort X = (ushort)(ReadBuffer.Span[0] | ReadBuffer.Span[1] << 8); ushort Y = (ushort)(ReadBuffer.Span[2] | ReadBuffer.Span[3] << 8); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs index 0e35477069..ad22481f6d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs @@ -52,12 +52,12 @@ public bool Standby { get { - var controlRegister = Peripheral.ReadRegister(Registers.CONTROL_1); + var controlRegister = BusComms.ReadRegister(Registers.CONTROL_1); return (controlRegister & 0x03) == 0; } set { - var controlRegister = Peripheral.ReadRegister(Registers.CONTROL_1); + var controlRegister = BusComms.ReadRegister(Registers.CONTROL_1); if (value) { controlRegister &= 0xfc; // ~0x03 @@ -66,7 +66,7 @@ public bool Standby { controlRegister |= 0x01; } - Peripheral.WriteRegister(Registers.CONTROL_1, controlRegister); + BusComms.WriteRegister(Registers.CONTROL_1, controlRegister); } } @@ -76,7 +76,7 @@ public bool Standby /// /// See section 5.1.1 of the datasheet. /// - public bool IsDataReady => (Peripheral.ReadRegister(Registers.DR_STATUS) & 0x08) > 0; + public bool IsDataReady => (BusComms.ReadRegister(Registers.DR_STATUS) & 0x08) > 0; /// @@ -93,7 +93,7 @@ public bool DigitalInputsEnabled set { Standby = true; - var cr2 = Peripheral.ReadRegister(Registers.CONTROL_2); + var cr2 = BusComms.ReadRegister(Registers.CONTROL_2); if (value) { cr2 |= 0x80; @@ -102,7 +102,7 @@ public bool DigitalInputsEnabled { cr2 &= 0x7f; } - Peripheral.WriteRegister(Registers.CONTROL_2, cr2); + BusComms.WriteRegister(Registers.CONTROL_2, cr2); digitalInputsEnabled = value; } } @@ -117,7 +117,7 @@ public bool DigitalInputsEnabled public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Addresses.Default) : base(i2cBus, address) { - var deviceID = Peripheral.ReadRegister(Registers.WHO_AM_I); + var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); if (deviceID != 0xc4) { throw new Exception("Unknown device ID, " + deviceID + " retruend, 0xc4 expected"); @@ -137,13 +137,13 @@ public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte addr public void Reset() { Standby = true; - Peripheral.WriteRegister(Registers.CONTROL_1, 0x00); - Peripheral.WriteRegister(Registers.CONTROL_2, 0x80); + BusComms.WriteRegister(Registers.CONTROL_1, 0x00); + BusComms.WriteRegister(Registers.CONTROL_2, 0x80); WriteBuffer.Span[0] = Registers.X_OFFSET_MSB; WriteBuffer.Span[1] = WriteBuffer.Span[2] = WriteBuffer.Span[3] = 0; WriteBuffer.Span[4] = WriteBuffer.Span[5] = WriteBuffer.Span[6] = 0; - Peripheral.Write(WriteBuffer.Span[0..7]); + BusComms.Write(WriteBuffer.Span[0..7]); } /// @@ -171,11 +171,11 @@ protected override void RaiseEventsAndNotify(IChangeResult<(MagneticField3D? Mag { (MagneticField3D? MagneticField3D, Units.Temperature? Temperature) conditions; - var controlRegister = Peripheral.ReadRegister(Registers.CONTROL_1); + var controlRegister = BusComms.ReadRegister(Registers.CONTROL_1); controlRegister |= 0x02; - Peripheral.WriteRegister(Registers.CONTROL_1, controlRegister); + BusComms.WriteRegister(Registers.CONTROL_1, controlRegister); - Peripheral.ReadRegister(Registers.X_MSB, ReadBuffer.Span[0..6]); + BusComms.ReadRegister(Registers.X_MSB, ReadBuffer.Span[0..6]); conditions.MagneticField3D = new MagneticField3D( new MagneticField((short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]), MagneticField.UnitType.MicroTesla), @@ -183,7 +183,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(MagneticField3D? Mag new MagneticField((short)((ReadBuffer.Span[4] << 8) | ReadBuffer.Span[5]), MagneticField.UnitType.MicroTesla) ); - conditions.Temperature = new Units.Temperature((sbyte)Peripheral.ReadRegister(Registers.TEMPERATURE), Units.Temperature.UnitType.Celsius); + conditions.Temperature = new Units.Temperature((sbyte)BusComms.ReadRegister(Registers.TEMPERATURE), Units.Temperature.UnitType.Celsius); return Task.FromResult(conditions); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs index 8675a2bbfd..87e3733f62 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs @@ -61,7 +61,7 @@ void Initialize() void SetMode(SensorPowerMode mode) { - Peripheral.WriteRegister((byte)Registers.Mode, (byte)mode); + BusComms.WriteRegister((byte)Registers.Mode, (byte)mode); } /// @@ -70,7 +70,7 @@ void SetMode(SensorPowerMode mode) /// sample rate public void SetSampleRate(SampleRate rate) { - Peripheral.WriteRegister((byte)Registers.SleepRate, (byte)rate); + BusComms.WriteRegister((byte)Registers.SleepRate, (byte)rate); } /// @@ -81,9 +81,9 @@ protected override Task ReadSensor() { return Task.Run(() => { - Direction = (DirectionType)(Peripheral.ReadRegister((byte)Registers.TILT) & 0x1C); + Direction = (DirectionType)(BusComms.ReadRegister((byte)Registers.TILT) & 0x1C); - Orientation = (OrientationType)(Peripheral.ReadRegister((byte)Registers.TILT) & 0x03); + Orientation = (OrientationType)(BusComms.ReadRegister((byte)Registers.TILT) & 0x03); int xAccel, yAccel, zAccel; byte x, y, z; @@ -93,7 +93,7 @@ protected override Task ReadSensor() //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again do { - x = Peripheral.ReadRegister((byte)Registers.XOUT); + x = BusComms.ReadRegister((byte)Registers.XOUT); } while (x >= 64); //check bit 5 and flip to negative @@ -102,7 +102,7 @@ protected override Task ReadSensor() do { - y = Peripheral.ReadRegister((byte)Registers.YOUT); + y = BusComms.ReadRegister((byte)Registers.YOUT); } while (y >= 64); //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again if ((y & (1 << 5)) != 0) yAccel = y - 64; @@ -111,7 +111,7 @@ protected override Task ReadSensor() //ensure bit 6 isn't set - if so, it means there was a read/write collision ... try again do { - z = Peripheral.ReadRegister((byte)Registers.ZOUT); + z = BusComms.ReadRegister((byte)Registers.ZOUT); } while (y >= 64); if ((z & (1 << 5)) != 0) zAccel = z - 64; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs index b85117ff14..fa379e9648 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs @@ -29,7 +29,7 @@ public partial class Mmc5603 : /// public bool ContinuousModeEnabled { - get => (Peripheral.ReadRegister(Registers.CONTROL_2) & 0x10) == 1; + get => (BusComms.ReadRegister(Registers.CONTROL_2) & 0x10) == 1; set => SetContinuousMode(value); } @@ -41,7 +41,7 @@ public bool ContinuousModeEnabled public Mmc5603(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, 10, 8) { - var deviceID = Peripheral.ReadRegister(Registers.WHO_AM_I); + var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); if (deviceID != 0x10) { @@ -67,9 +67,9 @@ public void Reset() void SetRegisterBit(byte register, byte bitIndex, bool enabled = true) { - var value = Peripheral.ReadRegister(register); + var value = BusComms.ReadRegister(register); value = BitHelpers.SetBit(value, bitIndex, enabled); - Peripheral.WriteRegister(register, value); + BusComms.WriteRegister(register, value); } void SetContinuousMode(bool on) @@ -128,7 +128,7 @@ protected override Task ReadSensor() } } - Peripheral.ReadRegister(Registers.OUT_X_L, ReadBuffer.Span[0..9]); //9 bytes + BusComms.ReadRegister(Registers.OUT_X_L, ReadBuffer.Span[0..9]); //9 bytes int x = (int)((uint)(ReadBuffer.Span[0] << 12) | (uint)(ReadBuffer.Span[1] << 4) | (uint)(ReadBuffer.Span[6] >> 4)); int y = (int)((uint)(ReadBuffer.Span[2] << 12) | (uint)(ReadBuffer.Span[3] << 4) | (uint)(ReadBuffer.Span[7] >> 4)); @@ -166,18 +166,18 @@ protected override Task ReadSensor() await TriggerTemperatureReading(); } - return new Units.Temperature((sbyte)Peripheral.ReadRegister(Registers.TEMPERATURE) * 0.8 - 75, Units.Temperature.UnitType.Celsius); + return new Units.Temperature((sbyte)BusComms.ReadRegister(Registers.TEMPERATURE) * 0.8 - 75, Units.Temperature.UnitType.Celsius); } bool IsTemperatureDataReady() { - var value = Peripheral.ReadRegister(Registers.STATUS); + var value = BusComms.ReadRegister(Registers.STATUS); return BitHelpers.GetBitValue(value, 7); } bool IsMagneticDataReady() { - var value = Peripheral.ReadRegister(Registers.STATUS); + var value = BusComms.ReadRegister(Registers.STATUS); return BitHelpers.GetBitValue(value, 6); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs index 23b7051d22..67792dc529 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs @@ -85,7 +85,7 @@ public void Wake() { WriteBuffer.Span[0] = Registers.POWER_MANAGEMENT; WriteBuffer.Span[1] = 0x00; - Peripheral?.Write(WriteBuffer.Span[0..2]); + BusComms?.Write(WriteBuffer.Span[0..2]); LoadConfiguration(); } @@ -96,7 +96,7 @@ public void Wake() protected void LoadConfiguration() { // read all 3 config bytes - Peripheral?.ReadRegister(Registers.CONFIG, ReadBuffer.Span[0..3]); + BusComms?.ReadRegister(Registers.CONFIG, ReadBuffer.Span[0..3]); GyroScale = (ReadBuffer.Span[1] & 0b00011000) >> 3; AccelerometerScale = (ReadBuffer.Span[2] & 0b00011000) >> 3; @@ -132,7 +132,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Acceleration3D? Acce (Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature) conditions; // Read 14 bytes (7 registers), starting at 0x3b - Peripheral?.ReadRegister(Registers.ACCELEROMETER_X, ReadBuffer.Span); + BusComms?.ReadRegister(Registers.ACCELEROMETER_X, ReadBuffer.Span); var a_scale = (1 << AccelerometerScale) / AccelScaleBase; var g_scale = (1 << GyroScale) / GyroScaleBase; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index c12eef8522..dfc3a00e70 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -70,9 +70,9 @@ public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default) { (Units.Power? Power, Voltage? Voltage, Current? Current) conditions; - conditions.Voltage = new Voltage(Peripheral.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); - conditions.Current = new Current(Peripheral.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); - conditions.Power = new Units.Power(Peripheral.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); + conditions.Voltage = new Voltage(BusComms.ReadRegister((byte)Register.Voltage) * MeasurementScale, Units.Voltage.UnitType.Volts); + conditions.Current = new Current(BusComms.ReadRegister((byte)Register.Current) * MeasurementScale, Units.Current.UnitType.Amps); + conditions.Power = new Units.Power(BusComms.ReadRegister((byte)Register.Power) * 0.01f, Units.Power.UnitType.Watts); return Task.FromResult(conditions); } @@ -102,11 +102,11 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Power? Power, /// /// Reads the unique manufacturer identification number /// - public int ManufacturerID => Peripheral.ReadRegister((byte)Register.ManufacturerID); + public int ManufacturerID => BusComms.ReadRegister((byte)Register.ManufacturerID); /// /// Reads the unique die identification number /// - public int DieID => Peripheral.ReadRegister((byte)Register.ManufacturerID); + public int DieID => BusComms.ReadRegister((byte)Register.ManufacturerID); } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs index 1fa8a60299..df56fda667 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs @@ -35,9 +35,9 @@ public Lm75(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected override Task ReadSensor() { - Peripheral?.Write((byte)Registers.LM_TEMP); + BusComms?.Write((byte)Registers.LM_TEMP); - Peripheral?.ReadRegister((byte)Registers.LM_TEMP, ReadBuffer.Span[0..2]); + BusComms?.ReadRegister((byte)Registers.LM_TEMP, ReadBuffer.Span[0..2]); // Details in Datasheet P10 double temp; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs index bc97ba06f4..0ebdf89e86 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs @@ -48,12 +48,12 @@ public abstract partial class Mcp960x : ByteCommsSensorBase<(Units.Temperature? public Mcp960x(II2cBus i2cBus, byte address) : base(i2cBus, address) { - if (Peripheral == null) + if (BusComms == null) { throw new NullReferenceException("Mcp960x peripheral did not initialize"); } - Peripheral.WriteRegister(DEVICECONFIG, 0x80); + BusComms.WriteRegister(DEVICECONFIG, 0x80); } /// @@ -77,7 +77,7 @@ double ReadTemperatureHot() { byte[] readBuffer = new byte[2]; - Peripheral?.ReadRegister(HOTJUNCTION, readBuffer); + BusComms?.ReadRegister(HOTJUNCTION, readBuffer); int rawTemp = (readBuffer[0] << 8) | readBuffer[1]; double temperature = rawTemp * 0.0625; @@ -93,7 +93,7 @@ double ReadTemperatureCold() { byte[] readBuffer = new byte[2]; - Peripheral?.ReadRegister(COLDJUNCTION, readBuffer); + BusComms?.ReadRegister(COLDJUNCTION, readBuffer); int rawTemp = (readBuffer[0] << 8) | readBuffer[1]; double temperature = rawTemp * 0.0625; @@ -107,11 +107,11 @@ double ReadTemperatureCold() /// The thermocouple type to set public void SetThermocoupleType(ThermocoupleType type) { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); config = (byte)((config & 0xF8) | (byte)type); - Peripheral.WriteRegister(SENSORCONFIG, config); + BusComms.WriteRegister(SENSORCONFIG, config); } /// @@ -120,7 +120,7 @@ public void SetThermocoupleType(ThermocoupleType type) /// The currently configured thermocouple type public ThermocoupleType GetThermocoupleType() { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); return (ThermocoupleType)(config & 0x07); } @@ -131,11 +131,11 @@ public ThermocoupleType GetThermocoupleType() /// The ADC resolution to set public void SetAdcResolution(AdcResolution resolution) { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); config = (byte)((config & 0x9F) | ((byte)resolution << 5)); - Peripheral.WriteRegister(SENSORCONFIG, config); + BusComms.WriteRegister(SENSORCONFIG, config); } /// @@ -144,7 +144,7 @@ public void SetAdcResolution(AdcResolution resolution) /// The currently configured ADC resolution public AdcResolution GetAdcResolution() { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); return (AdcResolution)((config & 0x60) >> 5); } @@ -155,11 +155,11 @@ public AdcResolution GetAdcResolution() /// The filter coefficient to set public void SetFilterCoefficient(FilterCoefficient coefficient) { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); config = (byte)((config & 0xF8) | ((byte)coefficient & 0x07)); - Peripheral.WriteRegister(SENSORCONFIG, config); + BusComms.WriteRegister(SENSORCONFIG, config); } /// @@ -168,7 +168,7 @@ public void SetFilterCoefficient(FilterCoefficient coefficient) /// The currently configured filter coefficient public FilterCoefficient GetFilterCoefficient() { - byte config = Peripheral.ReadRegister(SENSORCONFIG); + byte config = BusComms.ReadRegister(SENSORCONFIG); return (FilterCoefficient)(config & 0x07); } @@ -187,7 +187,7 @@ public void SetAlertTemperature(AlertNumber alertNumber, Units.Temperature tempe short tempData = (short)(temperature.Celsius / 0.0625); - Peripheral.WriteRegister((byte)(ALERTLIMIT_1 + ((int)alertNumber - 1) * 2), new byte[] { (byte)(tempData >> 8), (byte)(tempData & 0xFF) }); + BusComms.WriteRegister((byte)(ALERTLIMIT_1 + ((int)alertNumber - 1) * 2), new byte[] { (byte)(tempData >> 8), (byte)(tempData & 0xFF) }); } /// @@ -204,7 +204,7 @@ public Units.Temperature GetAlertTemperature(AlertNumber alertNumber) byte[] readBuffer = new byte[2]; - Peripheral.ReadRegister((byte)(ALERTLIMIT_1 + ((int)alertNumber - 1) * 2), readBuffer); + BusComms.ReadRegister((byte)(ALERTLIMIT_1 + ((int)alertNumber - 1) * 2), readBuffer); ushort tempData = (ushort)((readBuffer[0] << 8) | readBuffer[1]); double temperature = tempData / 16.0; @@ -236,7 +236,7 @@ public void ConfigureAlert(AlertNumber alertNumber, bool enabled, bool rising, b if (rising) configValue |= 0x08; if (alertColdJunction) configValue |= 0x10; - Peripheral.WriteRegister((byte)(ALERTCONFIG_1 + ((int)alertNumber - 1)), configValue); + BusComms.WriteRegister((byte)(ALERTCONFIG_1 + ((int)alertNumber - 1)), configValue); } /// @@ -245,7 +245,7 @@ public void ConfigureAlert(AlertNumber alertNumber, bool enabled, bool rising, b /// True to enable the sensor, false to enter sleep mode public void Enable(bool enable) { - byte config = Peripheral.ReadRegister(DEVICECONFIG); + byte config = BusComms.ReadRegister(DEVICECONFIG); config &= 0b1111_1100; // Clear bits 0 and 1 @@ -254,7 +254,7 @@ public void Enable(bool enable) config |= 0x01; } - Peripheral.WriteRegister(DEVICECONFIG, config); + BusComms.WriteRegister(DEVICECONFIG, config); } /// @@ -263,7 +263,7 @@ public void Enable(bool enable) /// True if in awake mode, false if in sleep mode public bool IsEnabled() { - byte config = Peripheral.ReadRegister(DEVICECONFIG); + byte config = BusComms.ReadRegister(DEVICECONFIG); int statusBits = (config & 0b11); return statusBits == 0; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs index e608f8fdb1..c108a3392f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs @@ -47,7 +47,7 @@ public partial class Mcp9808 : ByteCommsSensorBase, ITemperat public Mcp9808(II2cBus i2CBus, byte address = (byte)Addresses.Default) : base(i2CBus, address, readBufferSize: 8, writeBufferSize: 8) { - Peripheral?.WriteRegister(MCP_REG_CONFIG, (ushort)0x0); + BusComms?.WriteRegister(MCP_REG_CONFIG, (ushort)0x0); } /// @@ -55,11 +55,11 @@ public Mcp9808(II2cBus i2CBus, byte address = (byte)Addresses.Default) /// public void Wake() { - ushort config = Peripheral?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; + ushort config = BusComms?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; config = (ushort)(config & (~MCP_CONFIG_SHUTDOWN)); - Peripheral?.WriteRegister(MCP_REG_CONFIG, config); + BusComms?.WriteRegister(MCP_REG_CONFIG, config); } /// @@ -67,9 +67,9 @@ public void Wake() /// public void Sleep() { - ushort config = Peripheral?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; + ushort config = BusComms?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; - Peripheral?.WriteRegister(MCP_REG_CONFIG, (ushort)(config | MCP_CONFIG_SHUTDOWN)); + BusComms?.WriteRegister(MCP_REG_CONFIG, (ushort)(config | MCP_CONFIG_SHUTDOWN)); } /// @@ -77,7 +77,7 @@ public void Sleep() /// public ushort GetDeviceId() { - return Peripheral?.ReadRegisterAsUShort(MCP_DEVICE_ID, ByteOrder.BigEndian) ?? 0; + return BusComms?.ReadRegisterAsUShort(MCP_DEVICE_ID, ByteOrder.BigEndian) ?? 0; } /// @@ -85,7 +85,7 @@ public ushort GetDeviceId() /// public ushort GetManufactureId() { - return Peripheral?.ReadRegisterAsUShort(MCP_MANUFACTURER_ID, ByteOrder.BigEndian) ?? 0; + return BusComms?.ReadRegisterAsUShort(MCP_MANUFACTURER_ID, ByteOrder.BigEndian) ?? 0; } /// @@ -93,7 +93,7 @@ public ushort GetManufactureId() /// public byte GetResolution() { - return Peripheral?.ReadRegister(MCP_RESOLUTION) ?? 0; + return BusComms?.ReadRegister(MCP_RESOLUTION) ?? 0; } /// @@ -101,7 +101,7 @@ public byte GetResolution() /// public void SetResolution(byte resolution) { - Peripheral?.WriteRegister(MCP_RESOLUTION, resolution); + BusComms?.WriteRegister(MCP_RESOLUTION, resolution); } /// @@ -110,7 +110,7 @@ public void SetResolution(byte resolution) /// The latest sensor reading protected override Task ReadSensor() { - ushort value = Peripheral?.ReadRegisterAsUShort(MCP_AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; + ushort value = BusComms?.ReadRegisterAsUShort(MCP_AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; double temp = value & 0x0FFF; temp /= 16.0; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs index a4b49b323c..37c6771635 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs @@ -28,7 +28,7 @@ public Resolution SensorResolution get => _sensorResolution; set { - Peripheral?.ReadRegister(0x01, ReadBuffer.Span); + BusComms?.ReadRegister(0x01, ReadBuffer.Span); if (value == Resolution.Resolution12Bits) { @@ -39,7 +39,7 @@ public Resolution SensorResolution ReadBuffer.Span[1] |= 0x10; } - Peripheral?.WriteRegister(0x01, ReadBuffer.Span); + BusComms?.WriteRegister(0x01, ReadBuffer.Span); _sensorResolution = value; } } @@ -57,7 +57,7 @@ public Resolution SensorResolution public Tmp102(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 2, writeBufferSize: 2) { - Peripheral?.ReadRegister(0x01, ReadBuffer.Span); + BusComms?.ReadRegister(0x01, ReadBuffer.Span); _sensorResolution = (ReadBuffer.Span[1] & 0x10) > 0 ? Resolution.Resolution13Bits : Resolution.Resolution12Bits; } @@ -67,7 +67,7 @@ public Tmp102(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected override Task ReadSensor() { - Peripheral?.ReadRegister(0x00, ReadBuffer.Span); + BusComms?.ReadRegister(0x00, ReadBuffer.Span); int sensorReading; if (SensorResolution == Resolution.Resolution12Bits) From c03ff5150e9b419b376f2d507ccf52e8c15402ae Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 14:13:12 -0700 Subject: [PATCH 088/141] Minor cleanup --- .../RTCs.Ds323x/Driver/Ds323x.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs index 4ad69c4b3a..e66bc4d8a5 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs @@ -88,9 +88,9 @@ static class Registers /// /// Create a new Ds323x object /// - protected Ds323x(I2cCommunications peripheral, IPin interruptPin) + protected Ds323x(I2cCommunications i2cComms, IPin interruptPin) { - i2cComms = peripheral; + this.i2cComms = i2cComms; if (interruptPin != null) { @@ -228,7 +228,7 @@ public Units.Temperature Temperature } /// - /// I2C Communication bus used to communicate with the peripheral + /// I2C Communication bus used to communicate with the i2cComms /// protected II2cCommunications i2cComms; From 34e7ca46697bf44036377a236af88abfcba62dd6 Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Mon, 24 Apr 2023 16:25:06 -0500 Subject: [PATCH 089/141] separated driver from helper stuff for RgbLed --- .../Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 230 +----------------- .../Leds/RgbPwmLedExtensions.cs | 207 ++++++++++++++++ 2 files changed, 209 insertions(+), 228 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 122ddd87a4..2aab0e8ffe 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -2,8 +2,6 @@ using Meadow.Peripherals.Leds; using Meadow.Units; using System; -using System.Threading; -using System.Threading.Tasks; namespace Meadow.Foundation.Leds { @@ -16,8 +14,7 @@ namespace Meadow.Foundation.Leds /// public class RgbPwmLed { - private Task? animationTask = null; - private CancellationTokenSource? cancellationTokenSource = null; + internal event EventHandler ColorChanged = delegate { }; static readonly Frequency DefaultFrequency = new Frequency(200, Frequency.UnitType.Hertz); readonly float DEFAULT_DUTY_CYCLE = 0f; @@ -254,6 +251,7 @@ public void SetColor(Color color, float brightness = 1) { return; } + ColorChanged?.Invoke(this, EventArgs.Empty); Color = color; Brightness = brightness; @@ -262,229 +260,5 @@ public void SetColor(Color color, float brightness = 1) GreenPwm.DutyCycle = (float)(Color.G / 255.0 * maxGreenDutyCycle * brightness); BluePwm.DutyCycle = (float)(Color.B / 255.0 * maxBlueDutyCycle * brightness); } - - /// - /// Stops any running animations. - /// - public void Stop() - { - cancellationTokenSource?.Cancel(); - IsOn = false; - } - - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. - /// - /// - /// - /// - public void StartBlink(Color color, float highBrightness = 1f, float lowBrightness = 0f) - { - var onDuration = TimeSpan.FromMilliseconds(500); - var offDuration = TimeSpan.FromMilliseconds(500); - - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Color = color; - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(color, (TimeSpan)onDuration, (TimeSpan)offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. - /// - /// - /// - /// - /// - /// - public void StartBlink(Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness = 1f, float lowBrightness = 0f) - { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Color = color; - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(color, onDuration, offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start blinking led - /// - /// color to blink - /// on duration in ms - /// off duration in ms - /// maximum brightness - /// minimum brightness - /// token to cancel blink - protected async Task StartBlinkAsync(Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - SetColor(color, highBrightness); - await Task.Delay(onDuration); - SetColor(color, lowBrightness); - await Task.Delay(offDuration); - } - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. - /// - /// - /// - /// - public void StartPulse(Color color, float highBrightness = 1, float lowBrightness = 0.15F) - { - var pulseDuration = TimeSpan.FromMilliseconds(600); - - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Color = color; - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(color, pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. - /// - /// - /// - /// - /// - public void StartPulse(Color color, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) - { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Color = color; - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(color, pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start led pulsing - /// - /// color to pulse - /// pulse duration in ms - /// maximum brightness - /// minimum brightness - /// token to cancel pulse - protected async Task StartPulseAsync(Color color, TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - float brightness = lowBrightness; - bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. - float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); - float delta = (highBrightness - lowBrightness) / steps; - - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - if (brightness <= lowBrightness) - { - ascending = true; - } - else if (brightness >= highBrightness) - { - ascending = false; - } - - brightness += delta * (ascending ? 1 : -1); - - if (brightness < 0) - { - brightness = 0; - } - else - if (brightness > 1) - { - brightness = 1; - } - - SetColor(color, brightness); - - await Task.Delay(intervalTime); - } - } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs new file mode 100644 index 0000000000..34751c14c6 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + public static class RgbPwmLedExtensions + { + private static Dictionary _cancellationTokens = new Dictionary(); + + // private Task? animationTask = null; + + /// + /// Stops any running animations. + /// + public static void Stop(this RgbPwmLed led) + { + if (_cancellationTokens.ContainsKey(led)) + { + _cancellationTokens[led].Cancel(); + _cancellationTokens.Remove(led); + } + + led.IsOn = false; + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. + /// + /// + /// + /// + public static void StartBlink(this RgbPwmLed led, Color color, float highBrightness = 1f, float lowBrightness = 0f) + { + led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. + /// + /// + /// + /// + /// + /// + public static void StartBlink(this RgbPwmLed led, Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness = 1f, float lowBrightness = 0f) + { + if (highBrightness > 1 || highBrightness <= 0) + { + throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); + } + if (lowBrightness >= 1 || lowBrightness < 0) + { + throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); + } + if (lowBrightness >= highBrightness) + { + throw new Exception("offBrightness must be less than onBrightness"); + } + + led.Stop(); + + var animationTask = new Task(async () => + { + var cancellationTokenSource = new CancellationTokenSource(); + _cancellationTokens.Add(led, cancellationTokenSource); + await led.StartBlinkAsync(color, onDuration, offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); + }, TaskCreationOptions.LongRunning); + animationTask.Start(); + } + + /// + /// Start blinking led + /// + /// color to blink + /// on duration in ms + /// off duration in ms + /// maximum brightness + /// minimum brightness + /// token to cancel blink + private static async Task StartBlinkAsync(this RgbPwmLed led, Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) + { + // stop animation on color change + led.ColorChanged += OnLedColorChange; + + while (true) + { + if (cancellationToken.IsCancellationRequested) + { + break; + } + + led.SetColor(color, highBrightness); + await Task.Delay(onDuration); + led.SetColor(color, lowBrightness); + await Task.Delay(offDuration); + } + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. + /// + /// + /// + /// + public static void StartPulse(this RgbPwmLed led, Color color, float highBrightness = 1, float lowBrightness = 0.15F) + { + led.StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. + /// + /// + /// + /// + /// + public static void StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + { + if (highBrightness > 1 || highBrightness <= 0) + { + throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); + } + if (lowBrightness >= 1 || lowBrightness < 0) + { + throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); + } + if (lowBrightness >= highBrightness) + { + throw new Exception("offBrightness must be less than onBrightness"); + } + + led.Stop(); + + var animationTask = new Task(async () => + { + var cancellationTokenSource = new CancellationTokenSource(); + _cancellationTokens.Add(led, cancellationTokenSource); + await led.StartPulseAsync(color, pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); + }, TaskCreationOptions.LongRunning); + animationTask.Start(); + } + + /// + /// Start led pulsing + /// + /// color to pulse + /// pulse duration in ms + /// maximum brightness + /// minimum brightness + /// token to cancel pulse + private static async Task StartPulseAsync(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) + { + float brightness = lowBrightness; + bool ascending = true; + TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); + float delta = (highBrightness - lowBrightness) / steps; + + // stop animation on color change + led.ColorChanged += OnLedColorChange; + + while (true) + { + if (cancellationToken.IsCancellationRequested) + { + break; + } + + if (brightness <= lowBrightness) + { + ascending = true; + } + else if (brightness >= highBrightness) + { + ascending = false; + } + + brightness += delta * (ascending ? 1 : -1); + + if (brightness < 0) + { + brightness = 0; + } + else + if (brightness > 1) + { + brightness = 1; + } + + led.SetColor(color, brightness); + + await Task.Delay(intervalTime); + } + } + + private static void OnLedColorChange(object sender, EventArgs e) + { + if (sender is RgbPwmLed { } led) + { + led.Stop(); + led.ColorChanged -= OnLedColorChange; + } + } + } +} \ No newline at end of file From fc64dfd0f10dc59e1d671cb7c9a1cb0ecfa66efc Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 14:55:56 -0700 Subject: [PATCH 090/141] Set bus communications methods to virtual so they can be extended --- .../Communications/I2cCommunications.cs | 22 +++++++++---------- .../Communications/SpiCommunications.cs | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs b/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs index e46550a54a..0a1796ec37 100644 --- a/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs +++ b/Source/Meadow.Foundation.Core/Communications/I2cCommunications.cs @@ -61,7 +61,7 @@ public void Read(Span readBuffer) /// /// /// - public void ReadRegister(byte address, Span readBuffer) + public virtual void ReadRegister(byte address, Span readBuffer) { WriteBuffer.Span[0] = address; Bus.Exchange(Address, WriteBuffer.Span[0..1], readBuffer); @@ -71,7 +71,7 @@ public void ReadRegister(byte address, Span readBuffer) /// Read a register from the peripheral. /// /// Address of the register to read. - public byte ReadRegister(byte address) + public virtual byte ReadRegister(byte address) { WriteBuffer.Span[0] = address; Bus.Exchange(Address, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); @@ -84,7 +84,7 @@ public byte ReadRegister(byte address) /// Register address of the low byte (the high byte will follow). /// Order of the bytes in the register (little endian is the default). /// Value read from the register. - public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) + public virtual ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) { WriteBuffer.Span[0] = address; Bus.Exchange(Address, WriteBuffer[0..1].Span, ReadBuffer[0..2].Span); @@ -102,7 +102,7 @@ public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.Lit /// Write a single byte to the peripheral. /// /// Value to be written (8-bits). - public void Write(byte value) + public virtual void Write(byte value) { WriteBuffer.Span[0] = value; Bus.Write(Address, WriteBuffer.Span[0..1]); @@ -112,14 +112,14 @@ public void Write(byte value) /// Write an array of bytes to the peripheral. /// /// Values to be written. - public void Write(Span data) => Bus.Write(Address, data); + public virtual void Write(Span data) => Bus.Write(Address, data); /// /// Write data a register in the peripheral. /// /// Address of the register to write to. /// Data to write into the register. - public void WriteRegister(byte address, byte value) + public virtual void WriteRegister(byte address, byte value) { WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; @@ -132,7 +132,7 @@ public void WriteRegister(byte address, byte value) /// Address to write the first byte to. /// Value to be written (16-bits). /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrder.LittleEndian) { var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); @@ -144,7 +144,7 @@ public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrde /// Address to write the first byte to. /// Value to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) { var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); @@ -156,7 +156,7 @@ public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder. /// Address to write the first byte to. /// Value to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) { var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); @@ -168,7 +168,7 @@ public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder /// Address of the register to write to. /// A buffer of byte values to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian) { if (WriteBuffer.Length < writeBuffer.Length + 1) { @@ -207,7 +207,7 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order /// An optional parameter that specifies the duplex type of the communication. /// It defaults to half-duplex. /// Thrown when duplex is set to full-duplex, as I2C only supports half-duplex communication - public void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) + public virtual void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) { if (duplex == DuplexType.Full) { throw new ArgumentException("I2C doesn't support full-duplex communications. Only half-duplex is available because it only has a single data line."); } diff --git a/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs index 709a196ef1..4c5cfe9174 100644 --- a/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs +++ b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs @@ -80,7 +80,7 @@ public SpiCommunications( /// The number of bytes to be read is determined by the length of the /// `readBuffer`. /// - public void Read(Span readBuffer) + public virtual void Read(Span readBuffer) { Bus.Read(ChipSelect, readBuffer, chipSelectMode); } @@ -90,7 +90,7 @@ public void Read(Span readBuffer) /// /// The register address /// The buffer to hold the data - public void ReadRegister(byte address, Span readBuffer) + public virtual void ReadRegister(byte address, Span readBuffer) { WriteBuffer.Span[0] = address; Bus.Exchange(ChipSelect, WriteBuffer.Span[0..readBuffer.Length], readBuffer, chipSelectMode); @@ -101,7 +101,7 @@ public void ReadRegister(byte address, Span readBuffer) /// /// Address to read /// The byte read - public byte ReadRegister(byte address) + public virtual byte ReadRegister(byte address) { WriteBuffer.Span[0] = address; Bus.Exchange(ChipSelect, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1], chipSelectMode); @@ -114,7 +114,7 @@ public byte ReadRegister(byte address) /// Address of the read /// Endianness of the value read /// The value read - public ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) + public virtual ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) { ReadRegister(address, ReadBuffer[0..2].Span); if (order == ByteOrder.LittleEndian) @@ -141,7 +141,7 @@ public void Write(byte value) /// Write a span of bytes to the peripheral. /// /// Data to be written. - public void Write(Span data) + public virtual void Write(Span data) { Bus.Write(ChipSelect, data, chipSelectMode); } @@ -151,7 +151,7 @@ public void Write(Span data) /// /// The target write register address /// Value to write - public void WriteRegister(byte address, byte value) + public virtual void WriteRegister(byte address, byte value) { WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; @@ -164,7 +164,7 @@ public void WriteRegister(byte address, byte value) /// The target write register address /// Value to write /// Endianness of the value to be written - public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrder.LittleEndian) { // split the 16 bit ushort into two bytes var bytes = BitConverter.GetBytes(value); @@ -177,7 +177,7 @@ public void WriteRegister(byte address, ushort value, ByteOrder order = ByteOrde /// Address to write the first byte to. /// Value to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder.LittleEndian) { var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); @@ -189,7 +189,7 @@ public void WriteRegister(byte address, uint value, ByteOrder order = ByteOrder. /// Address to write the first byte to. /// Value to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder.LittleEndian) { var bytes = BitConverter.GetBytes(value); WriteRegister(address, bytes, order); @@ -201,7 +201,7 @@ public void WriteRegister(byte address, ulong value, ByteOrder order = ByteOrder /// Address of the register to write to. /// A buffer of byte values to be written. /// Indicate if the data should be written as big or little endian. - public void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian) + public virtual void WriteRegister(byte address, Span writeBuffer, ByteOrder order = ByteOrder.LittleEndian) { if (WriteBuffer.Length < writeBuffer.Length + 1) { @@ -237,7 +237,7 @@ public void WriteRegister(byte address, Span writeBuffer, ByteOrder order /// The buffer holding the data to write /// The buffer to receieve data /// The duplex mode - half or full - public void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) + public virtual void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) { if (Bus.Configuration.SpiMode != BusMode) { From 354a9cd1bb83dd743e2f87e831ee51932c1b3aef Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 14:56:19 -0700 Subject: [PATCH 091/141] Simplify bus abstraction in Bme280 --- .../Driver/Bme280.Register.cs | 15 ++++++++ .../Driver/Bme280.cs | 36 +++++++++---------- .../Driver/Bme280Comms.cs | 23 ------------ .../Driver/Bme280I2C.cs | 32 ----------------- .../Driver/Bme280SPI.cs | 35 ------------------ 5 files changed, 33 insertions(+), 108 deletions(-) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280Comms.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs new file mode 100644 index 0000000000..d490a4b996 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Register.cs @@ -0,0 +1,15 @@ +namespace Meadow.Foundation.Sensors.Atmospheric +{ + public partial class Bme280 + { + internal enum Register : byte + { + ChipID = 0xd0, + Reset = 0xe0, + Humidity = 0xf2, + Status = 0xf3, + Measurement = 0xf4, + Configuration = 0xf5, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index 2d92de27d7..2053d0ed4a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -79,9 +79,9 @@ public partial class Bme280 : public Oversample HumiditySampleCount { get; set; } = Oversample.OversampleX8; /// - /// Communication bus used to read and write to the BME280 sensor. + /// Communication bus used to read and write to the BME280 sensor /// - private readonly Bme280Comms bme280Comms; + private readonly IByteCommunications bme280Comms; /// /// Compensation data from the sensor @@ -119,8 +119,8 @@ public partial class Bme280 : /// public Frequency SpiBusSpeed { - get => ((Bme280Spi)bme280Comms).spiComms.BusSpeed; - set => ((Bme280Spi)bme280Comms).spiComms.BusSpeed = value; + get => ((ISpiCommunications)bme280Comms).BusSpeed; + set => ((ISpiCommunications)bme280Comms).BusSpeed = value; } /// @@ -133,8 +133,8 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((Bme280Spi)bme280Comms).spiComms.BusMode; - set => ((Bme280Spi)bme280Comms).spiComms.BusMode = value; + get => ((ISpiCommunications)bme280Comms).BusMode; + set => ((ISpiCommunications)bme280Comms).BusMode = value; } /// @@ -144,7 +144,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// I2C address of the sensor (default = 0x77) public Bme280(II2cBus i2cBus, byte address = (byte)Addresses.Default) { - bme280Comms = new Bme280I2C(i2cBus, address); + bme280Comms = new I2cCommunications(i2cBus, address); configuration = new Configuration(); // here to avoid the warning Initialize(); } @@ -165,7 +165,7 @@ public Bme280(ISpiBus spiBus, IPin chipSelectPin) : /// The port for the chip select pin public Bme280(ISpiBus spiBus, IDigitalOutputPort chipSelectPort) { - bme280Comms = new Bme280Spi(spiBus, DefaultSpiBusSpeed, DefaultSpiBusMode, chipSelectPort); + bme280Comms = new SpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); configuration = new Configuration(); // here to avoid the warning Initialize(); } @@ -235,7 +235,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T (Units.Temperature Temperature, RelativeHumidity Humidity, Pressure Pressure) conditions; - bme280Comms.ReadRegisters(0xf7, readBuffer.Span[0..8]); + bme280Comms.ReadRegister(0xf7, readBuffer.Span[0..8]); var adcTemperature = (readBuffer.Span[3] << 12) | (readBuffer.Span[4] << 4) | ((readBuffer.Span[5] >> 4) & 0x0f); var tvar1 = (((adcTemperature >> 3) - (compensationData.T1 << 1)) * compensationData.T2) >> 11; @@ -301,16 +301,16 @@ protected void UpdateConfiguration(Configuration configuration) // // Put to sleep to allow the configuration to be changed. // - bme280Comms.WriteRegister(Bme280Comms.Register.Measurement, 0x00); + bme280Comms.WriteRegister((byte)Register.Measurement, 0x00); var data = (byte)((((byte)configuration.Standby << 5) & 0xe0) | (((byte)configuration.Filter << 2) & 0x1c)); - bme280Comms.WriteRegister(Bme280Comms.Register.Configuration, data); + bme280Comms.WriteRegister((byte)Register.Configuration, data); data = (byte)((byte)configuration.HumidityOverSampling & 0x07); - bme280Comms.WriteRegister(Bme280Comms.Register.Humidity, data); + bme280Comms.WriteRegister((byte)Register.Humidity, data); data = (byte)((((byte)configuration.TemperatureOverSampling << 5) & 0xe0) | (((byte)configuration.PressureOversampling << 2) & 0x1c) | ((byte)configuration.Mode & 0x03)); - bme280Comms.WriteRegister(Bme280Comms.Register.Measurement, data); + bme280Comms.WriteRegister((byte)Register.Measurement, data); } /// @@ -321,7 +321,7 @@ protected void UpdateConfiguration(Configuration configuration) /// public void Reset() { - bme280Comms.WriteRegister(Bme280Comms.Register.Reset, 0xb6); + bme280Comms.WriteRegister((byte)Register.Reset, 0xb6); UpdateConfiguration(configuration); } @@ -340,7 +340,7 @@ public void Reset() protected void ReadCompensationData() { // read the temperature and pressure data into the internal read buffer - bme280Comms.ReadRegisters(0x88, readBuffer.Span[0..24]); + bme280Comms.ReadRegister(0x88, readBuffer.Span[0..24]); // Temperature compensationData.T1 = (ushort)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); @@ -361,10 +361,10 @@ protected void ReadCompensationData() // non-sequential registers // first one - bme280Comms.ReadRegisters(0xa1, readBuffer.Span[0..1]); + bme280Comms.ReadRegister(0xa1, readBuffer.Span[0..1]); compensationData.H1 = readBuffer.Span[0]; // 2-6 - bme280Comms.ReadRegisters(0xe1, readBuffer.Span[0..7]); + bme280Comms.ReadRegister(0xe1, readBuffer.Span[0..7]); compensationData.H2 = (short)(readBuffer.Span[0] + (readBuffer.Span[1] << 8)); compensationData.H3 = readBuffer.Span[2]; compensationData.H4 = (short)((readBuffer.Span[3] << 4) + (readBuffer.Span[4] & 0xf)); @@ -378,7 +378,7 @@ protected void ReadCompensationData() /// public byte GetChipID() { - bme280Comms.ReadRegisters((byte)Bme280Comms.Register.ChipID, readBuffer.Span[0..1]); + bme280Comms.ReadRegister((byte)Register.ChipID, readBuffer.Span[0..1]); return readBuffer.Span[0]; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280Comms.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280Comms.cs deleted file mode 100644 index 5d5ff042d1..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280Comms.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal abstract class Bme280Comms - { - /// - /// Registers used to control the BME280. - /// - internal enum Register : byte - { - ChipID = 0xd0, - Reset = 0xe0, - Humidity = 0xf2, - Status = 0xf3, - Measurement = 0xf4, - Configuration = 0xf5, - } - - public abstract void WriteRegister(Register register, byte value); - public abstract void ReadRegisters(byte startRegister, Span readBuffer); - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs deleted file mode 100644 index 16111a826e..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280I2C.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Meadow.Hardware; -using System; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal class Bme280I2C : Bme280Comms - { - /// - /// I2C Communication bus used to communicate with the peripheral - /// - protected readonly II2cCommunications i2cComms; - - internal Bme280I2C(II2cBus i2c, byte busAddress) - { - if ((busAddress != 0x76) && (busAddress != 0x77)) - { - throw new ArgumentOutOfRangeException(nameof(busAddress), "Address should be 0x76 or 0x77"); - } - i2cComms = new I2cCommunications(i2c, busAddress); - } - - public override void ReadRegisters(byte startRegister, Span readBuffer) - { - i2cComms.ReadRegister(startRegister, readBuffer); - } - - public override void WriteRegister(Register register, byte value) - { - i2cComms.WriteRegister((byte)register, value); - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs deleted file mode 100644 index b720c23fdd..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280SPI.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Meadow.Hardware; -using Meadow.Units; -using System; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal class Bme280Spi : Bme280Comms - { - /// - /// SPI Communication bus used to communicate with the peripheral - /// - internal readonly ISpiCommunications spiComms; - - internal Bme280Spi(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) - { - spiComms = new SpiCommunications(spi, chipSelect, busSpeed, busMode); - } - - public override void ReadRegisters(byte startRegister, Span readBuffer) - { - spiComms.ReadRegister(startRegister, readBuffer); - - // skip past the byte where we clocked out the register address - for (int i = 1; i < readBuffer.Length; i++) - { - readBuffer[i - 1] = readBuffer[i]; - } - } - - public override void WriteRegister(Register register, byte value) - { - spiComms.WriteRegister((byte)register, value); - } - } -} \ No newline at end of file From c310732c1e38ec51168f40373aa7242418d0c46d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 14:56:38 -0700 Subject: [PATCH 092/141] Simplify bus abstraction in Bme68x --- .../Driver/Bme68x.Calibration.cs | 58 ++++++------ .../Driver/Bme68x.Enums.cs | 2 +- .../Driver/Bme68x.cs | 88 +++++++++---------- .../Driver/Bme68xComms.cs | 15 ---- .../Driver/Bme68xI2C.cs | 32 ------- ...me68xSPI.cs => Bme68xSpiCommunications.cs} | 23 ++--- .../Driver/Drivers/Bme680.cs | 6 +- .../Driver/Drivers/Bme688.cs | 6 +- 8 files changed, 87 insertions(+), 143 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xComms.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs rename Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/{Bme68xSPI.cs => Bme68xSpiCommunications.cs} (76%) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Calibration.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Calibration.cs index 27e5cc6e89..07fee937c9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Calibration.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Calibration.cs @@ -1,4 +1,6 @@ -namespace Meadow.Foundation.Sensors.Atmospheric +using Meadow.Hardware; + +namespace Meadow.Foundation.Sensors.Atmospheric { partial class Bme68x { @@ -41,43 +43,43 @@ internal class Calibration public sbyte ResHeatVal { get; set; } public sbyte RangeSwErr { get; set; } - public void LoadCalibrationDataFromSensor(Bme68xComms sensor) + public void LoadCalibrationDataFromSensor(IByteCommunications byteComms) { // Read temperature calibration data. - T1 = sensor.ReadRegisterAsUShort((byte)Registers.T1); - T2 = (short)sensor.ReadRegisterAsUShort((byte)Registers.T2); - T3 = sensor.ReadRegister((byte)Registers.T3); + T1 = byteComms.ReadRegisterAsUShort((byte)Registers.T1); + T2 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.T2); + T3 = byteComms.ReadRegister((byte)Registers.T3); // Read humidity calibration data. - H1 = (ushort)((sensor.ReadRegister((byte)Registers.H1_MSB) << 4) | (sensor.ReadRegister((byte)Registers.H1_LSB) & 0x0F)); - H2 = (ushort)((sensor.ReadRegister((byte)Registers.H2_MSB) << 4) | (sensor.ReadRegister((byte)Registers.H2_LSB) >> 4)); - H3 = (sbyte)sensor.ReadRegister((byte)Registers.H3); - H4 = (sbyte)sensor.ReadRegister((byte)Registers.H4); - H5 = (sbyte)sensor.ReadRegister((byte)Registers.H5); - H6 = sensor.ReadRegister((byte)Registers.H6); - H7 = (sbyte)(sensor.ReadRegister((byte)Registers.H7)); + H1 = (ushort)((byteComms.ReadRegister((byte)Registers.H1_MSB) << 4) | (byteComms.ReadRegister((byte)Registers.H1_LSB) & 0x0F)); + H2 = (ushort)((byteComms.ReadRegister((byte)Registers.H2_MSB) << 4) | (byteComms.ReadRegister((byte)Registers.H2_LSB) >> 4)); + H3 = (sbyte)byteComms.ReadRegister((byte)Registers.H3); + H4 = (sbyte)byteComms.ReadRegister((byte)Registers.H4); + H5 = (sbyte)byteComms.ReadRegister((byte)Registers.H5); + H6 = byteComms.ReadRegister((byte)Registers.H6); + H7 = (sbyte)(byteComms.ReadRegister((byte)Registers.H7)); // Read pressure calibration data. - P1 = sensor.ReadRegisterAsUShort((byte)Registers.P1_LSB); - P2 = (short)sensor.ReadRegisterAsUShort((byte)Registers.P2_LSB); - P3 = sensor.ReadRegister((byte)Registers.P3); - P4 = (short)sensor.ReadRegisterAsUShort((byte)Registers.P4_LSB); - P5 = (short)sensor.ReadRegisterAsUShort((byte)Registers.P5_LSB); - P6 = sensor.ReadRegister((byte)Registers.P6); - P7 = sensor.ReadRegister((byte)Registers.P7); - P8 = (short)sensor.ReadRegisterAsUShort((byte)Registers.P8_LSB); - P9 = (short)sensor.ReadRegisterAsUShort((byte)Registers.P9_LSB); - P10 = sensor.ReadRegister((byte)Registers.P10); + P1 = byteComms.ReadRegisterAsUShort((byte)Registers.P1_LSB); + P2 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.P2_LSB); + P3 = byteComms.ReadRegister((byte)Registers.P3); + P4 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.P4_LSB); + P5 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.P5_LSB); + P6 = byteComms.ReadRegister((byte)Registers.P6); + P7 = byteComms.ReadRegister((byte)Registers.P7); + P8 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.P8_LSB); + P9 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.P9_LSB); + P10 = byteComms.ReadRegister((byte)Registers.P10); // read gas calibration data. - Gh1 = (sbyte)sensor.ReadRegister((byte)Registers.GH1); - Gh2 = (short)sensor.ReadRegisterAsUShort((byte)Registers.GH2); - Gh3 = (sbyte)sensor.ReadRegister((byte)Registers.GH3); + Gh1 = (sbyte)byteComms.ReadRegister((byte)Registers.GH1); + Gh2 = (short)byteComms.ReadRegisterAsUShort((byte)Registers.GH2); + Gh3 = (sbyte)byteComms.ReadRegister((byte)Registers.GH3); // read heater calibration data - ResHeatRange = (byte)(sensor.ReadRegister(((byte)Registers.RES_HEAT_RANGE) & 0x30) >> 4); - RangeSwErr = (sbyte)(sensor.ReadRegister(((byte)Registers.RANGE_SW_ERR) & 0xF0) >> 4); - ResHeatVal = (sbyte)sensor.ReadRegister((byte)Registers.RES_HEAT_VAL); + ResHeatRange = (byte)(byteComms.ReadRegister(((byte)Registers.RES_HEAT_RANGE) & 0x30) >> 4); + RangeSwErr = (sbyte)(byteComms.ReadRegister(((byte)Registers.RANGE_SW_ERR) & 0xF0) >> 4); + ResHeatVal = (sbyte)byteComms.ReadRegister((byte)Registers.RES_HEAT_VAL); } } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs index 7e3399012c..6ac6f928e5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs @@ -3,7 +3,7 @@ partial class Bme68x { /// - /// Valid addresses for the sensor + /// Valid addresses for the busComms /// public enum Addresses : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index ed815316fd..f113d89d5f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -85,10 +85,10 @@ public HeaterProfileType HeaterProfile throw new ArgumentOutOfRangeException(nameof(value)); } - var profile = sensor.ReadRegister((byte)Registers.CTRL_GAS_1); + var profile = busComms.ReadRegister((byte)Registers.CTRL_GAS_1); profile = (byte)((profile & 0x0F) | (byte)value); - sensor.WriteRegister((byte)Registers.CTRL_GAS_1, profile); + busComms.WriteRegister((byte)Registers.CTRL_GAS_1, profile); heaterProfile = value; } @@ -109,29 +109,29 @@ public FilteringMode FilterMode throw new ArgumentOutOfRangeException(nameof(value)); } - var filter = sensor.ReadRegister((byte)Registers.CONFIG); + var filter = busComms.ReadRegister((byte)Registers.CONFIG); byte mask = 0x1C; filter = (byte)((filter & (byte)~mask) | (byte)value << 2); - sensor.WriteRegister((byte)Registers.CONFIG, filter); + busComms.WriteRegister((byte)Registers.CONFIG, filter); filterMode = value; } } FilteringMode filterMode; /// - /// Enable / disable the sensor heater + /// Enable / disable the busComms heater /// public bool HeaterIsEnabled { get => heaterIsEnabled; set { - var heaterStatus = sensor.ReadRegister((byte)Registers.CTRL_GAS_0); + var heaterStatus = busComms.ReadRegister((byte)Registers.CTRL_GAS_0); var mask = 0x08; heaterStatus = (byte)((heaterStatus & (byte)~mask) | Convert.ToByte(!value) << 3); - sensor.WriteRegister((byte)Registers.CTRL_GAS_0, heaterStatus); + busComms.WriteRegister((byte)Registers.CTRL_GAS_0, heaterStatus); heaterIsEnabled = value; } } @@ -145,11 +145,11 @@ public bool GasConversionIsEnabled get => gasConversionIsEnabled; set { - var gasConversion = sensor.ReadRegister((byte)Registers.CTRL_GAS_1); + var gasConversion = busComms.ReadRegister((byte)Registers.CTRL_GAS_1); byte mask = 0x10; gasConversion = (byte)((gasConversion & (byte)~mask) | Convert.ToByte(value) << 4); - sensor.WriteRegister((byte)Registers.CTRL_GAS_1, gasConversion); + busComms.WriteRegister((byte)Registers.CTRL_GAS_1, gasConversion); gasConversionIsEnabled = value; } } @@ -165,8 +165,8 @@ public bool GasConversionIsEnabled /// public Frequency SpiBusSpeed { - get => ((Bme68xSPI)sensor).spiComms.BusSpeed; - set => ((Bme68xSPI)sensor).spiComms.BusSpeed = value; + get => ((Bme68xSpiCommunications)busComms).BusSpeed; + set => ((Bme68xSpiCommunications)busComms).BusSpeed = value; } /// @@ -179,18 +179,14 @@ public Frequency SpiBusSpeed /// public SpiClockConfiguration.Mode SpiBusMode { - get => ((Bme68xSPI)sensor).spiComms.BusMode; - set => ((Bme68xSPI)sensor).spiComms.BusMode = value; + get => ((Bme68xSpiCommunications)busComms).BusMode; + set => ((Bme68xSpiCommunications)busComms).BusMode = value; } /// - /// Communication bus used to read and write to the BME68x sensor + /// Communication bus used to read and write to the BME68x busComms /// - /// - /// The BME has both I2C and SPI interfaces. The ICommunicationBus allows the - /// selection to be made in the constructor. - /// - readonly Bme68xComms sensor; + readonly IByteCommunications busComms; /// /// The current temperature @@ -215,7 +211,7 @@ public SpiClockConfiguration.Mode SpiBusMode readonly Configuration configuration; /// - /// Calibration data for the sensor + /// Calibration data for the busComms /// internal Calibration? calibration; @@ -232,11 +228,11 @@ public SpiClockConfiguration.Mode SpiBusMode /// Creates a new instance of the BME68x class /// /// I2C Bus to use for communicating with the sensor - /// I2C address of the sensor. + /// I2C address protected Bme68x(II2cBus i2cBus, byte address = (byte)Addresses.Default) { configuration = new Configuration(); - sensor = new Bme68xI2C(i2cBus, address); + busComms = new I2cCommunications(i2cBus, address); Initialize(); } @@ -258,34 +254,34 @@ protected Bme68x(ISpiBus spiBus, IPin chipSelectPin) : /// The BMP68x configuration (optional) protected Bme68x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, Configuration? configuration = null) { - sensor = new Bme68xSPI(spiBus, DefaultSpiBusSpeed, DefaultSpiBusMode, chipSelectPort); + busComms = new Bme68xSpiCommunications(spiBus, chipSelectPort, DefaultSpiBusSpeed, DefaultSpiBusMode); this.configuration = configuration ?? new Configuration(); - byte value = sensor.ReadRegister((byte)Registers.STATUS); - sensor.WriteRegister((byte)Registers.STATUS, value); + byte value = busComms.ReadRegister((byte)Registers.STATUS); + busComms.WriteRegister((byte)Registers.STATUS, value); Initialize(); } /// - /// Initialize the sensor + /// Initialize the busComms /// protected void Initialize() { Reset(); calibration = new Calibration(); - calibration.LoadCalibrationDataFromSensor(sensor); + calibration.LoadCalibrationDataFromSensor(busComms); // Init the temp and pressure registers var status = (byte)((((byte)configuration.TemperatureOversample << 5) & 0xe0) | (((byte)configuration.PressureOversample << 2) & 0x1c)); - sensor.WriteRegister((byte)Registers.CTRL_MEAS, status); + busComms.WriteRegister((byte)Registers.CTRL_MEAS, status); // Init the humidity registers status = (byte)((byte)configuration.HumidityOversample & 0x07); - sensor.WriteRegister((byte)Registers.CTRL_HUM, status); + busComms.WriteRegister((byte)Registers.CTRL_HUM, status); //enable gas readings GasConversionIsEnabled = true; @@ -296,7 +292,7 @@ protected void Initialize() /// public void Reset() { - sensor.WriteRegister((byte)Registers.RESET, 0xB6); + busComms.WriteRegister((byte)Registers.RESET, 0xB6); } /// @@ -312,8 +308,8 @@ public void ConfigureHeatingProfile(HeaterProfileType profile, Units.Temperature var heaterResistance = CalculateHeaterResistance(targetTemperature, ambientTemperature); var heaterDuration = CalculateHeaterDuration(duration); - sensor.WriteRegister((byte)(Registers.GAS_WAIT_0 + (byte)profile), heaterDuration); - sensor.WriteRegister((byte)(Registers.RES_HEAT_0 + (byte)profile), heaterResistance); + busComms.WriteRegister((byte)(Registers.GAS_WAIT_0 + (byte)profile), heaterDuration); + busComms.WriteRegister((byte)(Registers.RES_HEAT_0 + (byte)profile), heaterResistance); // cache heater configuration if (heaterConfigs.Exists(config => config.HeaterProfile == profile)) @@ -330,7 +326,7 @@ public void ConfigureHeatingProfile(HeaterProfileType profile, Units.Temperature /// The power mode public PowerMode GetPowerMode() { - var status = sensor.ReadRegister((byte)Registers.CTRL_MEAS); + var status = busComms.ReadRegister((byte)Registers.CTRL_MEAS); return (PowerMode)(status & 0x03); } @@ -341,10 +337,10 @@ public PowerMode GetPowerMode() /// The to set. public void SetPowerMode(PowerMode powerMode) { - var status = sensor.ReadRegister((byte)Registers.CTRL_MEAS); + var status = busComms.ReadRegister((byte)Registers.CTRL_MEAS); byte mask = 0x03; status = (byte)((status & (byte)~mask) | (byte)powerMode); - sensor.WriteRegister((byte)Registers.CTRL_MEAS, status); + busComms.WriteRegister((byte)Registers.CTRL_MEAS, status); } /// @@ -388,7 +384,7 @@ public TimeSpan GetMeasurementDuration(HeaterProfileType profile) /// /// Raise events for subcribers and notify of value changes /// - /// The updated sensor data + /// The updated busComms data protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> changeResult) { if (changeResult.New.Temperature is { } temp) @@ -411,9 +407,9 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T } /// - /// Reads data from the sensor + /// Reads data from the busComms /// - /// The latest sensor reading + /// The latest busComms reading protected override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> ReadSensor() { configuration.TemperatureOversample = TemperatureOversampleMode; @@ -428,28 +424,28 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T SetPowerMode(PowerMode.Forced); // Read the current control register - var status = sensor.ReadRegister((byte)Registers.CTRL_MEAS); + var status = busComms.ReadRegister((byte)Registers.CTRL_MEAS); // Force a sample status = BitHelpers.SetBit(status, 0x00, true); - sensor.WriteRegister((byte)Registers.CTRL_MEAS, status); + busComms.WriteRegister((byte)Registers.CTRL_MEAS, status); // Wait for the sample to be taken. do { - status = sensor.ReadRegister((byte)Registers.CTRL_MEAS); + status = busComms.ReadRegister((byte)Registers.CTRL_MEAS); } while (BitHelpers.GetBitValue(status, 0x00)); //read temperature byte[] data = new byte[3]; - sensor.ReadRegister((byte)Registers.TEMPDATA, data); + busComms.ReadRegister((byte)Registers.TEMPDATA, data); var rawTemperature = (data[0] << 12) | (data[1] << 4) | ((data[2] >> 4) & 0x0); //read humidity - var rawHumidity = sensor.ReadRegisterAsUShort((byte)Registers.HUMIDITYDATA, ByteOrder.BigEndian); + var rawHumidity = busComms.ReadRegisterAsUShort((byte)Registers.HUMIDITYDATA, ByteOrder.BigEndian); //read pressure - sensor.ReadRegister((byte)Registers.PRESSUREDATA, data); + busComms.ReadRegister((byte)Registers.PRESSUREDATA, data); var rawPressure = (data[0] << 12) | (data[1] << 4) | ((data[2] >> 4) & 0x0); if (GasConversionIsEnabled) @@ -457,8 +453,8 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T Thread.Sleep(GetMeasurementDuration(HeaterProfile)); // Read 10 bit gas resistance value from registers - var gasResRaw = sensor.ReadRegister((byte)Registers.GAS_RES); - var gasRange = sensor.ReadRegister((byte)Registers.GAS_RANGE); + var gasResRaw = busComms.ReadRegister((byte)Registers.GAS_RES); + var gasRange = busComms.ReadRegister((byte)Registers.GAS_RANGE); var gasRes = (ushort)((ushort)(gasResRaw << 2) + (byte)(gasRange >> 6)); gasRange &= 0x0F; conditions.GasResistance = CalculateGasResistance(gasRes, gasRange); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xComms.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xComms.cs deleted file mode 100644 index 37da523603..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xComms.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal abstract class Bme68xComms - { - public abstract void WriteRegister(byte address, byte value); - - public abstract void ReadRegister(byte address, Span readBuffer); - - public abstract byte ReadRegister(byte address); - - public abstract ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian); - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs deleted file mode 100644 index 096ea2fda1..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xI2C.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Meadow.Hardware; -using System; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal class Bme68xI2C : Bme68xComms - { - /// - /// I2C Communication bus used to communicate with the peripheral - /// - protected readonly II2cCommunications i2cComms; - - internal Bme68xI2C(II2cBus i2c, byte busAddress) - { - i2cComms = new I2cCommunications(i2c, busAddress); - } - - public override byte ReadRegister(byte address) => i2cComms.ReadRegister(address); - - public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) => i2cComms.ReadRegisterAsUShort(address, order); - - public override void ReadRegister(byte address, Span readBuffer) - { - i2cComms.ReadRegister(address, readBuffer); - } - - public override void WriteRegister(byte register, byte value) - { - i2cComms.WriteRegister(register, value); - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs similarity index 76% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs index 866879048f..01ec66ce4b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSPI.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs @@ -4,7 +4,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric { - internal class Bme68xSPI : Bme68xComms + internal class Bme68xSpiCommunications : SpiCommunications { /// /// Register pages (for SPI only) @@ -27,16 +27,11 @@ internal enum SpiRegisterPage : byte Page1 = 0x00, } - /// - /// SPI Communication bus used to communicate with the peripheral - /// - internal readonly ISpiCommunications spiComms; - SpiRegisterPage currentPage = SpiRegisterPage.Page1; - internal Bme68xSPI(ISpiBus spi, Frequency busSpeed, SpiClockConfiguration.Mode busMode, IDigitalOutputPort? chipSelect = null) + internal Bme68xSpiCommunications(ISpiBus spiBus, IDigitalOutputPort? chipSelect, Frequency busSpeed, SpiClockConfiguration.Mode busMode) + : base(spiBus, chipSelect, busSpeed, busMode, 32, 32) { - spiComms = new SpiCommunications(spi, chipSelect, busSpeed, busMode, 32, 32); } public override byte ReadRegister(byte address) @@ -46,7 +41,7 @@ public override byte ReadRegister(byte address) //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return spiComms.ReadRegister(address); + return base.ReadRegister(address); } public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteOrder.LittleEndian) @@ -56,7 +51,7 @@ public override ushort ReadRegisterAsUShort(byte address, ByteOrder order = Byte //adjust register for paging if (address > 0x7F) { address -= 0x7F; } - return spiComms.ReadRegisterAsUShort(address, order); + return base.ReadRegisterAsUShort(address, order); } public override void ReadRegister(byte startRegister, Span readBuffer) @@ -66,9 +61,7 @@ public override void ReadRegister(byte startRegister, Span readBuffer) //adjust register for paging if (startRegister > 0x7F) { startRegister -= 0x7F; } - spiComms.ReadRegister(startRegister, readBuffer); - - return; + base.ReadRegister(startRegister, readBuffer); } public override void WriteRegister(byte register, byte value) @@ -78,7 +71,7 @@ public override void WriteRegister(byte register, byte value) //adjust register for paging if (register > 0x7F) { register -= 0x7F; } - spiComms.WriteRegister(register, value); + base.WriteRegister(register, value); } void SetPageForRegister(byte register) @@ -89,7 +82,7 @@ void SetPageForRegister(byte register) //swap the page currentPage = (currentPage == SpiRegisterPage.Page0) ? SpiRegisterPage.Page1 : SpiRegisterPage.Page0; //write the page to the status register - spiComms.WriteRegister(0x73, (byte)currentPage); + WriteRegister(0x73, (byte)currentPage); } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs index 2441006989..5024dc58e4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs @@ -3,7 +3,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// BME680 Temperature, Pressure, Humidity and gas sensor + /// BME680 Temperature, Pressure, Humidity and gas busComms /// /// /// This class implements the functionality necessary to read the temperature, pressure, humidity and VOS @@ -13,8 +13,8 @@ public partial class Bme680 : Bme68x /// /// Creates a new instance of the Bme680 class /// - /// I2C Bus to use for communicating with the sensor - /// I2C address of the sensor + /// I2C Bus to use for communicating with the busComms + /// I2C address of the busComms public Bme680(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs index 1d4d20cc49..388dc6e385 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs @@ -3,7 +3,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// BME688 Temperature, Pressure, Humidity and gas sensor + /// BME688 Temperature, Pressure, Humidity and gas busComms /// /// /// This class implements the functionality necessary to read the temperature, pressure, humidity and VOS @@ -13,8 +13,8 @@ public partial class Bme688 : Bme68x /// /// Creates a new instance of the BME688 class /// - /// I2C Bus to use for communicating with the sensor - /// I2C address of the sensor + /// I2C Bus to use for communicating with the busComms + /// I2C address of the busComms public Bme688(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } From b53946992fbd75b8039fa58087a1ab8a13e37ad3 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 15:06:05 -0700 Subject: [PATCH 093/141] Fix typo in SetPageForRegister --- .../Driver/Bme68xSpiCommunications.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs index 01ec66ce4b..e82dc1b9d9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68xSpiCommunications.cs @@ -82,7 +82,7 @@ void SetPageForRegister(byte register) //swap the page currentPage = (currentPage == SpiRegisterPage.Page0) ? SpiRegisterPage.Page1 : SpiRegisterPage.Page0; //write the page to the status register - WriteRegister(0x73, (byte)currentPage); + base.WriteRegister(0x73, (byte)currentPage); } } From 6062b3da993af63e977375525f99d4554de3c59e Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 24 Apr 2023 22:41:52 -0700 Subject: [PATCH 094/141] Add ISpiPeripheral and II2cPeripheral abstractions --- .../Driver/Tea5767.Enums.cs | 2 +- .../Audio.Radio.Tea5767/Driver/Tea5767.cs | 7 +- .../Displays.Ch1115/Driver/Ch1115.cs | 2 +- .../Driver/CharacterDisplay.cs | 2 +- .../Driver/GroveCharacterDisplay.cs | 2 +- .../Driver/I2cCharacterDisplay.Enums.cs | 4 +- .../Driver/I2cCharacterDisplay.cs | 9 +- .../CharacterDisplay_Sample/MeadowApp.cs | 4 +- .../Driver/FourDigitSevenSegment.cs | 3 +- .../Displays.Max7219/Driver/Max7219.cs | 2 +- .../Displays.Pcd8544/Driver/Pcd8544.cs | 2 +- .../Displays.Sh110x/Driver/Sh110x.Enums.cs | 2 +- .../Displays.Sh110x/Driver/Sh110x.cs | 7 +- .../Samples/Sh1107_Sample/MeadowApp.cs | 2 +- .../Driver/Drivers/Ssd1306.cs | 2 +- .../Driver/Drivers/Ssd1309.cs | 2 +- .../Driver/SSd130xBase.Enums.cs | 2 +- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 7 +- .../Displays.Ssd1327/Driver/Ssd1327.cs | 2 +- .../Displays.St7565/Driver/St7565.cs | 2 +- .../Displays.TftSpi/Driver/TftSpiBase.cs | 2 +- .../Displays.ePaper/Driver/ePaperBase.cs | 2 +- .../Driver/Ads1x15Base.Enums.cs | 4 +- .../ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs | 9 +- .../ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs | 2 +- .../ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs | 2 +- .../Samples/Ads1015_Sample/MeadowApp.cs | 2 +- .../Samples/Ads1115_Sample/MeadowApp.cs | 2 +- .../Driver/At24Cxx.Enums.cs | 2 +- .../ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs | 7 +- .../Driver/Emc2101.Enums.cs | 6 +- .../Driver/Emc2101.cs | 8 +- .../Driver/As1115.Enums.cs | 4 +- .../ICs.IOExpanders.As1115/Driver/As1115.cs | 9 +- .../Driver/Ds3502.Enums.cs | 4 +- .../ICs.IOExpanders.Ds3502/Driver/Ds3502.cs | 9 +- .../Driver/Ht16k33.Enums.cs | 4 +- .../ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs | 9 +- .../Driver/Is31fl3731.Enums.cs | 4 +- .../Driver/Is31fl3731.cs | 17 ++-- .../Driver/Mcp23xxx.Enums.cs | 2 +- .../Driver/Mcp23xxx.cs | 9 +- .../Mcp23x08_Input_Sample/MeadowApp.cs | 26 +++--- .../Mcp23x17_Input_Sample/MeadowApp.cs | 26 +++--- .../Driver/Pca9685.Enums.cs | 4 +- .../ICs.IOExpanders.Pca9685/Driver/Pca9685.cs | 10 +- .../Samples/Pca9685_Sample/MeadowApp.cs | 3 +- .../Driver/SerialWombatBase.Enums.cs | 2 +- .../Driver/SerialWombatBase.cs | 53 ++++++----- .../Driver/Tca9548A.Addresses.cs | 2 +- .../Driver/ICs.IOExpanders.x74595.csproj | 2 +- .../Driver/x74595.Enums.cs | 9 -- .../Driver/x74595.PinDefinitions.cs | 3 + .../ICs.IOExpanders.x74595/Driver/x74595.cs | 6 +- .../Leds.Apa102/Driver/Apa102.Enums.cs | 2 +- .../Leds.Apa102/Driver/Apa102.cs | 5 +- .../Driver/SparkFunQwiicLEDStick.Enums.cs | 4 +- .../Driver/SparkFunQwiicLEDStick.cs | 2 +- .../Leds.Pca9633/Driver/Pca9633.Enums.cs | 4 +- .../Leds.Pca9633/Driver/Pca9633.cs | 9 +- .../Driver/Motors.Tb67h420ftg.csproj | 9 +- .../RTCs.Ds1307/Driver/Ds1307.Enums.cs | 2 +- .../RTCs.Ds1307/Driver/Ds1307.cs | 51 +++++----- .../RTCs.Ds323x/Driver/Ds3231.Enums.cs | 20 ---- .../RTCs.Ds323x/Driver/Ds3231.cs | 5 +- .../RTCs.Ds323x/Driver/Ds323x.Enums.cs | 15 +++ .../RTCs.Ds323x/Driver/Ds323x.Registers.cs | 31 +++++++ .../RTCs.Ds323x/Driver/Ds323x.cs | 27 +----- .../Driver/AdafruitMPRLS.Enums.cs | 6 +- .../Driver/AdafruitMPRLS.cs | 29 +++--- .../Driver/Bh1900Nux.Address.cs | 2 +- .../Driver/Bh1900Nux.cs | 7 +- ...{Bme280.Addresses.cs => Bme280.Address.cs} | 4 +- .../Driver/Bme280.cs | 29 ++---- .../Samples/Bme280_Sample/MeadowApp.cs | 2 +- .../Driver/Bme68x.Enums.cs | 4 +- .../Driver/Bme68x.cs | 23 +++-- .../Driver/Drivers/Bme680.cs | 2 +- .../Driver/Drivers/Bme688.cs | 2 +- .../Samples/Bme680_Sample/MeadowApp.cs | 10 +- .../Samples/Bme688_Sample/MeadowApp.cs | 8 +- .../Driver/Bmp085.Enums.cs | 4 +- .../Driver/Bmp085.cs | 92 +++++++------------ .../Driver/Sensors.Atmospheric.Bmp085.csproj | 7 +- .../Driver/Bmp180.Enums.cs | 4 +- .../Driver/Bmp180.cs | 44 +++------ .../Driver/Ccs811.Enums.cs | 4 +- .../Driver/Ccs811.cs | 9 +- .../Samples/Ccs811_Sample/MeadowApp.cs | 4 +- .../Driver/DhtBase.Enums.cs | 4 +- .../Driver/DhtBase.cs | 50 +++++----- .../Driver/Drivers/Dht10.cs | 12 +-- .../Driver/Drivers/Dht12.cs | 9 +- .../Driver/Hih6130.Enums.cs | 4 +- .../Driver/Hih6130.cs | 29 +++--- .../Driver/Drivers/Extras/Htu31d.Enums.cs | 4 +- .../Driver/Drivers/Htu21d.cs | 2 +- .../Driver/Drivers/Htu31d.cs | 2 +- .../Driver/Htux1dBase.cs | 15 ++- .../Driver/Mpl3115a2.Addresses.cs | 4 +- .../Driver/Mpl3115a2.cs | 9 +- .../Driver/Ms5611.Enums.cs | 12 ++- .../Driver/Ms5611.cs | 46 +++++++--- .../Driver/Ms5611Base.cs | 25 ----- .../Driver/Ms5611I2c.cs | 44 --------- .../Driver/Ms5611Spi.cs | 42 --------- .../Driver/Sgp40.Enums.cs | 2 +- .../Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs | 40 ++++---- .../Driver/Sht31d.Enums.cs | 4 +- .../Driver/Sht31d.cs | 29 +++--- .../Driver/Sht4x.Enums.cs | 4 +- .../Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs | 24 ++--- .../Driver/Si70xx.Enums.cs | 2 +- .../Driver/Si70xx.cs | 16 ++-- .../Driver/Th02.Enums.cs | 4 +- .../Sensors.Atmospheric.Th02/Driver/Th02.cs | 16 ++-- .../Driver/Mlx90640.Enums.cs | 4 +- .../Driver/Mlx90640.cs | 16 ++-- .../Driver/MaxBotix.I2c.cs | 15 ++- .../Driver/MaxBotix.enums.cs | 4 +- .../Driver/Vl53l0x.Enums.cs | 4 +- .../Driver/Vl53l0x.cs | 20 ++-- .../Samples/Vl53l0x_Sample/MeadowApp.cs | 12 +-- .../Driver/Ags01Db.Enums.cs | 4 +- .../Driver/Ags01Db.cs | 14 ++- .../Driver/Ens160.Enums.cs | 2 +- .../Driver/Ens160.cs | 9 +- .../Samples/Ens160_Sample/MeadowApp.cs | 14 +-- .../Sensors.Environmental.NextPm.csproj | 2 +- .../Driver/Pmsa003i.Enums.cs | 2 +- .../Driver/Pmsa003i.cs | 11 ++- .../Driver/Scd4xBase.Enums.cs | 2 +- .../Driver/Scd4xBase.cs | 9 +- .../Driver/Sensors.Gnss.Mt3339.csproj | 7 +- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs | 4 +- .../Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs | 11 ++- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs | 2 +- .../Sensors.Hid.As5013/Driver/As5013.Enums.cs | 4 +- .../Sensors.Hid.As5013/Driver/As5013.cs | 2 +- .../Driver/BBQ10Keyboard.Enums.cs | 4 +- .../Driver/BBQ10Keyboard.cs | 2 +- .../Sensors.Hid.Mpr121/Driver/Mpr121.cs | 2 +- .../Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs | 4 +- .../Driver/Tsc2004.Enums.cs | 4 +- .../Sensors.Hid.Tsc2004/Driver/Tsc2004.cs | 2 +- .../Driver/Drivers/NesClassicController.cs | 2 +- .../Driver/Drivers/SnesClassicController.cs | 2 +- .../Driver/Drivers/WiiClassicController.cs | 2 +- .../Driver/Drivers/WiiClassicControllerPro.cs | 2 +- .../Driver/Drivers/WiiNunchuck.cs | 2 +- .../WiiExtensionControllerBase.Enums.cs | 4 +- .../Driver/Bh1745.Addresses.cs | 4 +- .../Sensors.Light.Bh1745/Driver/Bh1745.cs | 2 +- .../Driver/Bh1750.Addresses.cs | 4 +- .../Sensors.Light.Bh1750/Driver/Bh1750.cs | 2 +- .../Driver/Max44009.Enums.cs | 4 +- .../Sensors.Light.Max44009/Driver/Max44009.cs | 2 +- .../Driver/Si1145.Addresses.cs | 4 +- .../Sensors.Light.Si1145/Driver/Si1145.cs | 2 +- .../Driver/Tsl2591.Enums.cs | 4 +- .../Sensors.Light.Tsl2591/Driver/Tsl2591.cs | 2 +- .../Driver/Veml7700.Addresses.cs | 4 +- .../Sensors.Light.Veml7700/Driver/Veml7700.cs | 2 +- .../Driver/Nau7802.Enums.cs | 4 +- .../Driver/Nau7802.cs | 8 +- .../Driver/Drivers/Adxl345.cs | 2 +- .../Adxl345_Extras/Adxl345.Addresses.cs | 4 +- .../Driver/Drivers/Adxl362.cs | 2 +- .../Driver/Apds9960.Addresses.cs | 4 +- .../Driver/Apds9960.cs | 2 +- .../Driver/Bmi270.Enums.cs | 2 +- .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 2 +- .../Driver/Bno055.Enums.cs | 4 +- .../Sensors.Motion.Bno055/Driver/Bno055.cs | 2 +- .../Driver/Hmc5883.Addresses.cs | 4 +- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 2 +- .../Sensors.Motion.Hmc5883/Driver/Qmc5883.cs | 2 +- .../Driver/Lis2Mdl.Enums.cs | 2 +- .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 2 +- .../Driver/Lsm303agr.Enums.cs | 2 +- .../Driver/Lsm303agr.cs | 4 +- .../Driver/Mag3110.Addresses.cs | 4 +- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 2 +- .../Driver/Mma7660fc.Addresses.cs | 4 +- .../Driver/Mma7660fc.cs | 2 +- .../Driver/Mmc5603.Addresses.cs | 2 +- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 2 +- .../Driver/Mpu6050.Addresses.cs | 4 +- .../Sensors.Motion.Mpu6050/Driver/Mpu6050.cs | 2 +- .../Driver/Ina260.Enums.cs | 4 +- .../Sensors.Power.Ina260/Driver/Ina260.cs | 6 +- .../Driver/Lm75.Addresses.cs | 4 +- .../Sensors.Temperature.Lm75/Driver/Lm75.cs | 2 +- .../Driver/Drivers/Mcp9600.cs | 2 +- .../Driver/Drivers/Mcp9601.cs | 2 +- .../Driver/Mcp960x.Enums.cs | 4 +- .../Driver/Mcp9808.Enums.cs | 4 +- .../Driver/Mcp9808.cs | 2 +- .../Driver/Tmp102.Addresses.cs | 4 +- .../Driver/Tmp102.cs | 2 +- Source/Meadow.Foundation.sln | 3 - 201 files changed, 792 insertions(+), 833 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.Enums.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Registers.cs rename Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/{Bme280.Addresses.cs => Bme280.Address.cs} (86%) delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Base.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Spi.cs diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs index 8e5481dc86..b9f3022b6c 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs @@ -3,7 +3,7 @@ public partial class Tea5767 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs index 91b763409d..25a0f3b42e 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Audio.Radio /// /// Represents a TEA5767 radio /// - public partial class Tea5767 + public partial class Tea5767 : II2cPeripheral { /// /// I2C Communication bus used to communicate with the peripheral @@ -25,6 +25,11 @@ public partial class Tea5767 /// public bool IsMuted { get; set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new TEA5767 object using the default parameters /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs index 5e2d4649f7..3384dba39a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ch1115/Driver/Ch1115.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the Ch1115 family of displays /// - public partial class Ch1115 : IGraphicsDisplay, ISpiDevice + public partial class Ch1115 : IGraphicsDisplay, ISpiPeripheral { /// /// The display color mode - 1 bit per pixel monochrome diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs index 22516d5426..7b0d0ea84f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs @@ -120,7 +120,7 @@ public CharacterDisplay( /// The number of character columns /// True if this is a Seeed Studio Grove display (default is false) public CharacterDisplay(II2cBus i2cBus, - byte address = (byte)I2cCharacterDisplay.Addresses.Default, + byte address = (byte)I2cCharacterDisplay.Address.Default, byte rows = 4, byte columns = 20, bool isGroveDisplay = false) { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs index 0d45c569a8..4e866e909a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs @@ -16,7 +16,7 @@ public class GroveCharacterDisplay : I2cCharacterDisplay /// The number of character rows /// The number of character columns public GroveCharacterDisplay(II2cBus i2cBus, - byte address = (byte)Addresses.Address_0x3E, + byte address = (byte)Address.Address_0x3E, byte rows = 2, byte columns = 16) : base(i2cBus, address, rows, columns) { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs index 6fe29f48d5..cef498f95a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs @@ -3,9 +3,9 @@ public partial class I2cCharacterDisplay { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x27 diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs index b69124be20..7bfd85b652 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.Displays.Lcd /// /// Represents a character display using I2C /// - public partial class I2cCharacterDisplay : ICharacterDisplay + public partial class I2cCharacterDisplay : ICharacterDisplay, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -121,7 +126,7 @@ protected enum I2CCommands /// I2C address /// Number of character rows /// Number of character columns - public I2cCharacterDisplay(II2cBus i2cBus, byte address = (byte)Addresses.Default, byte rows = 4, byte columns = 20) + public I2cCharacterDisplay(II2cBus i2cBus, byte address = (byte)Address.Default, byte rows = 4, byte columns = 20) { i2cComms = new I2cCommunications(i2cBus, address); DisplayConfig = new TextDisplayConfig() { Width = columns, Height = rows }; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs index 5f1df27532..c21c1dd024 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs @@ -63,7 +63,7 @@ void InitI2c() display = new CharacterDisplay ( i2cBus: Device.CreateI2cBus(I2cBusSpeed.Standard), - address: (byte)I2cCharacterDisplay.Addresses.Default, + address: (byte)I2cCharacterDisplay.Address.Default, rows: 4, columns: 20 ); } @@ -75,7 +75,7 @@ void InitGrove() display = new CharacterDisplay ( i2cBus: Device.CreateI2cBus(I2cBusSpeed.Standard), - address: (byte)I2cCharacterDisplay.Addresses.Grove, + address: (byte)I2cCharacterDisplay.Address.Grove, rows: 2, columns: 16, isGroveDisplay: true ); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/FourDigitSevenSegment.cs b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/FourDigitSevenSegment.cs index 0a8807da19..7df8edc0ae 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/FourDigitSevenSegment.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Led.FourDigitSevenSegment/Driver/FourDigitSevenSegment.cs @@ -12,8 +12,7 @@ public class FourDigitSevenSegment CancellationTokenSource cts = null; readonly IDigitalOutputPort[] digits; - - SevenSegment[] sevenSegments; + readonly SevenSegment[] sevenSegments; /// /// Creates a SevenSegment connected to the especified IPins to a IODevice diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs index 3a6f5b8cd9..30c7219e88 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Max7219/Driver/Max7219.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Displays /// /// Max7219 LED matrix driver /// - public partial class Max7219 : ISpiDevice + public partial class Max7219 : ISpiPeripheral { /// /// Number of digits per Module diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs index 26d6d72040..154a509ad9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Pcd8544/Driver/Pcd8544.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Displays /// /// Represents a Pcd8544 monochrome display /// - public class Pcd8544 : IGraphicsDisplay, ISpiDevice + public class Pcd8544 : IGraphicsDisplay, ISpiPeripheral { /// /// Display color mode diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs index 343c145196..d7b51feabe 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs @@ -66,7 +66,7 @@ internal enum DisplayCommand : byte /// /// Valid I2C addresses for the display /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x3C diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 42d7ebef21..37df60e8f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the Sh110x family of displays /// - public abstract partial class Sh110x : IGraphicsDisplay, ISpiDevice + public abstract partial class Sh110x : IGraphicsDisplay, ISpiPeripheral, II2cPeripheral { /// /// The display color mode - 1 bit per pixel monochrome @@ -60,6 +60,11 @@ public SpiClockConfiguration.Mode SpiBusMode set => spiComms.BusMode = value; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// The connection type (I2C or SPI) /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs index ae107cdbc0..886038ec61 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs @@ -20,7 +20,7 @@ public override Task Initialize() var sh1107 = new Sh1107 ( i2cBus: Device.CreateI2cBus(), - address: (byte)Addresses.Address_0x3C, + address: (byte)Address.Address_0x3C, width: 128, height: 128 ); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index 7e2646d664..1452b0081f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -54,7 +54,7 @@ public Ssd1306(ISpiBus spiBus, /// Address of the bus on the I2C display. /// Type of SSD1306 display (default = 128x64 pixel display). public Ssd1306(II2cBus i2cBus, - byte address = (byte)Addresses.Default, + byte address = (byte)Address.Default, DisplayType displayType = DisplayType.OLED128x64) { this.displayType = displayType; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs index 05e69772c8..bc2b3c1675 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs @@ -36,7 +36,7 @@ public Ssd1309(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalOutput /// /// I2cBus connected to display /// Address of the bus on the I2C display. - public Ssd1309(II2cBus i2cBus, byte address = (byte)Addresses.Default) : + public Ssd1309(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, DisplayType.OLED128x64) { } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs index 61e5002b9b..df6e4ccfc2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs @@ -5,7 +5,7 @@ public abstract partial class Ssd130xBase /// /// Valid I2C addresses for the display /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x3C diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index e43fc7b346..87f92d6c5f 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Displays /// /// Represents the SSD130x family of OLED displays /// - public abstract partial class Ssd130xBase : IGraphicsDisplay, ISpiDevice + public abstract partial class Ssd130xBase : IGraphicsDisplay, ISpiPeripheral, II2cPeripheral { /// /// The display color mode @@ -50,6 +50,11 @@ public Frequency SpiBusSpeed set => spiComms.BusSpeed = value; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// The default SPI bus mode for the device /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs index fcf2be5ef0..8749a93282 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd1327/Driver/Ssd1327.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provides an interface to the Ssd1327 greyscale OLED display /// - public partial class Ssd1327 : IGraphicsDisplay, ISpiDevice + public partial class Ssd1327 : IGraphicsDisplay, ISpiPeripheral { /// /// The display color mode (4 bit per pixel grayscale) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs index e3ab5da622..59314c9e72 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.St7565/Driver/St7565.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Displays /// /// Provide an interface to the ST7565 family of displays /// - public partial class St7565 : IGraphicsDisplay, ISpiDevice + public partial class St7565 : IGraphicsDisplay, ISpiPeripheral { /// /// The display color mode - 1 bit per pixel monochrome diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 8a84819ef8..4f52203684 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Displays { - public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiDevice + public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiPeripheral { //these displays typically support 16 & 18 bit, some also include 8, 9, 12 and/or 24 bit color diff --git a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs index be73046883..f07678cb18 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.ePaper/Driver/ePaperBase.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Displays /// /// Represents a base ePaper display driver /// - public abstract class EPaperBase : ISpiDevice + public abstract class EPaperBase : ISpiPeripheral { /// /// The default SPI bus speed for the device diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs index 112545c7f0..9582fa3e17 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs @@ -3,9 +3,9 @@ public abstract partial class Ads1x15Base { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs index cbed8c4296..29220bf38b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.ICs.ADC /// /// Encapsulation for ADCs based upon the Ads1x1x family of chips. /// - public abstract partial class Ads1x15Base : PollingSensorBase + public abstract partial class Ads1x15Base : PollingSensorBase, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -39,7 +44,7 @@ public abstract partial class Ads1x15Base : PollingSensorBase /// /// protected Ads1x15Base(II2cBus i2cBus, - Addresses address, + Address address, MeasureMode mode, ChannelSetting channel) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs index d3849baddc..741c0adff1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs @@ -65,7 +65,7 @@ public SampleRateSetting SampleRate /// Create a new ADS1015 object /// public Ads1015(II2cBus i2cBus, - Addresses address = Addresses.Default, + Address address = Address.Default, MeasureMode mode = MeasureMode.OneShot, ChannelSetting channel = ChannelSetting.A0A1Differential, SampleRateSetting sampleRate = SampleRateSetting.Sps1600) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs index de7efba83d..309bb5c367 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs @@ -64,7 +64,7 @@ public SampleRateSetting SampleRate /// Create a new ADS1115 object /// public Ads1115(II2cBus i2cBus, - Addresses address = Addresses.Default, + Address address = Address.Default, MeasureMode mode = MeasureMode.OneShot, ChannelSetting channel = ChannelSetting.A0A1Differential, SampleRateSetting sampleRate = SampleRateSetting.Sps128) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs index 9f3bd1e77a..5d8d9987cd 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs @@ -18,7 +18,7 @@ public override async Task Initialize() adc = new Ads1015( Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.FastPlus), - Ads1x15Base.Addresses.Default, + Ads1x15Base.Address.Default, Ads1x15Base.MeasureMode.Continuous, Ads1x15Base.ChannelSetting.A0SingleEnded, Ads1015.SampleRateSetting.Sps3300); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs index f85f76cec8..1d64320625 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs @@ -18,7 +18,7 @@ public override async Task Initialize() adc = new Ads1115( Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.FastPlus), - Ads1x15Base.Addresses.Default, + Ads1x15Base.Address.Default, Ads1x15Base.MeasureMode.Continuous, Ads1x15Base.ChannelSetting.A0SingleEnded, Ads1115.SampleRateSetting.Sps128); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs index 740aace3e1..af7249c858 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs @@ -3,7 +3,7 @@ public partial class At24Cxx { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs index 9ecb3c001c..ad7dde192a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.ICs.EEPROM /// /// Encapsulation for EEPROMs based upon the AT24Cxx family of chips /// - public partial class At24Cxx + public partial class At24Cxx : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs index b0afc11f2b..d5255c21f1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs @@ -131,11 +131,11 @@ public enum DataRate : byte /// /// 32hz /// - _32hz, + _32hz, } /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// public enum Address : byte { @@ -188,4 +188,4 @@ public enum LutIndex : byte Index7, } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs index 1ccee0403c..aec5e2af8f 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs @@ -10,7 +10,8 @@ namespace Meadow.Foundation.ICs.FanControllers /// Represents an EMC2101 fan controller and temperature monitor /// public partial class Emc2101 : - PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)> + PollingSensorBase<(Temperature? InternalTemperature, Temperature? ExternalTemperature, AngularVelocity? FanSpeed)>, + II2cPeripheral { /// /// Internal Temperature changed event @@ -42,6 +43,11 @@ public partial class Emc2101 : /// public AngularVelocity? FanSpeed => Conditions.FanSpeed; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Get/Set the minimum fan speed for the currently connected fan /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs index dfdd1a420c..6b1ed4301b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs @@ -3,9 +3,9 @@ public partial class As1115 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x00 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs index 785bea59f5..be521facc8 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// Represents an As1115 led driver and key scanner /// - public partial class As1115 : IGraphicsDisplay, IDisposable + public partial class As1115 : IGraphicsDisplay, II2cPeripheral, IDisposable { /// /// Event raised when any key scan button is pressed @@ -45,6 +45,11 @@ public partial class As1115 : IGraphicsDisplay, IDisposable /// protected readonly II2cCommunications i2cComms; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// The display color mode (1 bit per pixel) /// @@ -95,7 +100,7 @@ public partial class As1115 : IGraphicsDisplay, IDisposable /// Interrupt pin /// Address of the bus on the I2C display. public As1115(II2cBus i2cBus, IPin buttonInterruptPin, - byte address = (byte)Addresses.Default) + byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs index cf544ca5dd..63ac3ffe32 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs @@ -3,10 +3,10 @@ public partial class Ds3502 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// Controlled by pulling A0 and A1 high or low /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x28 (A0 low, A1 low) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs index 7a674efdc5..2d2d997da1 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// Represents a DS3502 digital potentiometer /// - public partial class Ds3502 + public partial class Ds3502 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Default I2C bus speed /// @@ -24,7 +29,7 @@ public partial class Ds3502 /// /// Address of the bus on the I2C display /// I2C bus instance - public Ds3502(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Ds3502(II2cBus i2cBus, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs index 1798ad84e4..8b644dad3e 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs @@ -5,9 +5,9 @@ public partial class Ht16k33 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x70 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs index 65bfb103ed..e574db66de 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs @@ -6,8 +6,13 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// Represents an Ht16k33 128 led driver and 39 key scanner /// - public partial class Ht16k33 + public partial class Ht16k33 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -28,7 +33,7 @@ public partial class Ht16k33 /// /// Address of the bus on the I2C display /// I2C bus instance - public Ht16k33(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Ht16k33(II2cBus i2cBus, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address, 8, 17); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs index 9eb0011ac7..ca73c3baad 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs @@ -3,9 +3,9 @@ public partial class Is31fl3731 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x74 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs index 056eaa2f6d..0e59c5f8e3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs @@ -9,24 +9,23 @@ namespace Meadow.Foundation.ICs.IOExpanders /// The Is31fl3731 is a compact LED driver for 144 single LEDs /// /// Based on https://github.com/adafruit/Adafruit_IS31FL3731 - public partial class Is31fl3731 + public partial class Is31fl3731 : II2cPeripheral { const byte RegConfig = 0x00; const byte RegConfigPictureMode = 0x00; - //const byte RegConfigAutoPlayMode = 0x08; - //const byte RegConfigAudioPlayMode = 0x18; - //const byte ConfPictureMode = 0x00; - //const byte ConfAutoFrameMode = 0x04; - //const byte ConfAudioMode = 0x08; const byte DisplayOptionRegister = 0x05; const byte PictureFrameReg = 0x01; const byte RegShutdown = 0x0A; - //const byte RegAudioSync = 0x06; const byte CommandRegister = 0xFD; - const byte CommandFunctionReg = 0x0B; //'page nine' + const byte CommandFunctionReg = 0x0B; + + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -43,7 +42,7 @@ public partial class Is31fl3731 /// /// The I2C bus /// The I2C address - public Is31fl3731(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Is31fl3731(II2cBus i2cBus, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); Frame = 0; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs index 972ef67f6a..7ae7a2e874 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs @@ -5,7 +5,7 @@ public partial class Mcp23xxx /// /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x20 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index efe0dcdf66..906c2830d8 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.ICs.IOExpanders /// /// Provide an interface to connect to a MCP2xxx port expander /// - abstract partial class Mcp23xxx : IDigitalInputOutputController, ISpiDevice + abstract partial class Mcp23xxx : IDigitalInputOutputController, ISpiPeripheral, II2cPeripheral { /// /// Raised when the value of any pin configured for input interrupts changes @@ -52,8 +52,12 @@ public SpiClockConfiguration.Mode SpiBusMode set => (mcpDevice as ISpiCommunications).BusMode = value; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + private readonly IByteCommunications mcpDevice; - private IDigitalInputPort interruptPort; private IDigitalOutputPort resetPort; private IDictionary inputPorts; @@ -108,7 +112,6 @@ void Initialize(IDigitalInputPort interruptPort = null, // raise an exception if not. also, doc in constructor what we expect from an interrupt port if (interruptPort != null) { - this.interruptPort = interruptPort; interruptPort.Changed += InterruptPortChanged; } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs index 844eeafbf5..922c56bbc4 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs @@ -20,18 +20,18 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - + IDigitalInputPort interruptPort = Device.CreateDigitalInputPort(Device.Pins.D00, InterruptMode.EdgeBoth, ResistorMode.InternalPullDown); IDigitalOutputPort resetPort = Device.CreateDigitalOutputPort(Device.Pins.D01); - mcp = new Mcp23008(Device.CreateI2cBus(), (byte)Addresses.Address_0x20, interruptPort, resetPort); + mcp = new Mcp23008(Device.CreateI2cBus(), (byte)Address.Address_0x20, interruptPort, resetPort); return base.Initialize(); } - + public override Task Run() { - // TestInterrupts(); + // TestInterrupts(); return TestDigitalInputPorts(1000); @@ -40,19 +40,19 @@ public override Task Run() void TestBulkPinReads(int loopCount) { - for (int l = 0; l < loopCount; l++) + for (int l = 0; l < loopCount; l++) { byte mask = mcp.ReadFromPorts(); var bits = new BitArray(new byte[] { mask }); var bitsString = new StringBuilder(); - - foreach (var bit in bits) + + foreach (var bit in bits) { - bitsString.Append((bool)bit ? "1":"0"); + bitsString.Append((bool)bit ? "1" : "0"); } - Resolver.Log.Info($"Port Values, raw:{mask:X}, bits: { bitsString}"); + Resolver.Log.Info($"Port Values, raw:{mask:X}, bits: {bitsString}"); Thread.Sleep(100); } @@ -69,7 +69,7 @@ async Task TestDigitalInputPorts(int loopCount) var in06 = mcp.CreateDigitalInputPort(mcp.Pins.GP6, InterruptMode.EdgeFalling, ResistorMode.InternalPullUp); var in07 = mcp.CreateDigitalInputPort(mcp.Pins.GP7, InterruptMode.EdgeFalling, ResistorMode.InternalPullUp); - var inputPorts = new List() + var inputPorts = new List() { in00, in01, in02, in03, in04, in05, in06, in07 }; @@ -77,11 +77,11 @@ async Task TestDigitalInputPorts(int loopCount) string output; // read all the ports, sleep for 100ms and repeat a few times. - for (int l = 0; l < loopCount; l++) + for (int l = 0; l < loopCount; l++) { output = string.Empty; - foreach (var inputPort in inputPorts) + foreach (var inputPort in inputPorts) { //Resolver.Log.Info($"InputPort {inputPort.Pin.Name} Read: {inputPort.State}"); output += $"{(inputPort.State ? 1 : 0)}"; @@ -91,7 +91,7 @@ async Task TestDigitalInputPorts(int loopCount) } // cleanup - for (int i = 0; i < inputPorts.Count; i++) + for (int i = 0; i < inputPorts.Count; i++) { inputPorts[i].Dispose(); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs index 0946c28f13..5c534cde33 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs @@ -23,7 +23,7 @@ public override Task Initialize() IDigitalInputPort interruptPort = Device.CreateDigitalInputPort(Device.Pins.D00, InterruptMode.EdgeBoth, ResistorMode.InternalPullDown); IDigitalOutputPort resetPort = Device.CreateDigitalOutputPort(Device.Pins.D01); - mcp = new Mcp23017(Device.CreateI2cBus(), (byte)Addresses.Address_0x20, interruptPort, resetPort); + mcp = new Mcp23017(Device.CreateI2cBus(), (byte)Address.Address_0x20, interruptPort, resetPort); mcp.InputChanged += Mcp_InputChanged; @@ -39,26 +39,26 @@ public override Task Run() { TestInterrupts(); - // return TestDigitalInputPorts(1000); + // return TestDigitalInputPorts(1000); return base.Run(); } void TestBulkPinReads(int loopCount) { - for (int l = 0; l < loopCount; l++) + for (int l = 0; l < loopCount; l++) { byte mask = mcp.ReadFromPorts(); var bits = new BitArray(new byte[] { mask }); var bitsString = new StringBuilder(); - - foreach (var bit in bits) + + foreach (var bit in bits) { - bitsString.Append((bool)bit ? "1":"0"); + bitsString.Append((bool)bit ? "1" : "0"); } - Resolver.Log.Info($"Port Values, raw:{mask:X}, bits: { bitsString}"); + Resolver.Log.Info($"Port Values, raw:{mask:X}, bits: {bitsString}"); Thread.Sleep(100); } @@ -84,20 +84,20 @@ async Task TestDigitalInputPorts(int loopCount) var in14 = mcp.CreateDigitalInputPort(mcp.Pins.GPB6, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp); var in15 = mcp.CreateDigitalInputPort(mcp.Pins.GPB7, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp); - var inputPorts = new List() + var inputPorts = new List() { - in00, in01, in02, in03, in04, in05, in06, in07, + in00, in01, in02, in03, in04, in05, in06, in07, in08, in09, in10, in11, in12, in13, in14, in15, }; string output; // read all the ports, sleep for 100ms and repeat a few times. - for (int l = 0; l < loopCount; l++) + for (int l = 0; l < loopCount; l++) { output = string.Empty; - foreach (var inputPort in inputPorts) + foreach (var inputPort in inputPorts) { //Resolver.Log.Info($"InputPort {inputPort.Pin.Name} Read: {inputPort.State}"); output += $"{(inputPort.State ? 1 : 0)}"; @@ -107,7 +107,7 @@ async Task TestDigitalInputPorts(int loopCount) } // cleanup - for (int i = 0; i < inputPorts.Count; i++) + for (int i = 0; i < inputPorts.Count; i++) { inputPorts[i].Dispose(); } @@ -127,7 +127,7 @@ void TestInterrupts() var inputPort05 = mcp.CreateDigitalInputPort(mcp.Pins.GPA5, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); var inputPort06 = mcp.CreateDigitalInputPort(mcp.Pins.GPA6, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); var inputPort07 = mcp.CreateDigitalInputPort(mcp.Pins.GPA7, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); - + var inputPort08 = mcp.CreateDigitalInputPort(mcp.Pins.GPB0, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); var inputPort09 = mcp.CreateDigitalInputPort(mcp.Pins.GPB1, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); var inputPort10 = mcp.CreateDigitalInputPort(mcp.Pins.GPB2, InterruptMode.EdgeBoth, ResistorMode.InternalPullUp, debounceTime); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs index 93911d8870..7565486850 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs @@ -3,9 +3,9 @@ public partial class Pca9685 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs index c0af6687ac..58389192cc 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs @@ -11,6 +11,11 @@ namespace Meadow.Foundation.ICs.IOExpanders /// All PWM channels run at the same Frequency public partial class Pca9685 { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -18,7 +23,6 @@ public partial class Pca9685 private readonly Frequency frequency; - //# Registers/etc. const byte Mode1 = 0x00; const byte Mode2 = 0x01; const byte SubAdr1 = 0x02; @@ -55,7 +59,7 @@ public partial class Pca9685 /// The I2C bus connected to the peripheral /// The frequency /// The I2C address - public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Addresses.Default) + public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Address.Default) { i2CBus = i2cBus; this.address = address; @@ -68,7 +72,7 @@ public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Address /// /// The I2C bus connected to the peripheral /// The I2C address - public Pca9685(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Pca9685(II2cBus i2cBus, byte address = (byte)Address.Default) : this(i2cBus, new Frequency(IPwmOutputController.DefaultPwmFrequency, Frequency.UnitType.Hertz), address) { } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs index 38500ce0f9..4949a83f2f 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.ICs.IOExpanders; using Meadow.Hardware; -using System; using System.Threading.Tasks; namespace ICs.IOExpanders.Pca9685_Sample @@ -18,7 +17,7 @@ public override Task Initialize() Resolver.Log.Info("Initialize..."); var i2CBus = Device.CreateI2cBus(I2cBusSpeed.FastPlus); - pca9685 = new Pca9685(i2CBus, new Meadow.Units.Frequency(50, Meadow.Units.Frequency.UnitType.Hertz), (byte)Pca9685.Addresses.Default); + pca9685 = new Pca9685(i2CBus, new Meadow.Units.Frequency(50, Meadow.Units.Frequency.UnitType.Hertz), (byte)Pca9685.Address.Default); pca9685.Initialize(); return base.Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs index e47849fa27..3099d7df41 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs @@ -6,7 +6,7 @@ public partial class SerialWombatBase { /// - /// Valid addresses for the Chip. + /// Valid I2C addresses for the device /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs index 5da3fcac57..e24ed96e8c 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs @@ -9,17 +9,23 @@ namespace Meadow.Foundation.ICs.IOExpanders { - public abstract partial class SerialWombatBase : IDigitalInputOutputController, IPwmOutputController, IAnalogInputController + public abstract partial class SerialWombatBase : IDigitalInputOutputController, IPwmOutputController, + IAnalogInputController, II2cPeripheral { - private II2cBus _bus; // TODO: add uart support - private WombatVersion _version = null!; - private WombatInfo? _info; - private Guid? _uuid; + private readonly II2cBus i2cBus; + private WombatVersion version = null!; + private WombatInfo? wombatInfo; + private Guid? uuid; /// - /// The I2C address + /// The default I2C address for the peripheral /// - public Address _address { get; } + public byte I2cDefaultAddress => (byte)Address.Default; + + /// + /// The current I2C address for the peripheral + /// + public Address I2cAddress { get; } /// /// The sync root object @@ -34,11 +40,10 @@ public abstract partial class SerialWombatBase : IDigitalInputOutputController, /// /// Create SerialWombatBase object /// - protected SerialWombatBase(II2cBus bus, Address address = SerialWombatBase.Address.Default, Logger? logger = null) + protected SerialWombatBase(II2cBus bus, Address address = Address.Default, Logger? logger = null) { Pins = new PinDefinitions(this); - _bus = bus; - _address = address; + i2cBus = bus; Logger = logger; } @@ -52,7 +57,7 @@ protected SerialWombatBase(II2cBus bus, Address address = SerialWombatBase.Addre /// protected void SendPacket(Span tx, Span rx) { - _bus.Exchange((byte)_address, tx, rx); + i2cBus.Exchange((byte)I2cAddress, tx, rx); } /// @@ -62,12 +67,12 @@ public WombatVersion Version { get { - if (_version == null) // lazy load + if (version == null) // lazy load { try { var response = SendCommand(Commands.GetVersion); - _version = new WombatVersion(Encoding.ASCII.GetString(response)); + version = new WombatVersion(Encoding.ASCII.GetString(response)); } catch (Exception ex) { @@ -75,7 +80,7 @@ public WombatVersion Version } } - return _version ?? new WombatVersion("0"); + return version ?? new WombatVersion("0"); } } @@ -86,13 +91,13 @@ public WombatInfo Info { get { - if (_info == null) // lazy load + if (wombatInfo == null) // lazy load { try { var id = (ushort)ReadFlash(FlashRegister18.DeviceID); var rev = (ushort)(ReadFlash(FlashRegister18.DeviceRevision) & 0xf); - _info = new WombatInfo(id, rev); + wombatInfo = new WombatInfo(id, rev); } catch (Exception ex) { @@ -100,7 +105,7 @@ public WombatInfo Info } } - return _info ?? new WombatInfo(0, 0); + return wombatInfo ?? new WombatInfo(0, 0); } } @@ -111,7 +116,7 @@ public Guid Uuid { get { - if (_uuid == null) // lazy load + if (uuid == null) // lazy load { var address = FlashRegister18.DeviceUuid; @@ -126,10 +131,10 @@ public Guid Uuid bytes[index++] = (byte)(data & 0xff >> 16); } - _uuid = new Guid(bytes); + uuid = new Guid(bytes); } - return _uuid.Value; + return uuid.Value; } } @@ -141,7 +146,7 @@ protected byte[] SendCommand(in Span command) lock (SyncRoot) { var rx = new byte[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - _bus.Exchange((byte)_address, command, rx); + i2cBus.Exchange((byte)I2cAddress, command, rx); Logger?.Trace($"SW: TX {BitConverter.ToString(command.ToArray())}"); Logger?.Trace($"SW: RX {BitConverter.ToString(rx)}"); @@ -447,7 +452,7 @@ public IPwmPort CreatePwmPort(IPin pin, Frequency frequency, float dutyCycle = 0 { var channel = pin.SupportedChannels.OfType().FirstOrDefault(); - if (channel == null) throw new NotSupportedException($"Pin {pin.Name} Does not support PWM"); + if (channel == null) { throw new NotSupportedException($"Pin {pin.Name} Does not support PWM"); } return new PwmPort(this, pin, channel); } @@ -457,7 +462,7 @@ public IPwmPort CreatePwmPort(IPin pin, Frequency frequency, float dutyCycle = 0 /// public IAnalogInputPort CreateAnalogInputPort(IPin pin, int sampleCount = 64) { - return CreateAnalogInputPort((IPin)pin, sampleCount, TimeSpan.FromSeconds(1), new Voltage(0)); + return CreateAnalogInputPort(pin, sampleCount, TimeSpan.FromSeconds(1), new Voltage(0)); } /// @@ -467,7 +472,7 @@ public IAnalogInputPort CreateAnalogInputPort(IPin pin, int sampleCount, TimeSpa { var channel = pin.SupportedChannels.OfType().FirstOrDefault(); - if (channel == null) throw new NotSupportedException($"Pin {pin.Name} Does not support ADC"); + if (channel == null) { throw new NotSupportedException($"Pin {pin.Name} Does not support ADC"); } return new AnalogInputPort(this, pin, channel, sampleCount); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.Addresses.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.Addresses.cs index a76df3502e..cb0512005f 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.TCA9548A/Driver/Tca9548A.Addresses.cs @@ -3,7 +3,7 @@ public partial class Tca9548a { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// public enum Addresses : byte { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj index 84ccaa18b7..1624a49a57 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/ICs.IOExpanders.x74595.csproj @@ -13,7 +13,7 @@ Meadow.Foundation, IOExpanders, x74595 0.1.52 true - x74595 I2C shift register digital output expander + x74595 SPI shift register digital output expander diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.Enums.cs deleted file mode 100644 index 957a8ac305..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.Enums.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Meadow.Foundation.ICs.IOExpanders -{ - public partial class x74595 - { - - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.PinDefinitions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.PinDefinitions.cs index a9eb18b06f..f074d4e064 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.PinDefinitions.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.PinDefinitions.cs @@ -11,6 +11,9 @@ public partial class x74595 /// public class PinDefinitions : IPinDefinitions { + /// + /// The controller for the pin definitions + /// public IPinController Controller { get; set; } /// diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs index cc80b97026..b7c9f76aca 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.x74595/Driver/x74595.cs @@ -7,13 +7,13 @@ namespace Meadow.Foundation.ICs.IOExpanders { /// - /// Provide an interface to connect to a 74595 shift register. + /// Provide an interface to connect to a 74595 shift register /// /// /// Control the outputs from a 74595 shift register (or a chain of shift registers) - /// using a SPI interface. + /// using a SPI interface /// - public partial class x74595 : IDigitalOutputController, ISpiDevice + public partial class x74595 : IDigitalOutputController, ISpiPeripheral { /// /// The pin definitions diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.Enums.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.Enums.cs index c1e4ceadd7..f7d595d8d5 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.Enums.cs @@ -33,4 +33,4 @@ public enum PixelOrder BGR } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs index e0b8b8cf6f..5a67cf5016 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/Apa102.cs @@ -5,10 +5,9 @@ namespace Meadow.Foundation.Leds { /// - /// Represents APA102/Dotstar Led(s). + /// Represents APA102/Dotstar Led(s) /// - /// Based on logic from https://github.com/adafruit/Adafruit_CircuitPython_DotStar/blob/master/adafruit_dotstar.py - public partial class Apa102 : IApa102, ISpiDevice + public partial class Apa102 : IApa102, ISpiPeripheral { /// /// The default SPI bus speed for the device diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs index 331f90738b..fb96c2533c 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs @@ -3,9 +3,9 @@ public partial class SparkFunQwiicLEDStick { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x22 diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs index a805fe621b..db08a83977 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs @@ -24,7 +24,7 @@ public partial class SparkFunQwiicLEDStick : I2cCommunications, IApa102 /// The I2C bus /// The I2C address public SparkFunQwiicLEDStick(II2cBus i2cbus, - byte address = (byte)Addresses.Default) + byte address = (byte)Address.Default) : base(i2cbus, address, 1, 16) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs index a027732ae4..d6b342173b 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs @@ -3,9 +3,9 @@ public partial class Pca9633 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x62 diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs index 5e105799f8..c3584898f3 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs @@ -7,6 +7,11 @@ namespace Meadow.Foundation.Leds /// public partial class Pca9633 { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -40,7 +45,7 @@ public bool IsOn /// /// i2c bus /// i2c address - public Pca9633(II2cBus i2cBus, Addresses address) + public Pca9633(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } @@ -50,7 +55,7 @@ public Pca9633(II2cBus i2cBus, Addresses address) /// /// i2c bus /// i2c address - public Pca9633(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Pca9633(II2cBus i2cBus, byte address) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj index ea7a9c28d0..64353463a9 100644 --- a/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj +++ b/Source/Meadow.Foundation.Peripherals/Motors.Tb67h420ftg/Driver/Motors.Tb67h420ftg.csproj @@ -10,16 +10,13 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Motors.Tb67h420ftg https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Motor, HBridge, Tb67h420ftg + Meadow,Meadow.Foundation,Motor,HBridge,Tb67h420ftg 0.1.22 true Tb67h420ftg digital input motor controller - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs index f14a713c14..860efd6aaf 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs @@ -3,7 +3,7 @@ public partial class Ds1307 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs index 01ce3fd1ab..acbbc09c19 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.RTCs /// /// Represents a DS1307 real-time clock /// - public partial class Ds1307 + public partial class Ds1307 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + const int OriginYear = 1980; readonly II2cBus i2cBus; @@ -76,8 +81,7 @@ public DateTime GetTime() /// The new time public void SetTime(DateTime time) { - var data = new List(); - data.Add(0); + var data = new List { 0 }; data.AddRange(ToRTCTime(time)); i2cBus.Write((byte)Address.Default, data.ToArray()); @@ -90,7 +94,7 @@ public void SetTime(DateTime time) /// The number of bytes to read public byte[] ReadRAM(int offset, int count) { - var data = new byte[count]; + var data = new byte[count]; i2cBus.Write((byte)Address.Default, new byte[] { (byte)(0x08 + offset) }); i2cBus.Read((byte)Address.Default, data); return data; @@ -104,8 +108,10 @@ public byte[] ReadRAM(int offset, int count) /// public void WriteRAM(int offset, params byte[] data) { - var d = new List(); - d.Add((byte)(0x08 + offset)); // target start register offset + var d = new List + { + (byte)(0x08 + offset) // target start register offset + }; d.AddRange(data); i2cBus.Write((byte)Address.Default, d.ToArray()); @@ -118,31 +124,16 @@ public void WriteRAM(int offset, params byte[] data) /// Throw if invalid frequency is selected public void SquareWaveOutput(SquareWaveFrequency freq) { - byte registerData; - - switch (freq) + var registerData = freq switch { - case SquareWaveFrequency.Wave_1000Hz: - registerData = (1 << 4); - break; - case SquareWaveFrequency.Wave_4096Hz: - registerData = (1 << 4) | (1 << 0); - break; - case SquareWaveFrequency.Wave_8192Hz: - registerData = (1 << 4) | (1 << 1); - break; - case SquareWaveFrequency.Wave_32768Hz: - registerData = (1 << 4) | (1 << 0) | (1 << 1); - break; - case SquareWaveFrequency.Wave_Low: - registerData = 0; - break; - case SquareWaveFrequency.Wave_High: - registerData = (1 << 7); - break; - default: - throw new NotSupportedException(); - } + SquareWaveFrequency.Wave_1000Hz => (byte)(1 << 4), + SquareWaveFrequency.Wave_4096Hz => (byte)((1 << 4) | (1 << 0)), + SquareWaveFrequency.Wave_8192Hz => (byte)((1 << 4) | (1 << 1)), + SquareWaveFrequency.Wave_32768Hz => (byte)((1 << 4) | (1 << 0) | (1 << 1)), + SquareWaveFrequency.Wave_Low => (byte)0, + SquareWaveFrequency.Wave_High => (byte)(1 << 7), + _ => throw new NotSupportedException(), + }; // control register is at 0x07 i2cBus.Write((byte)Address.Default, new byte[] { 0x07, registerData }); //register and value diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.Enums.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.Enums.cs deleted file mode 100644 index 1273ab15c6..0000000000 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.Enums.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Meadow.Foundation.RTCs -{ - public partial class Ds3231 : Ds323x - { - /// - /// Valid addresses for the sensor. - /// - public enum Address : byte - { - /// - /// Bus address 0x68 - /// - Address_0x68 = 0x68, - /// - /// Default bus address - /// - Default = Address_0x68 - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs index 6b7b7dfeee..0f04cc3894 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs @@ -13,10 +13,7 @@ public partial class Ds3231 : Ds323x /// Digital pin connected to the alarm interrupt pin on the RTC. /// The I2C Bus the peripheral is connected to /// I2C Bus address of the peripheral - public Ds3231( - II2cBus i2cBus, - IPin interruptPin = null, - byte address = (byte)Address.Default) + public Ds3231(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Address.Default) : base(new I2cCommunications(i2cBus, address), interruptPin) { } diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs index 878ba0d47f..c71faca891 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs @@ -2,6 +2,21 @@ { public partial class Ds323x { + /// + /// Valid I2C addresses for the sensor + /// + public enum Address : byte + { + /// + /// Bus address 0x68 + /// + Address_0x68 = 0x68, + /// + /// Default bus address + /// + Default = Address_0x68 + } + /// /// Possible values for the alarm that can be set or alarm that has been raised /// diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Registers.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Registers.cs new file mode 100644 index 0000000000..bd95f825ab --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Registers.cs @@ -0,0 +1,31 @@ +namespace Meadow.Foundation.RTCs +{ + public partial class Ds323x + { + /// + /// Register addresses in the sensor + /// + static class Registers + { + public static readonly byte Seconds = 0x00; + public static readonly byte Minutes = 0x01; + public static readonly byte Hours = 0x02; + public static readonly byte Day = 0x03; + public static readonly byte Date = 0x04; + public static readonly byte Month = 0x05; + public static readonly byte Year = 0x06; + public static readonly byte Alarm1Seconds = 0x07; + public static readonly byte Alarm1Minutes = 0x08; + public static readonly byte Alarm1Hours = 0x09; + public static readonly byte Alarm1DayDate = 0x0a; + public static readonly byte Alarm2Minutes = 0x0b; + public static readonly byte Alarm2Hours = 0x0c; + public static readonly byte Alarm2DayDate = 0x0d; + public static readonly byte Control = 0x0e; + public static readonly byte ControlStatus = 0x0f; + public static readonly byte AgingOffset = 0x10; + public static readonly byte TemperatureMSB = 0x11; + public static readonly byte TemperatureLSB = 0x12; + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs index e66bc4d8a5..125762c13e 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs @@ -7,33 +7,12 @@ namespace Meadow.Foundation.RTCs /// /// DS323X real-time clock /// - public partial class Ds323x : IDisposable + public partial class Ds323x : II2cPeripheral, IDisposable { /// - /// Register addresses in the sensor + /// The default I2C address for the peripheral /// - static class Registers - { - public static readonly byte Seconds = 0x00; - public static readonly byte Minutes = 0x01; - public static readonly byte Hours = 0x02; - public static readonly byte Day = 0x03; - public static readonly byte Date = 0x04; - public static readonly byte Month = 0x05; - public static readonly byte Year = 0x06; - public static readonly byte Alarm1Seconds = 0x07; - public static readonly byte Alarm1Minutes = 0x08; - public static readonly byte Alarm1Hours = 0x09; - public static readonly byte Alarm1DayDate = 0x0a; - public static readonly byte Alarm2Minutes = 0x0b; - public static readonly byte Alarm2Hours = 0x0c; - public static readonly byte Alarm2DayDate = 0x0d; - public static readonly byte Control = 0x0e; - public static readonly byte ControlStatus = 0x0f; - public static readonly byte AgingOffset = 0x10; - public static readonly byte TemperatureMSB = 0x11; - public static readonly byte TemperatureLSB = 0x12; - } + public byte I2cDefaultAddress => (byte)Address.Default; /// /// Number of registers that hold the date and time information. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs index 48fab5431f..938279f327 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs @@ -3,9 +3,9 @@ public partial class AdafruitMPRLS { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x18 @@ -17,4 +17,4 @@ public enum Addresses : byte Default = Address_0x18 } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs index 057b7ee51d..ee53e52cbe 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs @@ -10,17 +10,15 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// /// Device driver for the Adafruit MPRLS Ported Pressure Sensor Breakout - /// https://www.adafruit.com/product/3965 - /// Device datasheets also available here: https://sensing.honeywell.com/micropressure-mpr-series /// - public partial class AdafruitMPRLS - : ByteCommsSensorBase<(Pressure? Pressure, Pressure? RawPsiMeasurement)>, IBarometricPressureSensor + public partial class AdafruitMPRLS : + ByteCommsSensorBase<(Pressure? Pressure, Pressure? RawPsiMeasurement)>, + II2cPeripheral, IBarometricPressureSensor { - //Defined in section 6.6.1 of the datasheet. - private readonly byte[] mprlsMeasurementCommand = { 0xAA, 0x00, 0x00 }; - - private const int MINIMUM_PSI = 0; - private const int MAXIMUM_PSI = 25; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; /// /// Raised when a new reading has been made. Events will only be raised @@ -59,12 +57,17 @@ public partial class AdafruitMPRLS /// public bool InternalMathSaturated { get; set; } + private readonly byte[] mprlsMeasurementCommand = { 0xAA, 0x00, 0x00 }; + + private const int MINIMUM_PSI = 0; + private const int MAXIMUM_PSI = 25; + /// /// Represents an Adafruit MPRLS Ported Pressure Sensor /// /// I2Cbus connected to the sensor public AdafruitMPRLS(II2cBus i2cbus) - : base(i2cbus, (byte)Addresses.Default) + : base(i2cbus, (byte)Address.Default) { } /// @@ -88,17 +91,14 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, { return Task.Run(() => { - //Send the command to the sensor to tell it to do the thing. BusComms.Write(mprlsMeasurementCommand); - //Datasheet says wait 5ms Thread.Sleep(5); while (true) { BusComms.Read(ReadBuffer.Span[0..1]); - //From section 6.5 of the datasheet IsDevicePowered = BitHelpers.GetBitValue(ReadBuffer.Span[0], 6); IsDeviceBusy = BitHelpers.GetBitValue(ReadBuffer.Span[0], 5); HasMemoryIntegrityFailed = BitHelpers.GetBitValue(ReadBuffer.Span[0], 2); @@ -108,12 +108,10 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, { throw new InvalidOperationException("Sensor pressure has exceeded max value!"); } - if (HasMemoryIntegrityFailed) { throw new InvalidOperationException("Sensor internal memory integrity check failed!"); } - if (!IsDeviceBusy) { break; @@ -124,7 +122,6 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Pressure? Pressure, var rawPSIMeasurement = (ReadBuffer.Span[1] << 16) | (ReadBuffer.Span[2] << 8) | ReadBuffer.Span[3]; - //From Section 8.0 of the datasheet. var calculatedPSIMeasurement = (rawPSIMeasurement - 1677722) * (MAXIMUM_PSI - MINIMUM_PSI); calculatedPSIMeasurement /= 15099494 - 1677722; calculatedPSIMeasurement += MINIMUM_PSI; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs index 73108a76ca..39c753e429 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs @@ -56,7 +56,7 @@ public enum MeasurementModes } /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs index 29f0e00b36..f94f5f200c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// /// Represents a Bh1900Nux temperature sensor /// - public partial class Bh1900Nux : ByteCommsSensorBase, ITemperatureSensor + public partial class Bh1900Nux : ByteCommsSensorBase, ITemperatureSensor, II2cPeripheral { /// /// Raised when the temperature value changes @@ -20,6 +20,11 @@ public partial class Bh1900Nux : ByteCommsSensorBase, ITemper /// public Units.Temperature? Temperature => Conditions; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Bh1900Nux object /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs similarity index 86% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Addresses.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs index 29136e0326..697ca6d99b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs @@ -3,9 +3,9 @@ public partial class Bme280 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x76 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index 2053d0ed4a..227a1e3e9e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -9,24 +9,6 @@ namespace Meadow.Foundation.Sensors.Atmospheric { - // TODO: for standby durations of 1,000ms and less, the sensor - // will actually handle the reading loop. you put it into `Normal` - // mode and set it to one of the known `StandbyDuration`s. - // - // So perhaps this should be an option. From a method signature - // standpoint, i think that we would add an overload that took - // a known `StandbyDuration` instead of an int. - // - // With that said, however, as far as I can tell, the sensor won't - // send an interrupt when a new reading is taken, so i'm not sure - // how we would synchronize with it, since the time that each read - // takes is determined by the samples, filter, etc. -b - // - // TODO: for longer standby durations, we should put the sensor into - // Modes.Sleep to save power. Need to figure out what the stanby - // duration threshold is for that. i'm guessing 5 seconds might be a - // good value. - /// /// BME280 Temperature, Pressure and Humidity Sensor /// @@ -36,7 +18,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Bme280 : PollingSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure)>, - ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiDevice + ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiPeripheral, II2cPeripheral { /// /// Temperature changed event @@ -137,12 +119,17 @@ public SpiClockConfiguration.Mode SpiBusMode set => ((ISpiCommunications)bme280Comms).BusMode = value; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Initializes a new instance of the BME280 class /// /// I2C Bus to use for communicating with the sensor /// I2C address of the sensor (default = 0x77) - public Bme280(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Bme280(II2cBus i2cBus, byte address = (byte)Address.Default) { bme280Comms = new I2cCommunications(i2cBus, address); configuration = new Configuration(); // here to avoid the warning @@ -278,7 +265,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T v_x1_u32r = v_x1_u32r < 0 ? 0 : v_x1_u32r; v_x1_u32r = v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r; - // + conditions.Humidity = new RelativeHumidity((v_x1_u32r >> 12) / 1024, HU.Percent); return conditions; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs index 5aea2e58a6..1d769b5619 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs @@ -75,7 +75,7 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME280 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme280(i2c, (byte)Bme280.Addresses.Default); // SDA pulled up + sensor = new Bme280(i2c, (byte)Bme280.Address.Default); // SDA pulled up } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs index 6ac6f928e5..6d52a1dfc9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs @@ -3,9 +3,9 @@ partial class Bme68x { /// - /// Valid addresses for the busComms + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x77 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index f113d89d5f..7310c72984 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -21,7 +21,7 @@ public abstract partial class Bme68x : RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)>, - ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiDevice + ITemperatureSensor, IHumiditySensor, IBarometricPressureSensor, ISpiPeripheral, II2cPeripheral { /// /// Raised when the temperature value changes @@ -120,7 +120,7 @@ public FilteringMode FilterMode FilteringMode filterMode; /// - /// Enable / disable the busComms heater + /// Enable / disable the sensor heater /// public bool HeaterIsEnabled { @@ -184,7 +184,12 @@ public SpiClockConfiguration.Mode SpiBusMode } /// - /// Communication bus used to read and write to the BME68x busComms + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + + /// + /// Communication bus used to read and write to the BME68x sensor /// readonly IByteCommunications busComms; @@ -211,7 +216,7 @@ public SpiClockConfiguration.Mode SpiBusMode readonly Configuration configuration; /// - /// Calibration data for the busComms + /// Calibration data for the sensor /// internal Calibration? calibration; @@ -229,7 +234,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// I2C Bus to use for communicating with the sensor /// I2C address - protected Bme68x(II2cBus i2cBus, byte address = (byte)Addresses.Default) + protected Bme68x(II2cBus i2cBus, byte address = (byte)Address.Default) { configuration = new Configuration(); busComms = new I2cCommunications(i2cBus, address); @@ -264,7 +269,7 @@ protected Bme68x(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, Configuratio } /// - /// Initialize the busComms + /// Initialize the sensor /// protected void Initialize() { @@ -384,7 +389,7 @@ public TimeSpan GetMeasurementDuration(HeaterProfileType profile) /// /// Raise events for subcribers and notify of value changes /// - /// The updated busComms data + /// The updated sensor data protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> changeResult) { if (changeResult.New.Temperature is { } temp) @@ -407,9 +412,9 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T } /// - /// Reads data from the busComms + /// Reads data from the sensor /// - /// The latest busComms reading + /// The latest sensor reading protected override Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity, Pressure? Pressure, Resistance? GasResistance)> ReadSensor() { configuration.TemperatureOversample = TemperatureOversampleMode; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs index 5024dc58e4..8b353ab26b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs @@ -15,7 +15,7 @@ public partial class Bme680 : Bme68x /// /// I2C Bus to use for communicating with the busComms /// I2C address of the busComms - public Bme680(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) + public Bme680(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs index 388dc6e385..7c951f29c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs @@ -15,7 +15,7 @@ public partial class Bme688 : Bme68x /// /// I2C Bus to use for communicating with the busComms /// I2C address of the busComms - public Bme688(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) + public Bme688(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs index 8348ce5884..56c21b7bdb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs @@ -32,7 +32,7 @@ public override Task Initialize() //c# 8 pattern match syntax. checks for !null and assigns var. if (result.Old?.Temperature is { } oldTemp && result.Old?.Humidity is { } oldHumidity && - result.New.Temperature is { } newTemp && + result.New.Temperature is { } newTemp && result.New.Humidity is { } newHumidity) { return ((newTemp - oldTemp).Abs().Celsius > 0.5 && @@ -44,7 +44,7 @@ result.New.Temperature is { } newTemp && sensor?.Subscribe(consumer); - if(sensor != null) + if (sensor != null) { sensor.Updated += (sender, result) => { @@ -67,7 +67,7 @@ result.New.Temperature is { } newTemp && void EnableGasHeater() { - if(sensor != null) + if (sensor != null) { sensor.GasConversionIsEnabled = true; sensor.HeaterIsEnabled = true; @@ -89,12 +89,12 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME680 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme680(i2c, (byte)Bme688.Addresses.Address_0x76); + sensor = new Bme680(i2c, (byte)Bme688.Address.Address_0x76); } async Task ReadConditions() { - if(sensor == null) { return; } + if (sensor == null) { return; } var (Temperature, Humidity, Pressure, Resistance) = await sensor.Read(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs index 2ad5b80e25..7981d2de9b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs @@ -33,7 +33,7 @@ public override Task Initialize() //c# 8 pattern match syntax. checks for !null and assigns var. if (result.Old?.Temperature is { } oldTemp && result.Old?.Humidity is { } oldHumidity && - result.New.Temperature is { } newTemp && + result.New.Temperature is { } newTemp && result.New.Humidity is { } newHumidity) { return ((newTemp - oldTemp).Abs().Celsius > 0.5 && @@ -45,7 +45,7 @@ result.New.Temperature is { } newTemp && sensor?.Subscribe(consumer); - if(sensor != null) + if (sensor != null) { sensor.Updated += (sender, result) => { @@ -90,12 +90,12 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME688 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme688(i2c, (byte)Bme688.Addresses.Address_0x76); + sensor = new Bme688(i2c, (byte)Bme688.Address.Address_0x76); } async Task ReadConditions() { - if(sensor == null) { return; } + if (sensor == null) { return; } var (Temperature, Humidity, Pressure, Resistance) = await sensor.Read(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs index 7d5e91e036..0c65e8b5e1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs @@ -3,9 +3,9 @@ public partial class Bmp085 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x77 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs index 9d69ac4025..493cb678a3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs @@ -1,9 +1,9 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { @@ -12,23 +12,28 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Bmp085 : ByteCommsSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, - ITemperatureSensor, IBarometricPressureSensor + ITemperatureSensor, IBarometricPressureSensor, II2cPeripheral { /// /// Raised when the temperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; - + /// /// Raised when the pressure value changes /// public event EventHandler> PressureUpdated = delegate { }; - // Oversampling for measurements. Please see the datasheet for this sensor for more information. - byte oversamplingSetting; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + + readonly byte oversamplingSetting; - // These wait times correspond to the oversampling settings. - // Please see the datasheet for this sensor for more information. + /// + /// These wait times correspond to the oversampling settings + /// readonly byte[] pressureWaitTime = { 5, 8, 14, 26 }; // Calibration data backing stores @@ -45,12 +50,12 @@ public partial class Bmp085 : private short _md; /// - /// Last value read from the Pressure sensor. + /// Last value read from the Pressure sensor /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// Last value read from the Pressure sensor. + /// Last value read from the Pressure sensor /// public Pressure? Pressure => Conditions.Pressure; @@ -60,7 +65,7 @@ public partial class Bmp085 : /// The I2C bus /// The I2C address /// The device mode - public Bmp085(II2cBus i2cBus, byte address = (byte)Addresses.Default, + public Bmp085(II2cBus i2cBus, byte address = (byte)Address.Default, DeviceMode deviceMode = DeviceMode.Standard) : base(i2cBus, address) { @@ -87,13 +92,13 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T } /// - /// Calculates the compensated pressure and temperature. + /// Calculates the compensated pressure and temperature /// protected override Task<(Units.Temperature? Temperature, Pressure? Pressure)> ReadSensor() { (Units.Temperature? Temperature, Pressure? Pressure) conditions; - long x1, x2, x3, b3, b4, b5, b6, b7, p; + long x1, x2, x3, b4, b5, b6, b7, p; long ut = ReadUncompensatedTemperature(); @@ -111,24 +116,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T x1 = (_b2 * (b6 * b6 >> 12)) >> 11; x2 = _ac2 * b6 >> 11; x3 = x1 + x2; - - switch (oversamplingSetting) + var b3 = oversamplingSetting switch { - case 0: - b3 = ((_ac1 * 4 + x3) + 2) >> 2; - break; - case 1: - b3 = ((_ac1 * 4 + x3) + 2) >> 1; - break; - case 2: - b3 = ((_ac1 * 4 + x3) + 2); - break; - case 3: - b3 = ((_ac1 * 4 + x3) + 2) << 1; - break; - default: - throw new Exception("Oversampling setting must be 0-3"); - } + 0 => (_ac1 * 4 + x3 + 2) >> 2, + 1 => (_ac1 * 4 + x3 + 2) >> 1, + 2 => (_ac1 * 4 + x3 + 2), + 3 => (_ac1 * 4 + x3 + 2) << 1, + _ => throw new Exception("Oversampling setting must be 0-3"), + }; + x1 = _ac3 * b6 >> 13; x2 = (_b1 * (b6 * b6 >> 12)) >> 16; x3 = ((x1 + x2) + 2) >> 2; @@ -148,53 +144,34 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T private long ReadUncompensatedTemperature() { - // write register address - // TODO: delete after validating - //BusComms.WriteBytes(new byte[] { 0xF4, 0x2E }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = 0x2e; BusComms?.Write(WriteBuffer.Span[0..2]); - // Required as per datasheet. Thread.Sleep(5); - // write register address - // TODO: Delete after validating - //BusComms.WriteBytes(new byte[] { 0xF6 }); WriteBuffer.Span[0] = 0xf6; BusComms?.Write(WriteBuffer.Span[0]); - // get MSB and LSB result - // TODO: Delete after validating - //byte[] data = new byte[2]; - //data = BusComms.ReadBytes(2); BusComms?.Read(ReadBuffer.Span[0..2]); - return ((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); + return (ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]; } private long ReadUncompensatedPressure() { - // write register address - // TODO: Delete after validating - //BusComms.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = (byte)(0x34 + (oversamplingSetting << 6)); - // insert pressure waittime using oversampling setting as index. Thread.Sleep(pressureWaitTime[oversamplingSetting]); - // get MSB and LSB result - // TODO: delete after validating - //byte[] data = new byte[3]; - //data = BusComms.ReadRegisters(0xF6, 3); BusComms?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); return ((ReadBuffer.Span[0] << 16) | (ReadBuffer.Span[1] << 8) | (ReadBuffer.Span[2])) >> (8 - oversamplingSetting); } /// - /// Retrieves the factory calibration data stored in the sensor. + /// Retrieves the factory calibration data stored in the sensor /// private void GetCalibrationData() { @@ -213,13 +190,6 @@ private void GetCalibrationData() private short ReadShort(byte address) { - // TODO: i think we already have a method that does this. I'm just not sure - // which endian it is. not sure what the last statement here is dooing - - // get MSB and LSB result - // TODO: delete after validating - //byte[] data = new byte[2]; - //data = BusComms.ReadRegisters(address, 2); BusComms?.ReadRegister(address, ReadBuffer.Span[0..2]); return (short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); @@ -231,4 +201,4 @@ private short ReadShort(byte address) async Task ISensor.Read() => (await Read()).Pressure.Value; } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj index b2dd441771..295379a480 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Sensors.Atmospheric.Bmp085.csproj @@ -16,11 +16,8 @@ Bosch BMP085 I2C barometric pressure sensor enable - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs index 5e165926b6..f082b80018 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs @@ -3,9 +3,9 @@ public partial class Bmp180 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x77 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs index 58a414553b..b8709a5a66 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs @@ -12,7 +12,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Bmp180 : ByteCommsSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, - ITemperatureSensor, IBarometricPressureSensor + ITemperatureSensor, IBarometricPressureSensor, II2cPeripheral { /// /// Raised when the temperature value changes @@ -24,10 +24,14 @@ public partial class Bmp180 : /// public event EventHandler> PressureUpdated = delegate { }; - // Oversampling for measurements + /// + /// Oversampling for measurements + /// private readonly byte oversamplingSetting; - // These wait times correspond to the oversampling settings + /// + /// These wait times correspond to the oversampling settings + /// private readonly byte[] pressureWaitTime = { 5, 8, 14, 26 }; // Calibration data backing stores @@ -54,9 +58,9 @@ public partial class Bmp180 : public Pressure? Pressure => Conditions.Pressure; /// - /// Default SPI bus speed + /// The default I2C address for the peripheral /// - public static Frequency DEFAULT_SPEED = new Frequency(40000, Frequency.UnitType.Kilohertz); + public byte I2cDefaultAddress => (byte)Address.Default; /// /// Create a new BMP180 object @@ -64,7 +68,7 @@ public partial class Bmp180 : /// The I2C bus /// The I2C address /// The device mode - public Bmp180(II2cBus i2cBus, byte address = (byte)Addresses.Default, + public Bmp180(II2cBus i2cBus, byte address = (byte)Address.Default, DeviceMode deviceMode = DeviceMode.Standard) : base(i2cBus, address) { @@ -140,26 +144,15 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T private long ReadUncompensatedTemperature() { - // write register address - // TODO: delete after validating - //BusComms.WriteBytes(new byte[] { 0xF4, 0x2E }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = 0x2e; BusComms?.Write(WriteBuffer.Span[0..2]); - // Required as per datasheet. Thread.Sleep(5); - // write register address - // TODO: Delete after validating - //BusComms.WriteBytes(new byte[] { 0xF6 }); WriteBuffer.Span[0] = 0xf6; BusComms?.Write(WriteBuffer.Span[0]); - // get MSB and LSB result - // TODO: Delete after validating - //byte[] data = new byte[2]; - //data = BusComms.ReadBytes(2); BusComms?.Read(ReadBuffer.Span[0..2]); return ((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); @@ -167,26 +160,18 @@ private long ReadUncompensatedTemperature() private long ReadUncompensatedPressure() { - // write register address - // TODO: Delete after validating - //BusComms.WriteBytes(new byte[] { 0xF4, (byte)(0x34 + (oversamplingSetting << 6)) }); WriteBuffer.Span[0] = 0xf4; WriteBuffer.Span[1] = (byte)(0x34 + (oversamplingSetting << 6)); - // insert pressure waittime using oversampling setting as index. Thread.Sleep(pressureWaitTime[oversamplingSetting]); - // get MSB and LSB result - // TODO: delete after validating - //byte[] data = new byte[3]; - //data = BusComms.ReadRegisters(0xF6, 3); BusComms?.ReadRegister(0xf6, ReadBuffer.Span[0..3]); return ((ReadBuffer.Span[0] << 16) | (ReadBuffer.Span[1] << 8) | (ReadBuffer.Span[2])) >> (8 - oversamplingSetting); } /// - /// Retrieves the factory calibration data stored in the sensor. + /// Retrieves the factory calibration data stored in the sensor /// private void GetCalibrationData() { @@ -205,13 +190,6 @@ private void GetCalibrationData() private short ReadShort(byte address) { - // TODO: i think we already have a method that does this. I'm just not sure - // which endian it is. not sure what the last statement here is dooing - - // get MSB and LSB result - // TODO: delete after validating - //byte[] data = new byte[2]; - //data = BusComms.ReadRegisters(address, 2); BusComms?.ReadRegister(address, ReadBuffer.Span[0..2]); return (short)((ReadBuffer.Span[0] << 8) | ReadBuffer.Span[1]); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs index 97ad3a3e15..d8949873a0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs @@ -3,9 +3,9 @@ public partial class Ccs811 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x5A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs index 970ea3a6ad..2d6dacef27 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs @@ -12,7 +12,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Ccs811 : ByteCommsSensorBase<(Concentration? Co2, Concentration? Voc)>, - ICo2Sensor, IVocSensor + ICo2Sensor, IVocSensor, II2cPeripheral { private const int ReadBufferSize = 10; private const int WriteBufferSize = 8; @@ -39,12 +39,17 @@ public partial class Ccs811 : /// public Concentration? Voc => Conditions.Voc; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Ccs811 object /// /// The I2C bus /// The I2C address - public Ccs811(II2cBus i2cBus, Addresses address = Addresses.Default) + public Ccs811(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/MeadowApp.cs index 3a261bfe60..c6c29d3add 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Samples/Ccs811_Sample/MeadowApp.cs @@ -16,8 +16,8 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var i2c = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Fast); - sensor = new Ccs811(i2c); + var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Fast); + sensor = new Ccs811(i2cBus); var consumer = Ccs811.CreateObserver( handler: result => diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs index d7859084cd..a146b53e5a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs @@ -8,9 +8,9 @@ public abstract partial class DhtBase { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x5C diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs index 8f44245853..e8fd10969b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs @@ -1,17 +1,16 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// Provide a mechanism for reading the Temperature and Humidity from - /// a DHT temperature and Humidity sensor. + /// Base class for th DHT family Temperature and Humidity sensors /// - public abstract partial class DhtBase : + public abstract partial class DhtBase : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, ITemperatureSensor, IHumiditySensor { @@ -26,29 +25,28 @@ public abstract partial class DhtBase : public event EventHandler> HumidityUpdated = delegate { }; private readonly BusType protocol; - private int lastMeasurement = 0; /// - /// The temperature + /// The current temperature /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// The relative humidity + /// The current relative humidity /// public RelativeHumidity? Humidity => Conditions.Humidity; /// - /// How last read went, true for success, false for failure + /// Was the last sensor read succesful, true for success, false for failure /// public bool WasLastReadSuccessful { get; internal set; } /// - /// Create a DHT sensor through I2C (Only DHT12) + /// Create a DHT sensor through I2C /// /// The I2C bus connected to the sensor /// The I2C address - public DhtBase(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public DhtBase(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, writeBufferSize: 8, readBufferSize: 6) { protocol = BusType.I2C; @@ -62,11 +60,11 @@ public DhtBase(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// internal virtual void ReadData() { - if (protocol == BusType.OneWire) + if (protocol == BusType.OneWire) { ReadDataOneWire(); - } - else + } + else { ReadDataI2c(); } @@ -88,13 +86,11 @@ internal virtual void ReadDataI2c() BusComms?.Write(0x00); BusComms?.Read(ReadBuffer.Span[0..5]); - lastMeasurement = Environment.TickCount; - - if ((ReadBuffer.Span[4] == ((ReadBuffer.Span[0] + ReadBuffer.Span[1] + ReadBuffer.Span[2] + ReadBuffer.Span[3]) & 0xFF))) + if ((ReadBuffer.Span[4] == ((ReadBuffer.Span[0] + ReadBuffer.Span[1] + ReadBuffer.Span[2] + ReadBuffer.Span[3]) & 0xFF))) { WasLastReadSuccessful = (ReadBuffer.Span[0] != 0) || (ReadBuffer.Span[2] != 0); - } - else + } + else { WasLastReadSuccessful = false; } @@ -118,10 +114,12 @@ internal virtual void ReadDataI2c() /// The updated sensor data protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) { - if (changeResult.New.Temperature is { } temp) { + if (changeResult.New.Temperature is { } temp) + { TemperatureUpdated?.Invoke(this, new ChangeResult(temp, changeResult.Old?.Temperature)); } - if (changeResult.New.Humidity is { } humidity) { + if (changeResult.New.Humidity is { } humidity) + { HumidityUpdated?.Invoke(this, new ChangeResult(humidity, changeResult.Old?.Humidity)); } base.RaiseEventsAndNotify(changeResult); @@ -135,11 +133,11 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T { (Units.Temperature? Temperature, RelativeHumidity? Humidity) conditions; - if (protocol == BusType.I2C) + if (protocol == BusType.I2C) { ReadDataI2c(); - } - else + } + else { ReadDataOneWire(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs index f5b8c28281..d6547beec9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs @@ -11,18 +11,16 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public class Dht10 : DhtBase { - private const byte CMD_INIT = 0b_1110_0001; - private const byte CMD_START = 0b_1010_1100; - private const byte CMD_SOFTRESET = 0b_1011_1010; - - //private new byte[] _readBuffer = new byte[6]; + private const byte CMD_INIT = 0b_1110_0001; + private const byte CMD_START = 0b_1010_1100; + private const byte CMD_SOFTRESET = 0b_1011_1010; /// /// Create a new Dht10 object. /// /// Address of the Dht12 (default = 0x27). /// I2C bus (default = 100 KHz). - public Dht10(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Dht10(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { BusComms?.Write(CMD_SOFTRESET); @@ -36,7 +34,7 @@ internal override void ReadDataI2c() BusComms?.Write(CMD_START); Thread.Sleep(75); - + //data stored in the read buffer BusComms?.Read(ReadBuffer.Span); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs index 2b6e38a371..2ac93361b9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs @@ -8,14 +8,19 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// 0 - 95% humidity +/- 4% /// Currently only supports I2C /// - public class Dht12 : DhtBase + public class Dht12 : DhtBase, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Dht12 object /// /// Address of the Dht12 (default = 0x27) /// I2C bus (default = 100 KHz) - public Dht12(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Dht12(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs index 9fc95a27e4..67d4e73c41 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs @@ -3,9 +3,9 @@ public partial class Hih6130 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x27 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs index 5c6fe81b3b..6264a7ed4b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs @@ -1,25 +1,23 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// Provide a mechanism for reading the Temperature and Humidity from - /// a HIH6130 temperature and Humidity sensor. + /// Represents an HIH6130 Temperature and Humidity sensor /// public partial class Hih6130 : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Raised when the temperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; - + /// /// Raised when the humidity value changes /// @@ -35,12 +33,17 @@ public partial class Hih6130 : /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new HIH6130 object using the default parameters for the component. /// /// Address of the HIH6130 (default = 0x27). /// I2C bus (default = 100 KHz). - public Hih6130(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Hih6130(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 4, writeBufferSize: 4) { } @@ -51,10 +54,12 @@ public Hih6130(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) { - if (changeResult.New.Temperature is { } temp) { + if (changeResult.New.Temperature is { } temp) + { TemperatureUpdated?.Invoke(this, new ChangeResult(temp, changeResult.Old?.Temperature)); } - if (changeResult.New.Humidity is { } humidity) { + if (changeResult.New.Humidity is { } humidity) + { HumidityUpdated?.Invoke(this, new ChangeResult(humidity, changeResult.Old?.Humidity)); } base.RaiseEventsAndNotify(changeResult); @@ -82,7 +87,7 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T // Byte 2: T13 T12 T11 T10 T9 T8 T7 T6 // Byte 4: T5 T4 T3 T2 T1 T0 XX XX // - if ((ReadBuffer.Span[0] & 0xc0) != 0) + if ((ReadBuffer.Span[0] & 0xc0) != 0) { throw new Exception("Status indicates readings are invalid."); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs index ded356fe6b..2ee2a25d19 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs @@ -3,9 +3,9 @@ public partial class Htu31d { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs index df61f72e6c..c0275d6735 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs @@ -24,7 +24,7 @@ public partial class Htu21d : Htux1dBase /// Sensor address (default to 0x40) /// I2CBus (default to 100 KHz) /// Update interval, defaults to 1 sec if null - public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + public Htu21d(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, updateInterval) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs index c8cd0cdd4c..997abfcc08 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs @@ -19,7 +19,7 @@ public partial class Htu31d : Htux1dBase /// Sensor address (default to 0x40). /// I2CBus (default to 100 KHz). /// Update interval, defaults to 1 sec if null - public Htu31d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + public Htu31d(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, updateInterval) { SerialNumber = GetSerial(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs index 01b6f6a939..8743e6bb5b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs @@ -7,9 +7,9 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x40 @@ -26,7 +26,7 @@ public enum Addresses : byte /// public abstract class Htux1dBase : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Temperature changed event @@ -38,6 +38,11 @@ public abstract class Htux1dBase : /// public event EventHandler> HumidityUpdated = delegate { }; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Default I2C bus speed /// @@ -64,13 +69,13 @@ public abstract class Htux1dBase : /// /// /// - public Htux1dBase(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + public Htux1dBase(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, (int)(updateInterval == null ? 1000 : updateInterval.Value.TotalMilliseconds)) { } /// - /// Inheritance-safe way to raise events and notify observers. + /// Inheritance-safe way to raise events and notify observers /// /// New temperature and humidity values protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs index 0ee5b7501a..6472489bda 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs @@ -3,9 +3,9 @@ public partial class Mpl3115a2 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs index a7bdf5ba1b..55a04c2183 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Mpl3115a2 : ByteCommsSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, - ITemperatureSensor, IBarometricPressureSensor + ITemperatureSensor, IBarometricPressureSensor, II2cPeripheral { /// /// Event raised when temperature value changes @@ -63,12 +63,17 @@ public bool Standby /// public byte Status => BusComms?.ReadRegister(Registers.Status) ?? 0; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new MPL3115A2 object with the default address and speed settings /// /// Address of the sensor (default = 0x60) /// I2cBus (Maximum is 400 kHz) - public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { if (BusComms?.ReadRegister(Registers.WhoAmI) != 0xc4) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs index f613f650cb..f8741d1775 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs @@ -3,9 +3,9 @@ public partial class Ms5611 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x5C @@ -43,5 +43,13 @@ public enum Resolution /// OSR_4096 = 4 } + + enum Commands : byte + { + Reset = 0x1e, + ConvertD1 = 0x40, + ConvertD2 = 0x50, + ReadADC = 0x00, + } } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs index ffc41684c1..454f654389 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs @@ -12,7 +12,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Ms5611 : ByteCommsSensorBase<(Units.Temperature? Temperature, Pressure? Pressure)>, - ITemperatureSensor, IBarometricPressureSensor + ITemperatureSensor, IBarometricPressureSensor, II2cPeripheral { /// /// Temperature changed event @@ -25,17 +25,26 @@ public partial class Ms5611 : public event EventHandler> PressureUpdated = delegate { }; /// - /// The temperature, in degrees celsius (°C), from the last reading + /// The current temperature /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// The pressure, in hectopascals (hPa), from the last reading. 1 hPa - /// is equal to one millibar, or 1/10th of a kilopascal (kPa)/centibar + /// The current pressure /// public Pressure? Pressure => Conditions.Pressure; - private Ms5611Base ms5611; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + + /// + /// I2C Communication bus used to communicate with the peripheral + /// + protected readonly II2cCommunications i2cComms; + + readonly Resolution resolution; /// /// Connect to the Ms5611 using I2C @@ -43,9 +52,10 @@ public partial class Ms5611 : /// The I2C bus connected to the device /// I2c address - default is 0x5c /// - public Ms5611(II2cBus i2cBus, byte address = (byte)Addresses.Default, Resolution resolution = Resolution.OSR_1024) + public Ms5611(II2cBus i2cBus, byte address = (byte)Address.Default, Resolution resolution = Resolution.OSR_1024) { - ms5611 = new Ms5611I2c(i2cBus, address, resolution); + i2cComms = new I2cCommunications(i2cBus, address); + this.resolution = resolution; } /// @@ -84,31 +94,37 @@ protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? T /// public void Reset() { - ms5611.Reset(); + var cmd = (byte)Commands.Reset; + + i2cComms.Write(cmd); } private void BeginTempConversion() { - ms5611.BeginTempConversion(); + var cmd = (byte)((byte)Commands.ConvertD2 + 2 * (byte)resolution); + i2cComms.Write(cmd); } private void BeginPressureConversion() { - ms5611.BeginPressureConversion(); + var cmd = (byte)((byte)Commands.ConvertD1 + 2 * (byte)resolution); + i2cComms.Write(cmd); } private byte[] ReadData() { - return ms5611.ReadData(); + var data = new byte[3]; + i2cComms.ReadRegister((byte)Commands.ReadADC, data); + return data; } int ReadTemperature() { - ms5611.BeginTempConversion(); + BeginTempConversion(); Thread.Sleep(10); // 1 + 2 * Resolution // we get back 24 bits (3 bytes), regardless of the resolution we're asking for - var data = ms5611.ReadData(); + var data = ReadData(); var result = data[2] | data[1] << 8 | data[0] << 16; @@ -117,12 +133,12 @@ int ReadTemperature() int ReadPressure() { - ms5611.BeginPressureConversion(); + BeginPressureConversion(); Thread.Sleep(10); // 1 + 2 * Resolution // we get back 24 bits (3 bytes), regardless of the resolution we're asking for - var data = ms5611.ReadData(); + var data = ReadData(); var result = data[2] | data[1] << 8 | data[0] << 16; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Base.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Base.cs deleted file mode 100644 index 09242ad794..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Base.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal abstract class Ms5611Base - { - protected Ms5611.Resolution Resolution { get; set; } - - public abstract void Reset(); - public abstract void BeginTempConversion(); - public abstract void BeginPressureConversion(); - public abstract byte[] ReadData(); - - protected enum Commands : byte - { - Reset = 0x1e, - ConvertD1 = 0x40, - ConvertD2 = 0x50, - ReadADC = 0x00, - } - - internal Ms5611Base(Ms5611.Resolution resolution) - { - Resolution = resolution; - } - } -} diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs deleted file mode 100644 index 19324e836b..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611I2c.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Meadow.Hardware; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal class Ms5611I2c : Ms5611Base - { - /// - /// I2C Communication bus used to communicate with the peripheral - /// - protected readonly II2cCommunications i2cComms; - - internal Ms5611I2c(II2cBus i2cBus, byte address, Ms5611.Resolution resolution) - : base(resolution) - { - i2cComms = new I2cCommunications(i2cBus, address); - } - - public override void Reset() - { - var cmd = (byte)Commands.Reset; - - i2cComms.Write(cmd); - } - - public override void BeginTempConversion() - { - var cmd = (byte)((byte)Commands.ConvertD2 + 2 * (byte)Resolution); - i2cComms.Write(cmd); - } - - public override void BeginPressureConversion() - { - var cmd = (byte)((byte)Commands.ConvertD1 + 2 * (byte)Resolution); - i2cComms.Write(cmd); - } - - public override byte[] ReadData() - { - var data = new byte[3]; - i2cComms.ReadRegister((byte)Commands.ReadADC, data); - return data; - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Spi.cs deleted file mode 100644 index f289527ec2..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611Spi.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Meadow.Hardware; -using System; - -/* -namespace Meadow.Foundation.Sensors.Atmospheric -{ - internal class Ms5611Spi : Ms5611Base - { - private ISpiBus spiBus; - private IPin chipSelect; - - internal Ms5611Spi(ISpiBus spi, IPin chipSelect, Ms5611.Resolution resolution) - : base(resolution) - { - spiBus = spi; - this.chipSelect = chipSelect; - - throw new NotImplementedException(); - } - - public override void BeginPressureConversion() - { - throw new NotImplementedException(); - } - - public override void BeginTempConversion() - { - throw new NotImplementedException(); - } - - public override byte[] ReadData() - { - throw new NotImplementedException(); - } - - public override void Reset() - { - throw new NotImplementedException(); - } - } -} -*/ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs index 7cfd7dfbb9..2ba15fd25b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs @@ -5,7 +5,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric public partial class Sgp40 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs index 7888f97eeb..bee0b84c53 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs @@ -9,23 +9,28 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// /// Provides access to the Sensiron SGP40 VOC sensor /// - public partial class Sgp40 : ByteCommsSensorBase + public partial class Sgp40 : ByteCommsSensorBase, II2cPeripheral { /// /// public event EventHandler> VocIndexUpdated = delegate { }; /// - /// The VOC Index, from the last reading. + /// The VOC Index, from the last reading /// public int VocIndex => Conditions; /// - /// Serial number of the device. + /// Serial number of the device /// public ulong SerialNumber { get; private set; } - private byte[]? _compensationData = null; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + + private byte[]? compensationData = null; /// /// Creates a new SGP40 VOC sensor. @@ -43,12 +48,9 @@ public Sgp40(II2cBus i2cBus, byte address = (byte)Address.Default) /// protected void Initialize() { - // write buffer for initialization commands only can be two bytes. - Span tx = WriteBuffer.Span[0..2]; - BusComms?.Write(sgp4x_get_serial_number); - Thread.Sleep(1); // per the data sheet + Thread.Sleep(1); BusComms?.Read(ReadBuffer.Span[0..9]); @@ -78,9 +80,9 @@ public bool RunSelfTest() /// The latest sensor reading protected override Task ReadSensor() { - if (_compensationData != null) + if (compensationData != null) { - BusComms?.Write(_compensationData); + BusComms?.Write(compensationData); } else { @@ -122,19 +124,19 @@ public void TurnHeaterOff() /// Temperature compensation public void SetCompensationData(RelativeHumidity humidity, Units.Temperature temperature) { - _compensationData = new byte[8]; + compensationData = new byte[8]; - Array.Copy(sgp40_measure_raw_signal, 0, _compensationData, 0, 2); + Array.Copy(sgp40_measure_raw_signal, 0, compensationData, 0, 2); var rh = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((ushort)(humidity.Percent * 65535 / 100))); - _compensationData[2] = rh[0]; - _compensationData[3] = rh[1]; - _compensationData[4] = Crc(rh); + compensationData[2] = rh[0]; + compensationData[3] = rh[1]; + compensationData[4] = Crc(rh); var t = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((ushort)(temperature.Celsius * 65535 / 175))); - _compensationData[5] = t[0]; - _compensationData[6] = t[1]; - _compensationData[7] = Crc(t); + compensationData[5] = t[0]; + compensationData[6] = t[1]; + compensationData[7] = Crc(t); } /// @@ -142,7 +144,7 @@ public void SetCompensationData(RelativeHumidity humidity, Units.Temperature tem /// public void ClearCompensationData() { - _compensationData = null; + compensationData = null; } private byte Crc(byte[] data) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs index 3a0967e913..0387718a94 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs @@ -3,9 +3,9 @@ public partial class Sht31d { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs index d334ef05b6..ce8b4aa2c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs @@ -1,21 +1,17 @@ -using System; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Units; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// Provide a mechanism for reading the temperature and humidity from - /// a SHT31D temperature / humidity sensor. + /// Represents a SHT31 Dtemperature and humidity sensor /// - /// - /// Readings from the sensor are made in Single-shot mode. - /// public partial class Sht31d : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Temperature changed event @@ -28,21 +24,26 @@ public partial class Sht31d : public event EventHandler> HumidityUpdated = delegate { }; /// - /// The temperature, in degrees celsius (°C), from the last reading. + /// The temperature from the last reading /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// The humidity, in percent relative humidity, from the last reading.. + /// The humidity, in percent relative humidity, from the last reading /// public RelativeHumidity? Humidity => Conditions.Humidity; /// - /// Create a new SHT31D object. + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + + /// + /// Create a new SHT31D object /// - /// Sensor address (should be 0x44 or 0x45). + /// Sensor address (should be 0x44 or 0x45) /// I2cBus (0-1000 KHz). - public Sht31d(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Sht31d(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 6, writeBufferSize: 2) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs index d4fc18e4ab..a6fc00ae97 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs @@ -3,9 +3,9 @@ public partial class Sht4x { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs index 765e9feae3..8ce85f97af 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs @@ -8,15 +8,11 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// - /// Provide a mechanism for reading the temperature and humidity from - /// a SHT4x temperature / humidity sensor (SHT40, SHT41, SHT45, etc.) + /// Represent a SHT4x temperature and humidity sensor (SHT40, SHT41, SHT45, etc.) /// - /// - /// Readings from the sensor are made in Single-shot mode. - /// public partial class Sht4x : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Precision of sensor reading @@ -34,24 +30,28 @@ public partial class Sht4x : public event EventHandler> HumidityUpdated = delegate { }; /// - /// The curren temperature -from the last reading. + /// The current temperature /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// The humidity, in percent relative humidity, from the last reading + /// The current humidity /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new SHT4x object /// - /// Sensor address (0x44 or 0x45) + /// Sensor address /// I2cBus - public Sht4x(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Sht4x(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 6, writeBufferSize: 2) - { - } + { } /// /// Raise events for subscribers diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs index a482d5a057..1d513a3a11 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs @@ -3,7 +3,7 @@ public partial class Si70xx { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// public enum Address : byte { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs index a683f99c7a..bd40088925 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs @@ -11,11 +11,11 @@ namespace Meadow.Foundation.Sensors.Atmospheric { /// /// Provide access to the Si70xx series (Si7020, Si7021, and Si7030) - /// temperature and humidity sensors. + /// temperature and humidity sensors /// public partial class Si70xx : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Raised when the temperature value changes @@ -28,12 +28,7 @@ public partial class Si70xx : public event EventHandler> HumidityUpdated = delegate { }; /// - /// Default SPI bus speed - /// - public static Frequency DEFAULT_SPEED = new Frequency(400, Frequency.UnitType.Kilohertz); - - /// - /// The temperature, from the last reading + /// The temperature from the last reading /// public Units.Temperature? Temperature => Conditions.Temperature; @@ -57,6 +52,11 @@ public partial class Si70xx : /// public byte FirmwareRevision { get; private set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new SI7021 temperature and humidity sensor /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs index 4bff8370ec..808cdd67bf 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs @@ -3,9 +3,9 @@ public partial class Th02 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs index 3ed3a5855b..b5c8964c4f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs @@ -13,7 +13,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// public partial class Th02 : ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor + ITemperatureSensor, IHumiditySensor, II2cPeripheral { /// /// Event raised when the temperature changes @@ -26,23 +26,27 @@ public partial class Th02 : public event EventHandler> HumidityUpdated = delegate { }; /// - /// Last value read from the Temperature sensor. + /// The current temperatute /// public Units.Temperature? Temperature => Conditions.Temperature; /// - /// Last value read from the Pressure sensor. + /// The current humidity /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Provide a mechanism for reading the temperature and humidity from /// a Th02 temperature / humidity sensor /// - public Th02(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Th02(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) - { - } + { } /// /// Raise all change events for subscribers diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs index 4b8b202e1a..7ba82f90ac 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs @@ -3,9 +3,9 @@ public partial class Mlx90640 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x33 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs index 12972797ce..d915d7729f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Sensors.Camera /// Represents the MLX90640 32x24 IR array /// The MLX90640 is a fully calibrated 32x24 pixels thermal IR array /// - public partial class Mlx90640 + public partial class Mlx90640 : II2cPeripheral { /// /// Camera serial number as a string @@ -41,7 +41,7 @@ public float Emissivity /// /// Reflected temperature /// - public Meadow.Units.Temperature ReflectedTemperature { get; set; } + public Units.Temperature ReflectedTemperature { get; set; } /// /// Camera configuration @@ -53,6 +53,11 @@ public float Emissivity const byte OpenAirTaShift = 8; const short DeviceId1Register = 0x2407; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -67,7 +72,7 @@ public float Emissivity /// I2C address /// Emissivity public Mlx90640(II2cBus i2cBus, - byte address = (byte)Addresses.Default, + byte address = (byte)Address.Default, float emissivity = 0.95f) { i2cComms = new I2cCommunications(i2cBus, address); @@ -78,7 +83,7 @@ public Mlx90640(II2cBus i2cBus, } /// - /// Initialize the MLX90640. Read the MLX90640 serial number and EEProm + /// Initialize the MLX90640 and read the MLX90640 serial number and EEProm /// void Initialize() { @@ -166,12 +171,11 @@ public void SetMode(Mode mode) bool GetFrameData(ref ushort[] frameData) { - ushort dataReady = 1; ushort[] controlRegister1 = new ushort[1]; ushort[] statusRegister = new ushort[1]; byte cnt = 0; - dataReady = 0; + ushort dataReady = 0; while (dataReady == 0) { I2CRead(0x8000, 1, ref statusRegister); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs index a310b68055..11b70f3160 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs @@ -1,19 +1,24 @@ -using System.Threading; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Units; +using System.Threading; namespace Meadow.Foundation.Sensors.Distance { - public partial class MaxBotix + public partial class MaxBotix : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Creates a new MaxBotix object communicating over I2C /// /// The I2C bus /// The distance sensor type /// The I2C address - public MaxBotix(II2cBus i2cBus, SensorType sensor, byte address = (byte)Addresses.Default) - :base(i2cBus, address) + public MaxBotix(II2cBus i2cBus, SensorType sensor, byte address = (byte)Address.Default) + : base(i2cBus, address) { sensorType = sensor; communication = CommunicationType.I2C; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs index 8b31aa0a42..c207c68e9e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs @@ -3,9 +3,9 @@ public partial class MaxBotix { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x70 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs index bc308765ce..eee6940213 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs @@ -6,9 +6,9 @@ public partial class Vl53l0x { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x29 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs index c0302086ea..1c78354e37 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Distance /// /// Represents the Vl53l0x distance sensor /// - public partial class Vl53l0x : ByteCommsSensorBase, IRangeFinder + public partial class Vl53l0x : ByteCommsSensorBase, IRangeFinder, II2cPeripheral { /// /// Distance updated event @@ -36,20 +36,25 @@ public bool IsShutdown } /// - /// The distance to the measured object. + /// The distance to the measured object /// public Length? Distance { get; protected set; } = new Length(0); /// - /// Minimum valid distance in mm. + /// Minimum valid distance /// public Length MinimumDistance => new Length(30, Length.UnitType.Millimeters); /// - /// Maximum valid distance in mm (CurrentDistance returns -1 if above). + /// Maximum valid distance (CurrentDistance returns -1 if above) /// public Length MaximumDistance => new Length(2000, Length.UnitType.Millimeters); + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + readonly IDigitalOutputPort shutdownPort; byte stopVariable; @@ -59,10 +64,9 @@ public bool IsShutdown /// /// I2C bus /// I2C address - public Vl53l0x(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Vl53l0x(II2cBus i2cBus, byte address = (byte)Address.Default) : this(i2cBus, null, address) - { - } + { } /// /// Creates a new Vl53l0x object @@ -71,7 +75,7 @@ public Vl53l0x(II2cBus i2cBus, byte address = (byte)Addresses.Default) /// Shutdown pin /// VL53L0X address - public Vl53l0x(II2cBus i2cBus, IPin shutdownPin, byte address = (byte)Addresses.Default) + public Vl53l0x(II2cBus i2cBus, IPin shutdownPin, byte address = (byte)Address.Default) : base(i2cBus, address) { if (shutdownPin != null) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/MeadowApp.cs index 65d6be25ea..7bbbed3b6c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Samples/Vl53l0x_Sample/MeadowApp.cs @@ -1,10 +1,10 @@ -using System; -using System.Threading.Tasks; -using Meadow; +using Meadow; using Meadow.Devices; using Meadow.Foundation.Sensors.Distance; using Meadow.Hardware; using Meadow.Units; +using System; +using System.Threading.Tasks; using LU = Meadow.Units.Length.UnitType; namespace Sensors.Distance.Vl53l0x_Sample @@ -20,7 +20,7 @@ public override Task Initialize() Resolver.Log.Info("Initializing hardware..."); var i2cBus = Device.CreateI2cBus(I2cBusSpeed.FastPlus); - sensor = new Vl53l0x(i2cBus, (byte)Vl53l0x.Addresses.Default); + sensor = new Vl53l0x(i2cBus); sensor.DistanceUpdated += Sensor_Updated; @@ -39,10 +39,10 @@ private void Sensor_Updated(object sender, IChangeResult result) if (result.New == null) { return; } if (result.New < new Length(0, LU.Millimeters)) - { + { Resolver.Log.Info("out of range."); } - else + else { Resolver.Log.Info($"{result.New.Millimeters}mm / {result.New.Inches:n3}\""); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs index 62da821d61..6067121ae9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs @@ -8,9 +8,9 @@ public partial class Ags01Db { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x11 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs index b99eefe696..1fe1b4d514 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Environmental /// Pinout (left to right, label side down): VDD, SDA, GND, SCL /// Note: requires pullup resistors on SDA/SCL /// - public partial class Ags01Db : ByteCommsSensorBase + public partial class Ags01Db : ByteCommsSensorBase, II2cPeripheral { const byte CRC_POLYNOMIAL = 0x31; const byte CRC_INIT = 0xFF; @@ -30,19 +30,23 @@ public partial class Ags01Db : ByteCommsSensorBase /// public Concentration? Concentration { get; private set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Ags01Db object /// /// The I2C bus /// The I2C address - public Ags01Db(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Ags01Db(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 3, writeBufferSize: 3) { } /// - /// Get ASG01DB VOC Gas Concentration and - /// Update the Concentration property. + /// Get ASG01DB VOC Gas Concentration and update the Concentration property /// protected override Task ReadSensor() { @@ -74,7 +78,7 @@ public byte GetVersion() BusComms.Exchange(WriteBuffer.Span[0..1], ReadBuffer.Span[0..1]); // CRC check - if (!CheckCrc8(ReadBuffer.Slice(0, 1).ToArray(), 1, ReadBuffer.Span[1])) + if (!CheckCrc8(ReadBuffer[..1].ToArray(), 1, ReadBuffer.Span[1])) { return unchecked((byte)-1); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs index 11d7bded6f..99822f117f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs @@ -5,7 +5,7 @@ partial class Ens160 /// /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs index 7f399bb2c2..9b36965b36 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs @@ -15,7 +15,7 @@ public partial class Ens160 : ByteCommsSensorBase<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)>, - IConcentrationSensor + IConcentrationSensor, II2cPeripheral { /// /// Raised when the CO2 concentration changes @@ -66,6 +66,11 @@ public OperatingMode CurrentOperatingMode set => BusComms.WriteRegister((byte)Registers.OPMODE, (byte)value); } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new ENS160 object /// @@ -75,7 +80,7 @@ public OperatingMode CurrentOperatingMode /// /// The I2C bus /// The I2C address - public Ens160(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Ens160(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 9, writeBufferSize: 9) { Initialize().Wait(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs index 3f34254395..08dfb88d22 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs @@ -1,8 +1,8 @@ -using System; -using System.Threading.Tasks; -using Meadow; +using Meadow; using Meadow.Devices; using Meadow.Foundation.Sensors.Environmental; +using System; +using System.Threading.Tasks; namespace Sensors.Environmental.Ens160_Sample { @@ -17,10 +17,10 @@ public override Task Initialize() Resolver.Log.Info("Initializing..."); var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); - - sensor = new Ens160(i2cBus, (byte)Ens160.Addresses.Address_0x53); - + sensor = new Ens160(i2cBus, (byte)Ens160.Address.Address_0x53); + + var consumer = Ens160.CreateObserver( handler: result => { @@ -46,7 +46,7 @@ public override Task Initialize() Resolver.Log.Info($" CO2 Concentration: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm"); Resolver.Log.Info($" Ethanol Concentraion: {result.New.EthanolConcentration?.PartsPerBillion:N0}ppb"); Resolver.Log.Info($" TVOC Concentraion: {result.New.TVOCConcentration?.PartsPerBillion:N0}ppb"); - Resolver.Log.Info($" AQI: {sensor.GetAirQualityIndex()}"); + Resolver.Log.Info($" AQI: {sensor.GetAirQualityIndex()}"); }; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj index e32fc42a08..adb8b0141f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.NextPm/Driver/Sensors.Environmental.NextPm.csproj @@ -14,7 +14,7 @@ 0.1.0 enable true - TERA Sensor NextPM particulate matter sensor + TERA Sensor NextPM serial particulate matter sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs index 82cb2a69cb..2e390fc91a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs @@ -5,7 +5,7 @@ public partial class Pmsa003i /// /// Valid I2C addresses for the sensor /// - internal enum Addresses : byte + internal enum Address : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs index 4b42cf848c..393a368da4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs @@ -22,7 +22,8 @@ public partial class Pmsa003i : ParticleDensity? ParticleDensity_10microns, ParticleDensity? ParticleDensity_25microns, ParticleDensity? ParticleDensity_50microns, - ParticleDensity? ParticleDensity_100microns)> + ParticleDensity? ParticleDensity_100microns)>, + II2cPeripheral { /// /// Raised when the Standard particulate matter PM1.0 density changes @@ -139,13 +140,18 @@ public partial class Pmsa003i : /// public ParticleDensity? CountOf100micronParticles => Conditions.ParticleDensity_100microns; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new PMSA003I sensor object /// /// /// The I2C bus public Pmsa003i(II2cBus i2cBus) - : base(i2cBus, (byte)Addresses.Address_0x12) + : base(i2cBus, (byte)Address.Default) { } /// @@ -199,7 +205,6 @@ public override void StopUpdating() throw new Exception("Message is corrupt or has invalid length"); } - var checksum = BitConverter.ToUInt16(buffer[2..4]); // this is in big-endian format, so we need to reverse things... var pm10Standard = new Density(BitConverter.ToUInt16(span[26..28]), Density.UnitType.MicroGramsPerMetersCubed); var pm25Standard = new Density(BitConverter.ToUInt16(span[24..26]), Density.UnitType.MicroGramsPerMetersCubed); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs index 85034d05b5..51033c761e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs @@ -5,7 +5,7 @@ partial class Scd4xBase /// /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x62 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs index fdc95ea3e7..68dfb6b720 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs @@ -15,7 +15,7 @@ public abstract partial class Scd4xBase : ByteCommsSensorBase<(Concentration? Concentration, Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor, IConcentrationSensor + ITemperatureSensor, IHumiditySensor, IConcentrationSensor, II2cPeripheral { /// /// Raised when the concentration changes @@ -47,6 +47,11 @@ public abstract partial class Scd4xBase /// public RelativeHumidity? Humidity => Conditions.Humidity; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Scd4xBase object /// @@ -56,7 +61,7 @@ public abstract partial class Scd4xBase /// /// The I2C bus /// The I2C address - public Scd4xBase(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Scd4xBase(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 9, writeBufferSize: 9) { StopPeriodicUpdates().Wait(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj index 1d4ce0cf3f..71e76c0cfb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.Mt3339/Driver/Sensors.Gnss.Mt3339.csproj @@ -16,11 +16,8 @@ MediaTek MT3339 serial GNSS / GPS controller enable - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs index fa30c6be10..25bf8324cb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs @@ -3,9 +3,9 @@ public partial class NeoM8 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x42 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs index 8ffcf62d87..dce53885d5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs @@ -6,8 +6,13 @@ namespace Meadow.Foundation.Sensors.Gnss { - public partial class NeoM8 + public partial class NeoM8 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -20,7 +25,7 @@ public partial class NeoM8 /// /// Create a new NeoM8 object using I2C /// - public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IPin resetPin = null, IPin ppsPin = null) + public NeoM8(II2cBus i2cBus, byte address = (byte)Address.Default, IPin resetPin = null, IPin ppsPin = null) { if (resetPin != null) { @@ -38,7 +43,7 @@ public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IPin resetP /// /// Create a new NeoM8 object using I2C /// - public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalOutputPort resetPort = null, IDigitalInputPort ppsPort = null) + public NeoM8(II2cBus i2cBus, byte address = (byte)Address.Default, IDigitalOutputPort resetPort = null, IDigitalInputPort ppsPort = null) { ResetPort = resetPort; PulsePerSecondPort = ppsPort; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs index 2b7c503b05..be59cb134d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Spi.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Sensors.Gnss { - public partial class NeoM8 : ISpiDevice + public partial class NeoM8 : ISpiPeripheral { /// /// The default SPI bus speed for the device diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs index a6e76f9534..e421605f99 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs @@ -3,9 +3,9 @@ public partial class As5013 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs index 2c848807bd..3e8a2b5263 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs @@ -69,7 +69,7 @@ public DigitalJoystickPosition? DigitalPosition /// the I2C bus /// the device I2C address /// port connected to the interrupt pin - public As5013(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalInterruptPort interruptPort = null) + public As5013(II2cBus i2cBus, byte address = (byte)Address.Default, IDigitalInterruptPort interruptPort = null) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs index d530562192..6b776ded44 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs @@ -26,9 +26,9 @@ public enum KeyState } /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x1F diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs index 40e32ad86b..90fb4bba2b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs @@ -49,7 +49,7 @@ public byte BackLight2 /// The I2C bus /// The interrupt pin /// The I2C address - public BBQ10Keyboard(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Addresses.Default) + public BBQ10Keyboard(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs index 0bc43bdc3c..57a64c8302 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs @@ -59,7 +59,7 @@ public int RefreshPeriod /// /// Create a new MPR121 keypad object. /// - public Mpr121(II2cBus i2cBus, byte address = (byte)Addresses.Default, int refreshPeriod = -1, Mpr121Configuration configuration = null) + public Mpr121(II2cBus i2cBus, byte address = (byte)Address.Default, int refreshPeriod = -1, Mpr121Configuration configuration = null) { this.refreshPeriod = refreshPeriod; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs index bde1a53b5a..1dbdc36379 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs @@ -4,9 +4,9 @@ namespace Meadow.Foundation.Sensors.Hid public partial class Mpr121 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x5A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs index a39c63e9dd..6933e33677 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs @@ -3,9 +3,9 @@ public partial class Tsc2004 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x4B diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs index 62c27393e2..aed69b4bd5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs @@ -55,7 +55,7 @@ public partial class Tsc2004 /// /// The I2C bus /// The I2C address - public Tsc2004(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Tsc2004(II2cBus i2cBus, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs index b00f9d9538..8bc9fae6f1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs @@ -36,7 +36,7 @@ public class NesClassicController : WiiClassicControllerBase /// Creates a NES Classic Mini Controller object /// /// the I2C bus connected to controller - public NesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) + public NesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs index d2839a4e98..ba7fa434e8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs @@ -53,7 +53,7 @@ public class SnesClassicController : WiiClassicControllerBase /// Creates a SNES Classic Mini Controller object /// /// the I2C bus connected to controller - public SnesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) + public SnesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs index 3863f6b89d..6b9818ede2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs @@ -85,7 +85,7 @@ public class WiiClassicController : WiiClassicControllerBase /// /// the I2C bus connected to controller /// Enable high resolution mode analog sticks and triggers (8 bits of precision) - public WiiClassicController(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Addresses.Default) + public WiiClassicController(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Address.Default) { this.useHighResolutionMode = useHighResolutionMode; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs index f013b4d680..685cca31b0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs @@ -76,7 +76,7 @@ public class WiiClassicControllerPro : WiiClassicControllerBase /// /// the I2C bus connected to controller /// Enable high resolution mode analog sticks and triggers (8 bits of precision) - public WiiClassicControllerPro(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Addresses.Default) + public WiiClassicControllerPro(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Address.Default) { this.useHighResolutionMode = useHighResolutionMode; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs index a95c44779a..d9d70a8884 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs @@ -45,7 +45,7 @@ public class WiiNunchuck : WiiExtensionControllerBase /// Creates a Wii Nunchuck object /// /// the I2C bus connected to controller - public WiiNunchuck(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) + public WiiNunchuck(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs index b099a6feb2..a6b72382d5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs @@ -3,9 +3,9 @@ public abstract partial class WiiExtensionControllerBase { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs index f9031af29d..92f3e14992 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs @@ -3,9 +3,9 @@ public partial class Bh1745 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Address of the peripheral when the address pin is pulled low. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs index 75d7b9c815..065b5e56b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs @@ -238,7 +238,7 @@ public ushort UpperInterruptThreshold /// /// Create a new BH17545 color sensor object /// - public Bh1745(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Bh1745(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { CompensationMultipliers = new ChannelMultipliers diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs index 78d55511fc..05eb2e6e28 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs @@ -3,9 +3,9 @@ public partial class Bh1750 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Address of the peripheral when the address pin is pulled low diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs index 0bb2d50b80..f32a772db4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs @@ -46,7 +46,7 @@ public double LightTransmittance /// Create a new BH1750 light sensor object using a static reference voltage. /// public Bh1750( - II2cBus i2cBus, byte address = (byte)Addresses.Default, + II2cBus i2cBus, byte address = (byte)Address.Default, MeasuringModes measuringMode = MeasuringModes.ContinuouslyHighResolutionMode, double lightTransmittance = 1) : base(i2cBus, address) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs index 25cc2579c8..e20c1a31ed 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs @@ -3,9 +3,9 @@ public partial class Max44009 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x4A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs index c8593ff863..2cfaa0a234 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs @@ -15,7 +15,7 @@ public partial class Max44009 : ByteCommsSensorBase /// /// The I2C bus /// The I2C address - public Max44009(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Max44009(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs index 88727407c3..0550c0fda1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs @@ -3,9 +3,9 @@ public partial class Si1145 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs index 302e52351c..d9daba43e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs @@ -21,7 +21,7 @@ public partial class Si1145 /// Create a new SI1145 sensor object /// /// I2cBus (default to 400 KHz) - public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) + public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) { if (BusComms.ReadRegister(Registers.REG_PARTID) != 0x45) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs index 84a32bb9cb..71f4cdd257 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs @@ -14,9 +14,9 @@ namespace Meadow.Foundation.Sensors.Light public partial class Tsl2591 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x29 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs index db2875d788..eda0ecea7f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs @@ -107,7 +107,7 @@ public IntegrationTimes IntegrationTime /// The I2C bus /// The I2C address public Tsl2591(II2cBus i2cBus, - byte address = (byte)Addresses.Default) + byte address = (byte)Address.Default) : base(i2cBus, address) { Gain = GainFactor.Medium; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs index 2f5ecafe4d..51087ac99a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs @@ -3,9 +3,9 @@ public partial class Veml7700 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x10 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs index 9b07ebcd87..f1373e8b79 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs @@ -46,7 +46,7 @@ public partial class Veml7700 : ByteCommsSensorBase, ILightSensor, /// /// The I2C bus public Veml7700(II2cBus i2cBus) - : base(i2cBus, (byte)Addresses.Default) + : base(i2cBus, (byte)Address.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs index 051b105d2e..7195733dec 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs @@ -4,9 +4,9 @@ namespace Meadow.Foundation.Sensors.LoadCell public partial class Nau7802 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x2A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs index b6cb0d4b86..bcc24df5b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs @@ -37,20 +37,20 @@ public partial class Nau7802 : ByteCommsSensorBase, IMassSensor, IDisposab /// /// The I2C bus public Nau7802(II2cBus i2cBus) - : base(i2cBus, (byte)Addresses.Default) + : base(i2cBus, (byte)Address.Default) { - Initialize((byte)Addresses.Default); + Initialize((byte)Address.Default); } private void Initialize(byte address) { switch (address) { - case (byte)Addresses.Default: + case (byte)Address.Default: // valid; break; default: - throw new ArgumentOutOfRangeException($"NAU7802 device supports only address {(byte)Addresses.Default}"); + throw new ArgumentOutOfRangeException($"NAU7802 device supports only address {(byte)Address.Default}"); } PowerOn(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs index 3d8846ef18..1a8289f627 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs @@ -72,7 +72,7 @@ public sbyte OffsetZ /// /// Address of the I2C sensor /// I2C bus - public Adxl345(II2cBus i2cBus, Addresses address = Addresses.Default) + public Adxl345(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs index aed970095c..c1fd8e6bdc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs @@ -3,9 +3,9 @@ public partial class Adxl345 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x53 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index a82cb37521..3f3a9d3a3e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -24,7 +24,7 @@ namespace Meadow.Foundation.Sensors.Motion /// public partial class Adxl362 : ByteCommsSensorBase<(Acceleration3D? Acceleration3D, Units.Temperature? Temperature)>, - IAccelerometer, ITemperatureSensor, ISpiDevice + IAccelerometer, ITemperatureSensor, ISpiPeripheral { /// /// Raised when the acceleration value changes diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs index 1321b7f2ed..aa6b9f7f2b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs @@ -3,9 +3,9 @@ public partial class Apds9960 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x39 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs index 64b0aefb2e..90d6860407 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs @@ -58,7 +58,7 @@ public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? /// SI2C bus object /// The interrupt pin public Apds9960(II2cBus i2cBus, IPin interruptPin) - : base(i2cBus, (byte)Addresses.Default) + : base(i2cBus, (byte)Address.Default) { if (interruptPin != null) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs index f839858181..fa291db04a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs @@ -5,7 +5,7 @@ public partial class Bmi270 /// /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index 92d88fa34d..ae02d20e1b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -63,7 +63,7 @@ public partial class Bmi270 : /// /// The I2C bus connected to the sensor /// The I2C address - public Bmi270(II2cBus i2cBus, byte address = (byte)Addresses.Address_0x68) + public Bmi270(II2cBus i2cBus, byte address = (byte)Address.Address_0x68) { //Read buffer: 16 (needs at least 13) //Write buffer: 256 bytes for the config data + 1 for the address diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs index 645569aa8b..6d948bbedc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs @@ -3,9 +3,9 @@ public partial class Bno055 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x28 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs index bcb9f3ddb1..ae1de12c0e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs @@ -252,7 +252,7 @@ private byte Page /// /// Address of the BNO055 (default = 0x28). /// I2C bus (default = 400 KHz). - public Bno055(II2cBus i2cBus, Addresses address = Addresses.Default) + public Bno055(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs index f17556a4bf..dd1f53e054 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs @@ -3,9 +3,9 @@ public partial class Hmc5883 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x1E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index 6d433e63f7..d575f8f4a0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -49,7 +49,7 @@ public partial class Hmc5883 : ByteCommsSensorBase /// Output rate /// Sample amount /// Measurement configuration - public Hmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Default, + public Hmc5883(II2cBus i2cBus, byte address = (byte)Address.Default, GainLevels gain = GainLevels.Gain1090, MeasuringModes measuringMode = MeasuringModes.Continuous, DataOutputRates outputRate = DataOutputRates.Rate15, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs index 38414c3217..8cf29aa7e8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs @@ -20,7 +20,7 @@ public class Qmc5883 : Hmc5883 /// Output rate /// Samples amount /// Measurement configuration - public Qmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Qmc5883, + public Qmc5883(II2cBus i2cBus, byte address = (byte)Address.Qmc5883, GainLevels gain = GainLevels.Gain1090, MeasuringModes measuringMode = MeasuringModes.Continuous, DataOutputRates outputRate = DataOutputRates.Rate15, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs index 79559de8f6..f19333b8af 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs @@ -5,7 +5,7 @@ public partial class Lis2Mdl /// /// Valid I2C addresses for the sensor /// - enum Addresses : byte + enum Address : byte { /// /// Bus address 0x1E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 953d0a6ceb..33cde6d812 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -32,7 +32,7 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// /// The I2C bus connected to the sensor /// The I2C address - public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Address.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs index 52b0999109..566bcc003b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs @@ -5,7 +5,7 @@ public partial class Lsm303agr /// /// Valid I2C addresses for the sensor /// - enum Addresses : byte + enum Address : byte { /// /// Bus address 0x19 for the accelerometer diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index e730d93504..144214ee1a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -49,8 +49,8 @@ public partial class Lsm303agr : /// The I2C bus connected to the sensor public Lsm303agr(II2cBus i2cBus) { - i2cCommsAccel = new I2cCommunications(i2cBus, (byte)Addresses.AddressAccel_0x19); - i2cCommsMag = new I2cCommunications(i2cBus, (byte)Addresses.AddressMag_0x1E); + i2cCommsAccel = new I2cCommunications(i2cBus, (byte)Address.AddressAccel_0x19); + i2cCommsMag = new I2cCommunications(i2cBus, (byte)Address.AddressMag_0x1E); Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs index f5f4c42247..a75d32aee9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs @@ -3,9 +3,9 @@ public partial class Mag3110 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x0E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs index ad22481f6d..365cf838e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs @@ -114,7 +114,7 @@ public bool DigitalInputsEnabled /// Interrupt port used to detect end of conversions /// Address of the MAG3110 (default = 0x0e) /// I2C bus object - default = 400 KHz) - public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Addresses.Default) + public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Address.Default) : base(i2cBus, address) { var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs index 2e1c1899cd..72f5c68417 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs @@ -3,9 +3,9 @@ public partial class Mma7660fc { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x4C diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs index 87e3733f62..e15f566204 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs @@ -36,7 +36,7 @@ public partial class Mma7660fc : ByteCommsSensorBase, IAccelerom /// /// Address of the I2C sensor /// I2C bus - public Mma7660fc(II2cBus i2cBus, Addresses address = Addresses.Default) + public Mma7660fc(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs index 2329db725a..6a23fb556b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mmc5603 /// /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x30 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs index fa379e9648..a155a8c946 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs @@ -38,7 +38,7 @@ public bool ContinuousModeEnabled /// /// Address of the Mmc5603 /// I2C bus object - default = 400 KHz - public Mmc5603(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Mmc5603(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, 10, 8) { var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs index 9ca4668d4d..d6659579f2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs @@ -3,9 +3,9 @@ public partial class Mpu6050 { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs index 67792dc529..ae081de834 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs @@ -63,7 +63,7 @@ public partial class Mpu6050 : /// /// The I2C bus /// The I2C address - public Mpu6050(II2cBus i2cBus, Addresses address = Addresses.Default) + public Mpu6050(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs index 533261dc27..dc920116b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs @@ -8,9 +8,9 @@ namespace Meadow.Foundation.Sensors.Power public partial class Ina260 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index dfc3a00e70..8499e92d30 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -48,13 +48,13 @@ public partial class Ina260 /// /// The I2C bus /// The I2C address - public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Ina260(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { switch (address) { - case (byte)Addresses.Address_0x40: - case (byte)Addresses.Address_0x41: + case (byte)Address.Address_0x40: + case (byte)Address.Address_0x41: // valid; break; default: diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs index 0b67a2d964..01aaae2755 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs @@ -3,9 +3,9 @@ public partial class Lm75 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs index df56fda667..7e99c2604f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs @@ -25,7 +25,7 @@ public partial class Lm75 : ByteCommsSensorBase, ITemperature /// /// The I2C bus /// I2C address of the sensor - public Lm75(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Lm75(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs index c118755f7d..f7f490b4fc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs @@ -12,7 +12,7 @@ public partial class Mcp9600 : Mcp960x /// /// The I2C bus /// I2C address of the sensor - public Mcp9600(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) + public Mcp9600(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs index bdf771d233..048cce7af5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs @@ -12,7 +12,7 @@ public partial class Mcp9601 : Mcp960x /// /// The I2C bus /// I2C address of the sensor - public Mcp9601(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) + public Mcp9601(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) { } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs index 87e6d5b455..66189d9ce3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs @@ -3,9 +3,9 @@ public partial class Mcp960x { /// - /// Valid addresses for the sensor + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs index 6384afe74b..7258c79188 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs @@ -3,9 +3,9 @@ public partial class Mcp9808 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x18 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs index c108a3392f..2bc375325b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs @@ -44,7 +44,7 @@ public partial class Mcp9808 : ByteCommsSensorBase, ITemperat /// /// The I2C bus /// The I2C address - public Mcp9808(II2cBus i2CBus, byte address = (byte)Addresses.Default) + public Mcp9808(II2cBus i2CBus, byte address = (byte)Address.Default) : base(i2CBus, address, readBufferSize: 8, writeBufferSize: 8) { BusComms?.WriteRegister(MCP_REG_CONFIG, (ushort)0x0); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs index d8404e746a..442816a862 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs @@ -3,9 +3,9 @@ public partial class Tmp102 { /// - /// Valid addresses for the sensor. + /// Valid I2C addresses for the sensor /// - public enum Addresses : byte + public enum Address : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs index 37c6771635..df02f3387a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs @@ -54,7 +54,7 @@ public Resolution SensorResolution /// /// The I2CBus /// I2C address of the sensor. - public Tmp102(II2cBus i2cBus, byte address = (byte)Addresses.Default) + public Tmp102(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 2, writeBufferSize: 2) { BusComms?.ReadRegister(0x01, ReadBuffer.Span); diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index 6d0a9f3df7..23523effbb 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1143,8 +1143,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003i", "Pmsa003i", "{AD EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ch1115", "Ch1115", "{753F764D-EA21-43A0-B761-6E9B43D8C90B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Ch1115", "Meadow.Foundation.Peripherals\Displays.Ch1115\Driver\Displays.Ch1115.csproj", "{C182D69A-FE45-46BF-8522-76E0BC962FFB}" @@ -3527,7 +3525,6 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} - {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} {753F764D-EA21-43A0-B761-6E9B43D8C90B} = {2B794146-DFEE-475A-B919-7D3ED48587B8} {C182D69A-FE45-46BF-8522-76E0BC962FFB} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} {D46CA94B-9A0C-4188-9EE8-8A51E1499B73} = {753F764D-EA21-43A0-B761-6E9B43D8C90B} From 66a142e90eec84e6aa5c0f2166a9a1ce7a83c3d1 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 25 Apr 2023 09:34:26 -0700 Subject: [PATCH 095/141] More peripheral cleanup and abstraction --- .../Leds.Pca9633/Driver/Pca9633.cs | 2 +- .../Driver/Sensors.Atmospheric.Ccs811.csproj | 2 +- .../Sensors.Hid.As5013/Driver/As5013.cs | 11 ++- .../Driver/BBQ10Keyboard.cs | 7 +- .../Sensors.Hid.Mpr121/Driver/Mpr121.cs | 7 +- .../Sensors.Hid.Tsc2004/Driver/Tsc2004.cs | 7 +- .../Driver/WiiExtensionControllerBase.cs | 9 +- .../NesClassicController_Sample/MeadowApp.cs | 2 +- .../SnesClassicController_Sample/MeadowApp.cs | 2 +- .../MeadowApp.cs | 2 +- .../WiiClassicController_Sample/MeadowApp.cs | 2 +- .../Samples/WiiNunchuck_Sample/MeadowApp.cs | 2 +- .../Sensors.Light.Bh1745/Driver/Bh1745.cs | 22 ++--- .../Sensors.Light.Bh1750/Driver/Bh1750.cs | 7 +- .../Driver/Sensors.Light.Bh1750.csproj | 2 +- .../Sensors.Light.Max44009/Driver/Max44009.cs | 9 +- .../Driver/Sensors.Light.Max44009.csproj | 2 +- .../Sensors.Light.Si1145/Driver/Si1145.cs | 13 +-- .../Sensors.Light.Veml7700/Driver/Veml7700.cs | 83 ++++++++++--------- .../Sensors.LoadCell.Hx711/Driver/Hx711.cs | 58 ++++++------- .../Driver/Sensors.LoadCell.Hx711.csproj | 2 +- .../Driver/Nau7802.cs | 59 +++++++------ .../Driver/Sensors.LoadCell.Nau7802.csproj | 9 +- .../Driver/Sensors.Moisture.Capacitive.csproj | 7 +- .../Driver/Sensors.Moisture.Fc28.csproj | 9 +- .../Driver/Sensors.Motion.Adxl3xx.csproj | 2 +- 26 files changed, 181 insertions(+), 158 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs index c3584898f3..13960c8018 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs @@ -5,7 +5,7 @@ namespace Meadow.Foundation.Leds /// /// Represents a Pca9633 led driver /// - public partial class Pca9633 + public partial class Pca9633 : II2cPeripheral { /// /// The default I2C address for the peripheral diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj index 39588b0cc3..b483343bec 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Sensors.Atmospheric.Ccs811.csproj @@ -8,7 +8,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Atmospheric.Ccs811 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, VOC, Air, Ccs811 + Meadow.Foundation,VOC,Air,quality,Ccs811 0.1.17 true Ccs811 I2C VOC Air Quality Sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs index 3e8a2b5263..84e185d68f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.Sensors.Hid /// for analog joysticks /// public partial class As5013 - : SamplingSensorBase, IAnalogJoystick + : SamplingSensorBase, IAnalogJoystick, II2cPeripheral { /// /// Event if interrupt port is provided for interrupt pin @@ -58,6 +58,11 @@ public DigitalJoystickPosition? DigitalPosition } } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// @@ -197,9 +202,7 @@ void Update() if (IsVerticalHorizonalSwapped) { - float temp = newX; - newX = newY; - newY = temp; + (newY, newX) = (newX, newY); } var oldPosition = Position; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs index 90fb4bba2b..6f067c3f15 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs @@ -7,8 +7,13 @@ namespace Meadow.Foundation.Sensors.Hid /// /// Represents a BBQ10Keyboard Featherwing /// - public partial class BBQ10Keyboard + public partial class BBQ10Keyboard : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs index 57a64c8302..5981a7d6a2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs @@ -9,8 +9,13 @@ namespace Meadow.Foundation.Sensors.Hid /// /// Represents the MPR121 12-Key Capacitive Touch Sensor /// - public partial class Mpr121 + public partial class Mpr121 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs index aed69b4bd5..12209d5014 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs @@ -8,8 +8,13 @@ namespace Meadow.Foundation.Sensors.Hid /// /// Represents a TSC2004 4-wire touch screen controller /// - public partial class Tsc2004 + public partial class Tsc2004 : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs index ca1a8c16dc..51158c3286 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs @@ -9,12 +9,17 @@ namespace Meadow.Foundation.Sensors.Hid /// Abstract base class that represents /// Nintendo Wiimote I2C extension controllers /// - public abstract partial class WiiExtensionControllerBase + public abstract partial class WiiExtensionControllerBase : II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Default I2C bus speed (400kHz) /// - public static I2cBusSpeed DefaultSpeed => I2cBusSpeed.Fast; + public static I2cBusSpeed DefaultI2cSpeed => I2cBusSpeed.Fast; /// /// I2C Communication bus used to communicate with the peripheral diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/MeadowApp.cs index 9e9ab08195..a37c010cb7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/NesClassicController_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var i2cBus = Device.CreateI2cBus(NesClassicController.DefaultSpeed); + var i2cBus = Device.CreateI2cBus(NesClassicController.DefaultI2cSpeed); nesController = new NesClassicController(i2cBus: i2cBus); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/MeadowApp.cs index ed1100f6c2..d158164c6e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/SnesClassicController_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var i2cBus = Device.CreateI2cBus(SnesClassicController.DefaultSpeed); + var i2cBus = Device.CreateI2cBus(SnesClassicController.DefaultI2cSpeed); snesController = new SnesClassicController(i2cBus: i2cBus); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/MeadowApp.cs index f0e0a61685..cc2b434b0e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicControllerPro_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var i2cBus = Device.CreateI2cBus(WiiClassicControllerPro.DefaultSpeed); + var i2cBus = Device.CreateI2cBus(WiiClassicControllerPro.DefaultI2cSpeed); classicControllerPro = new WiiClassicControllerPro(i2cBus: i2cBus, useHighResolutionMode: true); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/MeadowApp.cs index af3b7699b8..66ec80bb77 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiClassicController_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var i2cBus = Device.CreateI2cBus(WiiClassicController.DefaultSpeed); + var i2cBus = Device.CreateI2cBus(WiiClassicController.DefaultI2cSpeed); classicController = new WiiClassicController(i2cBus: i2cBus, useHighResolutionMode: true); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/MeadowApp.cs index d477cb2c06..d09c3d81eb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Samples/WiiNunchuck_Sample/MeadowApp.cs @@ -16,7 +16,7 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - nunchuck = new WiiNunchuck(Device.CreateI2cBus(WiiNunchuck.DefaultSpeed)); + nunchuck = new WiiNunchuck(Device.CreateI2cBus(WiiNunchuck.DefaultI2cSpeed)); nunchuck.GetIdentification(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs index 065b5e56b7..27cb077536 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs @@ -7,25 +7,12 @@ namespace Meadow.Foundation.Sensors.Light { - // TODO: The chip can drive LEDs which will help to identify colors more - // accurately by lighting them up. I found this documentation from the - // pimoroni site (https://shop.pimoroni.com/products/bh1745-luminance-and-colour-sensor-breakout) - // which makes a breakout that has LEDs: - // - // The LEDs are connected to the BH1745 Interrupt line. This is activated by - // a threshold mechanism that is fully documented in the BH1745 chip manual. - // You can select which of the four light sensor channels to use and you can - // set a high and a low threshold. The Interrupt is enabled when the light - // is above the high level or below the low level. Write 0x1D to register - // 0x60 to enable Interrupts and select the unfiltered light sensor. Write - // 0xFF to the four registers starting at 0x62 to force the LEDs on. With - // the default settings in these registers, the LEDS will be off. - /// /// Represents a BH1745 Luminance and Colour Sensor /// public partial class Bh1745 - : ByteCommsSensorBase<(Illuminance? AmbientLight, Color? Color, bool Valid)>, ILightSensor + : ByteCommsSensorBase<(Illuminance? AmbientLight, Color? Color, bool Valid)>, + ILightSensor, II2cPeripheral { /// /// Raised when the luminosity changes @@ -235,6 +222,11 @@ public ushort UpperInterruptThreshold /// public ChannelMultipliers CompensationMultipliers { get; set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new BH17545 color sensor object /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs index f32a772db4..a03920267d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs @@ -11,7 +11,7 @@ namespace Meadow.Foundation.Sensors.Light /// /// Represents a BH1750 ambient light sensor /// - public partial class Bh1750 : ByteCommsSensorBase, ILightSensor + public partial class Bh1750 : ByteCommsSensorBase, ILightSensor, II2cPeripheral { /// /// Raised when a new Illuminance value is read by the sensor @@ -42,6 +42,11 @@ public double LightTransmittance private const float MaxTransmittance = 2.225f; private const float MinTransmittance = 0.272f; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new BH1750 light sensor object using a static reference voltage. /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj index f72e3c4d76..b995205fe0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Sensors.Light.Bh1750.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Light.Bh1750 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Light, Bh1750 + Meadow.Foundation,luminance,color,Light,Bh1750 0.1.52 true Bh1750 I2C luminance and color light sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs index 2cfaa0a234..2018fbcbcd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs @@ -8,15 +8,20 @@ namespace Meadow.Foundation.Sensors.Light /// /// Driver for the Max44009 light-to-digital converter /// - public partial class Max44009 : ByteCommsSensorBase + public partial class Max44009 : ByteCommsSensorBase, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Max44009 object /// /// The I2C bus /// The I2C address public Max44009(II2cBus i2cBus, byte address = (byte)Address.Default) - : base(i2cBus, address) + : base(i2cBus, address) { Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj index 73d727c4db..43bf0de40c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Sensors.Light.Max44009.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Light.Max44009 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Max44009, Light + Meadow.Foundation,Max44009,Light,ultraviolet 0.1.49 true Max44009 I2C ultraviolet and ambient light sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs index d9daba43e7..97c61f53c5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs @@ -6,17 +6,18 @@ namespace Meadow.Foundation.Sensors.Light { - // TODO: the proximity stuff isn't exposed. exposing it needs some more - // thought. you need to hook up an infrared LED to the LED pin. this will - // cause that pin to fire, then the sensor measures the time of flight. - // it's basically a completely different sensor. - /// /// Represents a SiLabs Proximity, UV, and ambient light sensor /// public partial class Si1145 - : ByteCommsSensorBase<(Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared)> + : ByteCommsSensorBase<(Illuminance? VisibleLight, double? UltravioletIndex, Illuminance? Infrared)>, + II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new SI1145 sensor object /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs index f1373e8b79..97e5226f03 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs @@ -9,7 +9,8 @@ namespace Meadow.Foundation.Sensors.Light /// /// High Accuracy Ambient Light Sensor /// - public partial class Veml7700 : ByteCommsSensorBase, ILightSensor, IDisposable + public partial class Veml7700 : ByteCommsSensorBase, + ILightSensor, II2cPeripheral, IDisposable { /// /// Raised when the luminosity value changes @@ -41,6 +42,11 @@ public partial class Veml7700 : ByteCommsSensorBase, ILightSensor, private const ushort DATA_FLOOR = 100; private const ushort DATA_CEILING = 10000; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Create a new Veml7700 object with the default address /// @@ -50,10 +56,10 @@ public Veml7700(II2cBus i2cBus) { } - int _gain = 3; - int _integrationTime = 0; - bool _firstRead = true; - bool _outOfRange = false; + int gain = 3; + int integrationTime = 0; + bool firstRead = true; + bool outOfRange = false; /// /// Reads data from the sensor @@ -63,12 +69,11 @@ protected async override Task ReadSensor() { Illuminance illuminance = new Illuminance(0); - if (_firstRead) + if (firstRead) { WriteRegister(Registers.AlsConf0, 0); - //--//--// await Task.Delay(5); - _firstRead = false; + firstRead = false; } // priming read @@ -76,59 +81,59 @@ protected async override Task ReadSensor() while (true) { - _outOfRange = false; + outOfRange = false; // Resolver.Log.Info($"{DataSource} DATA A: 0x{data:x4}"); if (data > DATA_CEILING) { // Too bright! - if (_gain > 1) + if (gain > 1) { - await SetGain(--_gain); + await SetGain(--gain); } else if (data > DATA_CEILING) { // we're at min gain, have to speed integration time - if (++_integrationTime >= 4) + if (++integrationTime >= 4) { // everything is maxed out RangeExceededHigh?.Invoke(this, EventArgs.Empty); - _outOfRange = true; + outOfRange = true; } else { - await SetIntegrationTime(_integrationTime); + await SetIntegrationTime(integrationTime); } } } else if (data < DATA_FLOOR) { // Too dim! - if (_gain < 4) + if (gain < 4) { - await SetGain(++_gain); + await SetGain(++gain); } else if (data < DATA_FLOOR) { // we're at max gain, have to slow integration time - if (--_integrationTime <= -2) + if (--integrationTime <= -2) { RangeExceededLow?.Invoke(this, EventArgs.Empty); - _outOfRange = true; + outOfRange = true; } else { - await SetIntegrationTime(_integrationTime); + await SetIntegrationTime(integrationTime); } } } - if ((data >= DATA_FLOOR && data <= DATA_CEILING) || _outOfRange) + if ((data >= DATA_FLOOR && data <= DATA_CEILING) || outOfRange) { - return ScaleDataToIluminance(data, _gain, _integrationTime); + return ScaleDataToIluminance(data, gain, integrationTime); } - await DelayForIntegrationTime(_integrationTime); + await DelayForIntegrationTime(integrationTime); data = ReadRegister(DataSource == SensorTypes.Ambient ? Registers.Als : Registers.White); } @@ -136,24 +141,17 @@ protected async override Task ReadSensor() private Illuminance ScaleDataToIluminance(ushort data, int gain, int integrationTime) { - int scale; - - switch (gain) + var scale = gain switch { - case 1: // 1/8 - scale = 8; - break; - case 2: // 1/4 - scale = 4; - break; - case 4: // 2 - scale = 2; - break; - case 3: // 1 - default: - scale = 1; - break; - } + // 1/8 + 1 => 8, + // 1/4 + 2 => 4, + // 2 + 4 => 2, + // 1 + _ => 1, + }; switch (integrationTime) { @@ -196,8 +194,11 @@ private Illuminance CalculateCorrectedLux(double lux) return new Illuminance(6.0135E-13 * Math.Pow(lux, 4) - 9.3924E-09 * Math.Pow(lux, 3) + 8.1488E-05 * Math.Pow(lux, 2) + 1.0023E+00 * lux); } - - private void SetPower(bool on) + /// + /// Set power mode + /// + /// + public void SetPower(bool on) { ushort cfg; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs index 4c8eea86fd..92610519ff 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Hx711.cs @@ -15,16 +15,16 @@ public partial class Hx711 : PollingSensorBase, IMassSensor, IDisposable private const uint GPIO_BASE = 0x40020000; private const uint IDR_OFFSET = 0x10; private const uint BSSR_OFFSET = 0x18; - private const int timing_iterations = 3; + private const int timingIterations = 3; - private uint _sck_address; - private int _sck_pin; - private uint _dout_address; - private uint _sck_set; - private uint _sck_clear; - private uint _dout_mask; - private double _gramsPerAdcUnit; - private bool _createdPorts = false; + private uint sckAddress; + private int sckPin; + private uint doutAddress; + private uint sckSet; + private uint sckClear; + private uint doutMask; + private double gramsPerAdcUnit; + private readonly bool createdPorts = false; private IDigitalOutputPort SCK { get; } private IDigitalInputPort DOUT { get; } @@ -74,7 +74,7 @@ public Hx711(IPin sck, IPin dout, uint? tareValue = null) { SCK = sck.CreateDigitalOutputPort(); DOUT = dout.CreateDigitalInputPort(); - _createdPorts = true; // we need to dispose what we create + createdPorts = true; // we need to dispose what we create CalculateRegisterValues(sck, dout); Start(); @@ -185,7 +185,7 @@ public int CalculateCalibrationFactor() /// public void SetCalibrationFactor(int factor, Mass knownValue) { - _gramsPerAdcUnit = (knownValue.Grams / factor); + gramsPerAdcUnit = (knownValue.Grams / factor); } /// @@ -197,7 +197,7 @@ protected override Task ReadSensor() //ReadADC() call may block so wrap the logic in a Task return Task.Run(() => { - if (_gramsPerAdcUnit == 0) + if (gramsPerAdcUnit == 0) { throw new Exception("Calibration factor has not been set"); } @@ -219,7 +219,7 @@ protected override Task ReadSensor() } // convert to grams - var grams = value * _gramsPerAdcUnit; + var grams = value * gramsPerAdcUnit; // convert to desired units return new Mass(grams, Units.Mass.UnitType.Grams); @@ -234,15 +234,15 @@ private void CalculateRegisterValues(IPin sck, IPin dout) // Bits 15:0 set // Port offset = 0x0400 * index (with A being index 0) int gpio_port = sck.Key.ToString()[1] - 'A'; - _sck_pin = int.Parse(sck.Key.ToString().Substring(2)); - _sck_address = GPIO_BASE | (0x400u * (uint)gpio_port) | BSSR_OFFSET; - _sck_set = 1u << _sck_pin; - _sck_clear = 1u << (16 + _sck_pin); + sckPin = int.Parse(sck.Key.ToString().Substring(2)); + sckAddress = GPIO_BASE | (0x400u * (uint)gpio_port) | BSSR_OFFSET; + sckSet = 1u << sckPin; + sckClear = 1u << (16 + sckPin); gpio_port = dout.Key.ToString()[1] - 'A'; var gpio_pin = int.Parse(dout.Key.ToString().Substring(2)); - _dout_address = GPIO_BASE | (0x400u * (uint)gpio_port) | IDR_OFFSET; - _dout_mask = 1u << gpio_pin; + doutAddress = GPIO_BASE | (0x400u * (uint)gpio_port) | IDR_OFFSET; + doutMask = 1u << gpio_pin; } private unsafe void ClockLow() @@ -250,19 +250,19 @@ private unsafe void ClockLow() // this seems convoluted, but it is intentionally so to keep the compiler from optimizing out out timing. // A single call takes roughly 0.2us, but the part requires a minimum of 0.25us for the ADC to settle. // We don't have a simple micro-sleep, so we simply make multiple calls to assert state to suck up the required timing - for (int i = 0; i < timing_iterations; i++) + for (int i = 0; i < timingIterations; i++) { - var val = 1u << (16 + _sck_pin); // low - *(uint*)_sck_address = val; + var val = 1u << (16 + sckPin); // low + *(uint*)sckAddress = val; } } private unsafe void ClockHigh() { - for (int i = 0; i < timing_iterations; i++) + for (int i = 0; i < timingIterations; i++) { - var val = 1u << _sck_pin; // high - *(uint*)_sck_address = val; + var val = 1u << sckPin; // high + *(uint*)sckAddress = val; } } @@ -273,7 +273,7 @@ private unsafe uint ReadADC() lock (samplingLock) { // data line low indicates ready - while ((*(uint*)_dout_address & _dout_mask) != 0) + while ((*(uint*)doutAddress & doutMask) != 0) { Thread.Sleep(0); } @@ -281,10 +281,10 @@ private unsafe uint ReadADC() for (int i = 0; i < 24; i++) // 24 bits of data { ClockHigh(); - count = count << 1; + count <<= 1; ClockLow(); - if ((*(uint*)_dout_address & _dout_mask) != 0) // read DOUT state + if ((*(uint*)doutAddress & doutMask) != 0) // read DOUT state { count++; } @@ -326,7 +326,7 @@ protected override void RaiseEventsAndNotify(IChangeResult changeResult) /// Is disposing protected virtual void Dispose(bool disposing) { - if (_createdPorts) + if (createdPorts) { SCK.Dispose(); DOUT.Dispose(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj index b4211af8fc..855bd45fbd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Hx711/Driver/Sensors.LoadCell.Hx711.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.LoadCell.Hx711 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, LoadCell, Hx711 + Meadow.Foundation,LoadCell,Hx711 0.1.49 true Hx711 digital load cell amplifier diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs index bcc24df5b7..2396e679cf 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs @@ -10,17 +10,17 @@ namespace Meadow.Foundation.Sensors.LoadCell /// /// 24-Bit Dual-Channel ADC For Bridge Sensors /// - public partial class Nau7802 : ByteCommsSensorBase, IMassSensor, IDisposable + public partial class Nau7802 : ByteCommsSensorBase, IMassSensor, II2cPeripheral, IDisposable { /// /// Raised when the mass value changes /// public event EventHandler> MassUpdated = delegate { }; - private byte[] _read = new byte[3]; - private double _gramsPerAdcUnit = 0; - private PU_CTRL_BITS _currentPU_CTRL; - private int _tareValue; + private readonly byte[] readBuffer = new byte[3]; + private double gramsPerAdcUnit = 0; + private PU_CTRL_BITS currentPuCTRL; + private int tareValue; /// /// Default sample period @@ -32,6 +32,11 @@ public partial class Nau7802 : ByteCommsSensorBase, IMassSensor, IDisposab /// public Mass? Mass { get; private set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Creates an instance of the NAU7802 Driver class /// @@ -66,8 +71,8 @@ private int ReadADC() Thread.Sleep(1); } - BusComms?.ReadRegister((byte)Register.ADCO_B2, _read); - return _read[0] << 16 | _read[1] << 8 | _read[2]; + BusComms?.ReadRegister((byte)Register.ADCO_B2, readBuffer); + return readBuffer[0] << 16 | readBuffer[1] << 8 | readBuffer[2]; } /// @@ -80,8 +85,8 @@ public void Tare() Thread.Sleep(1); } - _tareValue = ReadADC(); - Output.WriteLine($"Tare base = {_tareValue:x}"); + tareValue = ReadADC(); + Output.WriteLine($"Tare base = {tareValue:x}"); } private void PowerOn() @@ -89,17 +94,17 @@ private void PowerOn() Output.WriteLine($"Powering up..."); // Set and clear the RR bit in 0x00, to guarantee a reset of all register values - _currentPU_CTRL = PU_CTRL_BITS.RR; - BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + currentPuCTRL = PU_CTRL_BITS.RR; + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)currentPuCTRL); Thread.Sleep(1); // make sure it has time to do it's thing - _currentPU_CTRL &= ~PU_CTRL_BITS.RR; + currentPuCTRL &= ~PU_CTRL_BITS.RR; - BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)currentPuCTRL); // turn on the analog and digital power - _currentPU_CTRL |= (PU_CTRL_BITS.PUD | PU_CTRL_BITS.PUA); + currentPuCTRL |= (PU_CTRL_BITS.PUD | PU_CTRL_BITS.PUA); - BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)currentPuCTRL); // wait for power-up ready var timeout = 100; do @@ -110,8 +115,8 @@ private void PowerOn() throw new Exception("Timeout powering up"); } Thread.Sleep(10); - _currentPU_CTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); - } while ((_currentPU_CTRL & PU_CTRL_BITS.PUR) != PU_CTRL_BITS.PUR); + currentPuCTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); + } while ((currentPuCTRL & PU_CTRL_BITS.PUR) != PU_CTRL_BITS.PUR); Output.WriteLine($"Configuring..."); @@ -128,13 +133,13 @@ private void PowerOn() } // turn on cycle start - _currentPU_CTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); - _currentPU_CTRL |= PU_CTRL_BITS.CS; + currentPuCTRL = (PU_CTRL_BITS)(BusComms?.ReadRegister((byte)Register.PU_CTRL) ?? 0); + currentPuCTRL |= PU_CTRL_BITS.CS; - BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)currentPuCTRL); - Output.WriteLine($"PU_CTRL: {_currentPU_CTRL}"); // 0xBE + Output.WriteLine($"PU_CTRL: {currentPuCTRL}"); // 0xBE // Enter the low power standby condition by setting PUA and PUD bits to 0, in R0x00 // Resume operation by setting PUA and PUD bits to 1, in R0x00.This sequence is the same for powering up from the standby condition, except that from standby all of the information in the configuration and calibration registers will be retained if the power supply is stable.Depending on conditions and the application, it may be desirable to perform calibration again to update the calibration registers for the best possible accuracy. @@ -162,9 +167,9 @@ private void SetLDO(LdoVoltage value) ctrl1 |= (byte)((byte)value << 3); BusComms?.WriteRegister((byte)Register.CTRL1, ctrl1); - _currentPU_CTRL |= PU_CTRL_BITS.AVDDS; + currentPuCTRL |= PU_CTRL_BITS.AVDDS; - BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)_currentPU_CTRL); // enable internal LDO + BusComms?.WriteRegister((byte)Register.PU_CTRL, (byte)currentPuCTRL); // enable internal LDO } private void SetGain(AdcGain value) @@ -239,7 +244,7 @@ public int CalculateCalibrationFactor() public void SetCalibrationFactor(int factor, Mass knownValue) { Resolver.Log.Info($"SetCalibrationFactor: knownValue.Grams: {knownValue.Grams:N1}"); - _gramsPerAdcUnit = knownValue.Grams / factor; + gramsPerAdcUnit = knownValue.Grams / factor; } int DoConversion() @@ -265,7 +270,7 @@ int DoConversion() /// The latest sensor reading protected override Task ReadSensor() { - if (_gramsPerAdcUnit == 0) + if (gramsPerAdcUnit == 0) { throw new Exception("Calibration factor has not been set"); } @@ -273,9 +278,9 @@ protected override Task ReadSensor() // get an ADC conversion var c = DoConversion(); // subtract the tare - var adc = c - _tareValue; + var adc = c - tareValue; // convert to grams - var grams = adc * _gramsPerAdcUnit; + var grams = adc * gramsPerAdcUnit; // convert to desired units return Task.FromResult(new Mass(grams, Units.Mass.UnitType.Grams)); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj index 964e5b4dd4..6f4898b7b0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Sensors.LoadCell.Nau7802.csproj @@ -10,17 +10,14 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.LoadCell.Nau7802 https://github.com/WildernessLabs/Meadow.Foundation - Meadow,Meadow.Foundation,LoadCell, Nau7802 + Meadow,Meadow.Foundation,LoadCell,Nau7802 0.1.17 true NAU7802 I2C 24-Bit dual channel analog to digital converter enable - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj index 0d5ce90ab2..b1b7f465a0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Capacitive/Driver/Sensors.Moisture.Capacitive.csproj @@ -16,11 +16,8 @@ Analog capacitive soil moisture sensor enable - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj index 98c68f38ad..4ce9dbee36 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Moisture.Fc28/Driver/Sensors.Moisture.Fc28.csproj @@ -10,17 +10,14 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Moisture.Fc28 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, FC28, Soil Moisture + Meadow.Foundation,FC28,Soil,Moisture 0.5.54 true FC28 analog soil moisture sensor enable - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj index 94b2a4605a..29c9fbf424 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Sensors.Motion.Adxl3xx.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.Adxl3xx https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, ADXL335, ADXL345, ADXL337, ADXL362, ADXL377, Accelerometer, Motion + Meadow.Foundation,ADXL335,ADXL345,ADXL337,ADXL362,ADXL377,Accelerometer,Motion,3-axis 0.1.13 true ADXL3xx Analog and I2C 3-axis accelerometers (ADXL335, ADXL345, ADXL337, ADXL362, ADXL377) From 5b87e40a06767d1efaf5c20698e9b03b7cc7b6cb Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 25 Apr 2023 10:15:50 -0700 Subject: [PATCH 096/141] More I2C cleanup --- .../Driver/Drivers/Adxl335.cs | 12 ++--- .../Driver/Drivers/Adxl337.cs | 17 +++---- .../Driver/Drivers/Adxl345.cs | 43 +++++++++------- .../Driver/Drivers/Adxl362.cs | 12 +---- .../Driver/Drivers/Adxl377.cs | 20 ++++---- .../Driver/Apds9960.cs | 12 +++-- .../Driver/Sensors.Motion.Apds9960.csproj | 2 +- .../Driver/Bmi270.Enums.cs | 2 +- .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 8 ++- .../Sensors.Motion.Bno055/Driver/Bno055.cs | 28 +++-------- .../Driver/Hcsens0040.cs | 20 ++++---- .../Driver/Sensors.Motion.Hcsens0040.csproj | 2 +- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 7 ++- .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 7 ++- .../Driver/Lsm303agr.cs | 8 ++- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 13 +++-- .../Driver/Sensors.Motion.Mag3110.csproj | 2 +- .../Driver/Mma7660fc.cs | 10 ++-- .../Driver/Sensors.Motion.Mma7660fc.csproj | 2 +- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 11 +++-- .../Sensors.Motion.Mpu6050/Driver/Mpu6050.cs | 16 +++--- .../Driver/Sensors.Motion.ParallaxPir.csproj | 2 +- .../Sensors.Power.Ina260/Driver/Ina260.cs | 8 ++- .../Driver/Sensors.Power.Ina260.csproj | 7 +-- .../Driver/Sensors.Radio.Rfid.IDxxLA.csproj | 2 +- .../Driver/Sensors.Sound.Ky038.csproj | 2 +- .../Sensors.Temperature.Lm75/Driver/Lm75.cs | 8 ++- .../Driver/Sensors.Temperature.Lm75.csproj | 7 +-- .../Driver/Mcp960x.cs | 9 +++- .../Driver/Mcp9808.Registers.cs | 27 ++++++++++ .../Driver/Mcp9808.cs | 49 +++++++------------ .../Sensors.Temperature.Thermistor.csproj | 11 ++--- .../Driver/Thermistor.cs | 11 +++-- .../Driver/Sensors.Temperature.Tmp102.csproj | 9 ++-- .../Driver/Tmp102.cs | 24 +++++---- ...Sensors.Weather.SwitchingAnemometer.csproj | 4 +- .../Sensors.Weather.SwitchingRainGauge.csproj | 2 +- .../Driver/Sensors.Weather.WindVane.csproj | 2 +- .../Driver/Servos.ServoCore.csproj | 2 +- 39 files changed, 237 insertions(+), 203 deletions(-) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Registers.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl335.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl335.cs index 8acb3bb8e9..c3c7be4989 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl335.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl335.cs @@ -4,18 +4,18 @@ namespace Meadow.Foundation.Sensors.Motion { /// - /// Driver for the ADXL335 triple axis accelerometer. + /// Driver for the ADXL335 triple axis accelerometer /// +/- 3g /// public class Adxl335 : Adxl3xxBase { /// - /// Create a new ADXL335 sensor object. + /// Create a new ADXL335 sensor object /// - /// Analog pin connected to the X axis output from the ADXL335 sensor. - /// Analog pin connected to the Y axis output from the ADXL335 sensor. - /// Analog pin connected to the Z axis output from the ADXL335 sensor. - /// The voltage supplied to the sensor. Defaults to 3.3V if null. + /// Analog pin connected to the X axis output from the ADXL335 sensor + /// Analog pin connected to the Y axis output from the ADXL335 sensor + /// Analog pin connected to the Z axis output from the ADXL335 sensor + /// The voltage supplied to the sensor. Defaults to 3.3V if null public Adxl335( IPin xPin, IPin yPin, IPin zPin, Voltage? supplyVoltage) : base(xPin, yPin, zPin, 6, supplyVoltage) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl337.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl337.cs index c6d84adb1a..fd3ff3ff13 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl337.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl337.cs @@ -4,22 +4,21 @@ namespace Meadow.Foundation.Sensors.Motion { /// - /// Driver for the ADXL337 triple axis accelerometer. + /// Driver for the ADXL337 triple axis accelerometer /// +/- 3g /// public class Adxl337 : Adxl3xxBase { /// - /// Create a new ADXL335 sensor object. + /// Create a new ADXL335 sensor object /// - /// Analog pin connected to the X axis output from the ADXL335 sensor. - /// Analog pin connected to the Y axis output from the ADXL335 sensor. - /// Analog pin connected to the Z axis output from the ADXL335 sensor. - /// The voltage supplied to the sensor. Defaults to 3.3V if null. - public Adxl337( - IPin xPin, IPin yPin, IPin zPin, Voltage? supplyVoltage) + /// Analog pin connected to the X axis output from the ADXL335 sensor + /// Analog pin connected to the Y axis output from the ADXL335 sensor + /// Analog pin connected to the Z axis output from the ADXL335 sensor + /// The voltage supplied to the sensor. Defaults to 3.3V if null + public Adxl337(IPin xPin, IPin yPin, IPin zPin, Voltage? supplyVoltage) : base(xPin, yPin, zPin, 6, supplyVoltage) { } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs index 1a8289f627..07d92976ce 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs @@ -11,8 +11,13 @@ namespace Meadow.Foundation.Sensors.Motion /// Driver for the ADXL345 triple axis accelerometer /// +/- 16g /// - public partial class Adxl345 : ByteCommsSensorBase, IAccelerometer + public partial class Adxl345 : ByteCommsSensorBase, IAccelerometer, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Event raised when acceleration changes /// @@ -22,7 +27,7 @@ public partial class Adxl345 : ByteCommsSensorBase, IAcceleromet /// /// Minimum value that can be used for the update interval when the - /// sensor is being configured to generate interrupts. + /// sensor is being configured to generate interrupts /// public const ushort MinimumPollingPeriod = 100; @@ -32,10 +37,10 @@ public partial class Adxl345 : ByteCommsSensorBase, IAcceleromet public Acceleration3D? Acceleration3D => Conditions; /// - /// Values stored in this register are automatically added to the X reading. + /// Values stored in this register are automatically added to the X reading /// /// - /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g. + /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g /// public sbyte OffsetX { @@ -44,10 +49,10 @@ public sbyte OffsetX } /// - /// Values stored in this register are automatically added to the Y reading. + /// Values stored in this register are automatically added to the Y reading /// /// - /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g. + /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g /// public sbyte OffsetY { @@ -56,10 +61,10 @@ public sbyte OffsetY } /// - /// Values stored in this register are automatically added to the Z reading. + /// Values stored in this register are automatically added to the Z reading /// /// - /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g. + /// Scale factor is 15.6 mg/LSB so 0x7f represents an offset of 2g /// public sbyte OffsetZ { @@ -68,7 +73,7 @@ public sbyte OffsetZ } /// - /// Create a new instance of the ADXL345 communicating over the I2C interface. + /// Create a new instance of the ADXL345 communicating over the I2C interface /// /// Address of the I2C sensor /// I2C bus @@ -78,7 +83,7 @@ public Adxl345(II2cBus i2cBus, Address address = Address.Default) } /// - /// Create a new instance of the ADXL345 communicating over the I2C interface. + /// Create a new instance of the ADXL345 communicating over the I2C interface /// /// Address of the I2C sensor /// I2C bus @@ -122,11 +127,11 @@ protected override void RaiseEventsAndNotify(IChangeResult chang /// /// Set the PowerControl register (see pages 25 and 26 of the data sheet) /// - /// Link the activity and inactivity events. - /// Enable / disable auto sleep when the activity and inactivity are linked. - /// Enable or disable measurements (turn on or off). - /// Put the part to sleep (true) or run in normal more (false). - /// Frequency of measurements when the part is in sleep mode. + /// Link the activity and inactivity events + /// Enable / disable auto sleep when the activity and inactivity are linked + /// Enable or disable measurements (turn on or off) + /// Put the part to sleep (true) or run in normal more (false) + /// Frequency of measurements when the part is in sleep mode public void SetPowerState(bool linkActivityAndInactivity, bool autoSleep, bool measuring, bool sleep, Frequencies frequency) { byte data = 0; @@ -154,13 +159,13 @@ public void SetPowerState(bool linkActivityAndInactivity, bool autoSleep, bool m /// /// Configure the data format (see pages 26 and 27 of the data sheet). /// - /// Put the device into self test mode when true. - /// Use 3-wire SPI (true) or 4-wire SPI (false). + /// Put the device into self test mode when true + /// Use 3-wire SPI (true) or 4-wire SPI (false) /// /// Set to full resolution (true) or 10-bit mode using the range determined by the range /// parameter (false). /// - /// Left-justified when true, right justified with sign extension when false. + /// Left-justified when true, right justified with sign extension when false /// Set the range of the sensor to 2g, 4g, 8g or 16g /// /// The range of the sensor is determined by the following table: @@ -196,7 +201,7 @@ public void SetDataFormat(bool selfTest, bool spiMode, bool fullResolution, bool /// /// Set the data rate and low power mode for the sensor. /// - /// Data rate for the sensor. + /// Data rate for the sensor /// /// Setting this to true will enter low power mode (note measurement will encounter more noise in /// this mode). diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs index 3f3a9d3a3e..3c2899568d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl362.cs @@ -11,14 +11,6 @@ namespace Meadow.Foundation.Sensors.Motion { - // Sample Reading - // Accel: [X:-1.04,Y:-0.29,Z:-9.44 (m/s^2)] - // Temp: 21.10C - - // Todo: right now, the sensor default to +-2G sensitivity. that can be - // changed in software. it would be good to expose that. note that the - // conversion will be different based on sensitivity range. - /// /// Driver for the ADXL362 triple axis accelerometer. /// @@ -40,12 +32,12 @@ public partial class Adxl362 const double AVERAGE_TEMPERATURE_BIAS = 350; /// - /// Digital input port attached to interrupt pin 1 on the ADXL362. + /// Digital input port attached to interrupt pin 1 on the ADXL362 /// private IDigitalInputPort digitalInputPort1; /// - /// Digital Input port attached to interrupt pin 2 on the ADXL362. + /// Digital Input port attached to interrupt pin 2 on the ADXL362 /// private IDigitalInputPort digitalInputPort2; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl377.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl377.cs index eae3ed0b75..3970034163 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl377.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl377.cs @@ -4,22 +4,20 @@ namespace Meadow.Foundation.Sensors.Motion { /// - /// Driver for the ADXL377 triple axis accelerometer. + /// Driver for the ADXL377 triple axis accelerometer /// +/- 200g /// public class Adxl377 : Adxl3xxBase { /// - /// Create a new ADXL335 sensor object. + /// Create a new ADXL377 sensor object /// - /// Analog pin connected to the X axis output from the ADXL335 sensor. - /// Analog pin connected to the Y axis output from the ADXL335 sensor. - /// Analog pin connected to the Z axis output from the ADXL335 sensor. - /// The voltage supplied to the sensor. Defaults to 3.3V if null. - public Adxl377( - IPin xPin, IPin yPin, IPin zPin, Voltage? supplyVoltage) + /// Analog pin connected to the X axis output from the ADXL335 sensor + /// Analog pin connected to the Y axis output from the ADXL335 sensor + /// Analog pin connected to the Z axis output from the ADXL335 sensor + /// The voltage supplied to the sensor. Defaults to 3.3V if null + public Adxl377(IPin xPin, IPin yPin, IPin zPin, Voltage? supplyVoltage) : base(xPin, yPin, zPin, 400, supplyVoltage) - { - } + { } } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs index 90d6860407..aac94f8fa3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs @@ -6,14 +6,11 @@ namespace Meadow.Foundation.Sensors.Motion { - // TODO: the light stuff seems to work. not sure on the RGB conversion though. - // haven't tested any of the gesture stuff. - // need to add distance - /// /// Represents the APDS9960 Proximity, Light, RGB, and Gesture Sensor /// - public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? AmbientLight)> + public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? AmbientLight)>, + II2cPeripheral { /// /// Raised when the ambient light value changes @@ -25,6 +22,11 @@ public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? /// public event EventHandler> ColorUpdated = delegate { }; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + readonly IDigitalInputPort interruptPort; readonly GestureData gestureData; int gestureUdDelta; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj index 7c413c972f..d0752d9ff3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Sensors.Motion.Apds9960.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.Apds9960 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Acceleration, Accelerometer, Apds9960 + Meadow.Foundation,Acceleration,Accelerometer,Apds9960 0.1.20 false APDS9960 I2C proximity, light, color and gesture sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs index fa291db04a..3f2a365dfc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs @@ -18,7 +18,7 @@ public enum Address : byte /// /// Default bus address 0x68 /// - Address_Default = Address_0x68, + Default = Address_0x68, } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index ae02d20e1b..2b7daded85 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -11,7 +11,8 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a BMI270 interial measurement unit (IMU) /// public partial class Bmi270 : - PollingSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)> + PollingSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)>, + II2cPeripheral { /// /// Event raised when linear acceleration changes @@ -53,6 +54,11 @@ public partial class Bmi270 : /// public AngularVelocityRange CurrentAngularVelocityRange { get; private set; } + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs index ae1de12c0e..19e1efcb74 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs @@ -10,27 +10,6 @@ namespace Meadow.Foundation.Sensors.Motion { - // Sample Reading: - // Accel: [X:0.00,Y:-1.15,Z:10.09 (m/s^2)] - // Gyro: [X:0.00,Y:-0.06,Z:0.06 (degrees/s)] - // Compass: [X:19.38,Y:-36.75,Z:-118.25 (Tesla)] - // Gravity: [X:0.00, Y:-1.12, Z:9.74 (meters/s^2)] - // Quaternion orientation: [X:-0.06, Y:0.00, Z:0.00] - // Euler orientation: [heading: 0.00, Roll: 0.00, Pitch: 0.12] - // Linear Accel: [X:0.00, Y:-0.03, Z:0.35 (meters/s^2)] - // Temp: 33.00C - - //TODO: the sensor works great as is right now, but there's some room for - // improvement. Currently, we basically turn it on full bore and get all - // the readings. - // However, there's an opportunity here to allow users to selectively turn - // on the various features, and then in the `ReadSensor()` method we can - // check before we do the reading to see what the user has turned on. - // if the feature is turned on, we can read and parse the registers and then - // set the `Conditions.[X] = reading`, otherwise set them to `null`, since - // all the conditions are nullable. this would provide folks with an - // opportunity to use the sensor in a low or lower-power configuration. - /// /// Provide methods / properties to allow an application to control a BNO055 /// 9-axis absolute orientation sensor. @@ -48,8 +27,13 @@ public partial class Bno055 : ByteCommsSensorBase<( MagneticField3D? MagneticField3D, Quaternion? QuaternionOrientation, Acceleration3D? LinearAcceleration, Acceleration3D? GravityVector, EulerAngles? EulerOrientation, Units.Temperature? Temperature)>, - IAccelerometer, IGyroscope, ITemperatureSensor + IAccelerometer, IGyroscope, ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the acceleration value changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Hcsens0040.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Hcsens0040.cs index 60c9f138b2..9c60dcc21b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Hcsens0040.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Hcsens0040.cs @@ -4,27 +4,27 @@ namespace Meadow.Foundation.Sensors.Motion { /// - /// Create a new Hscens0040 object. + /// Create a new Hscens0040 object /// public class Hcsens0040 { /// /// Digital input port /// - private readonly IDigitalInputPort _digitalInputPort; + private readonly IDigitalInputPort digitalInputPort; /// - /// Delgate for the motion start and end events. + /// Delgate for the motion start and end events /// public delegate void MotionChange(object sender); /// - /// Event raised when motion is detected. + /// Event raised when motion is detected /// public event MotionChange OnMotionDetected; /// - /// Create a new Parallax PIR object connected to an input pin and IO Device. + /// Create a new Parallax PIR object connected to an input pin and IO Device /// /// The input pin public Hcsens0040(IPin inputPin) : @@ -32,15 +32,15 @@ public Hcsens0040(IPin inputPin) : { } /// - /// Create a new Parallax PIR object connected to a interrupt port. + /// Create a new Parallax PIR object connected to a interrupt port /// /// public Hcsens0040(IDigitalInputPort digitalInputPort) { if (digitalInputPort != null) { - _digitalInputPort = digitalInputPort; - _digitalInputPort.Changed += DigitalInputPortChanged; + this.digitalInputPort = digitalInputPort; + this.digitalInputPort.Changed += DigitalInputPortChanged; } else { @@ -49,11 +49,11 @@ public Hcsens0040(IDigitalInputPort digitalInputPort) } /// - /// Catch the PIR motion change interrupts and work out which interrupt should be raised. + /// Catch the PIR motion change interrupts and work out which interrupt should be raised /// private void DigitalInputPortChanged(object sender, DigitalPortResult e) { - if (_digitalInputPort.State == true) + if (digitalInputPort.State == true) { OnMotionDetected?.Invoke(this); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj index da0a72f3e9..96873bbe2a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hcsens0040/Driver/Sensors.Motion.Hcsens0040.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.Hcsens0040 https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Motion, HCSENS0040, RCWL-0516 + Meadow,Meadow.Foundation,Motion,microwave,HCSENS0040,RCWL-0516 0.1.52 true HCSENS0040 digital microwave motion sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index d575f8f4a0..f8af3663a7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -11,8 +11,13 @@ namespace Meadow.Foundation.Sensors.Motion /// /// This driver is untested /// - public partial class Hmc5883 : ByteCommsSensorBase + public partial class Hmc5883 : ByteCommsSensorBase, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Event to be raised when the compass changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index 33cde6d812..fb91329216 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -10,7 +10,7 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a LIS2MDL is a low-power, high-performance 3-axis magnetometer from STMicroelectronics /// with a fixed full range of ±50 gauss and a 16-bit resolution /// - public partial class Lis2Mdl : PollingSensorBase, IMagnetometer + public partial class Lis2Mdl : PollingSensorBase, IMagnetometer, II2cPeripheral { /// /// Event raised when magnetic field changes @@ -22,6 +22,11 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// public MagneticField3D? MagneticField3D => Conditions; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// I2C Communication bus used to communicate with the peripheral /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index 144214ee1a..d8db61d456 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -11,7 +11,8 @@ namespace Meadow.Foundation.Sensors.Accelerometers /// Represents a LSM303AGR is a system-in-package (SiP) that combines a 3D linear acceleration sensor and a 3D magnetic sensor /// public partial class Lsm303agr : - PollingSensorBase<(Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D)>, IMagnetometer, IAccelerometer + PollingSensorBase<(Acceleration3D? Acceleration3D, MagneticField3D? MagneticField3D)>, + IMagnetometer, IAccelerometer, II2cPeripheral { /// /// Event raised when acceleration changes @@ -33,6 +34,11 @@ public partial class Lsm303agr : /// public MagneticField3D? MagneticField3D => Conditions.MagneticField3D; + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.AddressAccel_0x19; + /// /// I2C Communication bus used to communicate with the accelerometer /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs index 365cf838e9..f50b27c5af 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs @@ -7,19 +7,18 @@ namespace Meadow.Foundation.Sensors.Motion { - // TODO: Sensor is fully converted but data isn't right: - // Accel: [X:429.00,Y:-45.00,Z:-1,682.00 (m/s^2)] - // Temp: 16.00C - - // TODO: Interrupt handling is commented out - /// /// Represents the Xtrinsic MAG3110 Three-Axis, Digital Magnetometer /// public partial class Mag3110 : ByteCommsSensorBase<(MagneticField3D? MagneticField3D, Units.Temperature? Temperature)>, - ITemperatureSensor, IMagnetometer + ITemperatureSensor, IMagnetometer, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the magnetic field value changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj index 8f528ab68f..6b62c7d7e4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Sensors.Motion.Mag3110.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.Mag3110 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, motion, magnetometer + Meadow.Foundation,motion,magnetometer,MAG3110 0.1.29 true Freescale MAG3110 I2C 3 axis magnetometer diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs index e15f566204..b732b43773 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs @@ -9,8 +9,13 @@ namespace Meadow.Foundation.Sensors.Motion /// /// Represents Mma7660fc 3-axis acclerometer /// - public partial class Mma7660fc : ByteCommsSensorBase, IAccelerometer + public partial class Mma7660fc : ByteCommsSensorBase, IAccelerometer, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when new acceleration data is processed /// @@ -38,8 +43,7 @@ public partial class Mma7660fc : ByteCommsSensorBase, IAccelerom /// I2C bus public Mma7660fc(II2cBus i2cBus, Address address = Address.Default) : this(i2cBus, (byte)address) - { - } + { } /// /// Create a new instance of the Mma7660fc communicating over the I2C interface. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj index 0200ea0ebd..408b1d9ed3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Sensors.Motion.Mma7660fc.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.Mma7660fc https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Mma7660fc, Accelerometer, Motion + Meadow.Foundation,Mma7660fc,Accelerometer,Motion 0.1.7 true Mma7660fc I2C 3-axis accelerometer diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs index a155a8c946..87d8564d38 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs @@ -11,9 +11,14 @@ namespace Meadow.Foundation.Sensors.Motion /// /// Represents the Mmc5603 Three-Axis, Digital Magnetometer /// - public partial class Mmc5603 : - ByteCommsSensorBase, IMagnetometer + public partial class Mmc5603 : ByteCommsSensorBase, + IMagnetometer, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the magnetic field value changes /// @@ -128,7 +133,7 @@ protected override Task ReadSensor() } } - BusComms.ReadRegister(Registers.OUT_X_L, ReadBuffer.Span[0..9]); //9 bytes + BusComms.ReadRegister(Registers.OUT_X_L, ReadBuffer.Span[0..9]); int x = (int)((uint)(ReadBuffer.Span[0] << 12) | (uint)(ReadBuffer.Span[1] << 4) | (uint)(ReadBuffer.Span[6] >> 4)); int y = (int)((uint)(ReadBuffer.Span[2] << 12) | (uint)(ReadBuffer.Span[3] << 4) | (uint)(ReadBuffer.Span[7] >> 4)); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs index ae081de834..14ed7773e9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs @@ -8,22 +8,18 @@ namespace Meadow.Foundation.Sensors.Motion { - // Sample reading: - // Accel: [X:0.24,Y:-0.74,Z:10.49 (m/s^2)] - // Angular Velocity: [X:-0.90, Y:-1.24, Z:-0.52 (dps)] - // Temp: 33.33C - - // TODO: this sensor has software controlled sensitivity ranges. we should - // expose them. note the `AccelScaleBase` will need to change. Right now it's - // hard coded to +-2G - /// /// Represents an MPU6050 Six-Axis (Gyro + Accelerometer) MEMS MotionTracking device /// public partial class Mpu6050 : ByteCommsSensorBase<(Acceleration3D? Acceleration3D, AngularVelocity3D? AngularVelocity3D, Units.Temperature? Temperature)>, - IAccelerometer, IGyroscope, ITemperatureSensor + IAccelerometer, IGyroscope, ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the acceration value changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj index e0e2531c73..fb4171f9f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.ParallaxPir/Driver/Sensors.Motion.ParallaxPir.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Motion.ParallaxPir https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Motion, Parallax, PIR + Meadow,Meadow.Foundation,Motion,Parallax,PIR 0.8.55 true Parallax PIR analog motion sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index 8499e92d30..97282efc17 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -9,8 +9,14 @@ namespace Meadow.Foundation.Sensors.Power /// Represents a INA260 Precision Digital Current and Power Monitor /// public partial class Ina260 - : ByteCommsSensorBase<(Units.Power? Power, Voltage? Voltage, Current? Current)> + : ByteCommsSensorBase<(Units.Power? Power, Voltage? Voltage, Current? Current)>, + II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the power value changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj index cbbcdef956..63ec7817d2 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Sensors.Power.Ina260.csproj @@ -15,11 +15,8 @@ true INA260 I2C current and power monitor - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj index ede99df4da..04bc9fc1d4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Radio.Rfid.IDxxLA/Driver/Sensors.Radio.Rfid.IDxxLA.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Radio.Rfid.IDxxLA https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, RFID, ID-2LA, ID-12LA, ID-20LA + Meadow,Meadow.Foundation,RFID,ID-2LA,ID-12LA,ID-20LA 0.1.50 true IDxxLA Serial radio frequency ID readers diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj index 01d475fc6b..65775ebdcb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Sound.Ky038/Driver/Sensors.Sound.Ky038.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Sound.Ky038 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, KY-038, Sound, KY038 + Meadow.Foundation,KY-038,Sound,KY038 0.1.49 true KY-038 analog sound sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs index 7e99c2604f..c1f9ab2dc4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs @@ -8,8 +8,14 @@ namespace Meadow.Foundation.Sensors.Temperature /// /// TMP102 Temperature sensor object /// - public partial class Lm75 : ByteCommsSensorBase, ITemperatureSensor + public partial class Lm75 : ByteCommsSensorBase, + ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the value of the reading changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj index a674695205..2f7c3327d3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Sensors.Temperature.Lm75.csproj @@ -17,11 +17,8 @@ enable Meadow.Foundation.Sensors.Temperature - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs index 0ebdf89e86..2d24dac600 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs @@ -8,8 +8,15 @@ namespace Meadow.Foundation.Sensors.Temperature /// /// Represents a Mcp960x Thermocouple sensor object /// - public abstract partial class Mcp960x : ByteCommsSensorBase<(Units.Temperature? TemperatureHot, Units.Temperature? TemperatureCold)>, ITemperatureSensor + public abstract partial class Mcp960x : + ByteCommsSensorBase<(Units.Temperature? TemperatureHot, Units.Temperature? TemperatureCold)>, + ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the Hot temperature value changes /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Registers.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Registers.cs new file mode 100644 index 0000000000..0c0c92539e --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Registers.cs @@ -0,0 +1,27 @@ +namespace Meadow.Foundation.Sensors.Temperature +{ + public partial class Mcp9808 + { + internal class Registers + { + public const ushort CONFIG_SHUTDOWN = 0x0100; // shutdown config + public const ushort CONFIG_CRITLOCKED = 0x0080; // critical trip lock + public const ushort CONFIG_WINLOCKED = 0x0040; // alarm window lock + public const ushort CONFIG_INTCLR = 0x0020; // interrupt clear + public const ushort CONFIG_ALERTSTAT = 0x0010; // alert output status + public const ushort CONFIG_ALERTCTRL = 0x0008; // alert output control + public const ushort CONFIG_ALERTSEL = 0x0004; // alert output select + public const ushort CONFIG_ALERTPOL = 0x0002; // alert output polarity + public const ushort CONFIG_ALERTMODE = 0x0001; // alert output mode + + public const byte REG_CONFIG = 0x01; // config + public const byte UPPER_TEMP = 0x02; // upper alert boundary + public const byte LOWER_TEMP = 0x03; // lower alert boundery + public const byte CRIT_TEMP = 0x04; // critical temperature + public const byte AMBIENT_TEMP = 0x05; // ambient temperature + public const byte MANUFACTURER_ID = 0x06; // manufacturer ID + public const byte DEVICE_ID = 0x07; // device ID + public const byte RESOLUTION = 0x08; // resolution + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs index 2bc375325b..054e719c0d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs @@ -8,32 +8,19 @@ namespace Meadow.Foundation.Sensors.Temperature /// /// Represents a Mcp9808 temperature sensor /// - public partial class Mcp9808 : ByteCommsSensorBase, ITemperatureSensor + public partial class Mcp9808 : ByteCommsSensorBase, + ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the temeperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; - const ushort MCP_CONFIG_SHUTDOWN = 0x0100; // shutdown config - const ushort MCP_CONFIG_CRITLOCKED = 0x0080; // critical trip lock - const ushort MCP_CONFIG_WINLOCKED = 0x0040; // alarm window lock - const ushort MCP_CONFIG_INTCLR = 0x0020; // interrupt clear - const ushort MCP_CONFIG_ALERTSTAT = 0x0010; // alert output status - const ushort MCP_CONFIG_ALERTCTRL = 0x0008; // alert output control - const ushort MCP_CONFIG_ALERTSEL = 0x0004; // alert output select - const ushort MCP_CONFIG_ALERTPOL = 0x0002; // alert output polarity - const ushort MCP_CONFIG_ALERTMODE = 0x0001; // alert output mode - - const byte MCP_REG_CONFIG = 0x01; // config - const byte MCP_UPPER_TEMP = 0x02; // upper alert boundary - const byte MCP_LOWER_TEMP = 0x03; // lower alert boundery - const byte MCP_CRIT_TEMP = 0x04; // critical temperature - const byte MCP_AMBIENT_TEMP = 0x05; // ambient temperature - const byte MCP_MANUFACTURER_ID = 0x06; // manufacturer ID - const byte MCP_DEVICE_ID = 0x07; // device ID - const byte MCP_RESOLUTION = 0x08; // resolution - /// /// The temperature, in degrees celsius (°C), from the last reading. /// @@ -47,7 +34,7 @@ public partial class Mcp9808 : ByteCommsSensorBase, ITemperat public Mcp9808(II2cBus i2CBus, byte address = (byte)Address.Default) : base(i2CBus, address, readBufferSize: 8, writeBufferSize: 8) { - BusComms?.WriteRegister(MCP_REG_CONFIG, (ushort)0x0); + BusComms?.WriteRegister(Registers.REG_CONFIG, (ushort)0x0); } /// @@ -55,11 +42,11 @@ public Mcp9808(II2cBus i2CBus, byte address = (byte)Address.Default) /// public void Wake() { - ushort config = BusComms?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; + ushort config = BusComms?.ReadRegisterAsUShort(Registers.REG_CONFIG, ByteOrder.BigEndian) ?? 0; - config = (ushort)(config & (~MCP_CONFIG_SHUTDOWN)); + config = (ushort)(config & (~Registers.CONFIG_SHUTDOWN)); - BusComms?.WriteRegister(MCP_REG_CONFIG, config); + BusComms?.WriteRegister(Registers.REG_CONFIG, config); } /// @@ -67,9 +54,9 @@ public void Wake() /// public void Sleep() { - ushort config = BusComms?.ReadRegisterAsUShort(MCP_REG_CONFIG, ByteOrder.BigEndian) ?? 0; + ushort config = BusComms?.ReadRegisterAsUShort(Registers.REG_CONFIG, ByteOrder.BigEndian) ?? 0; - BusComms?.WriteRegister(MCP_REG_CONFIG, (ushort)(config | MCP_CONFIG_SHUTDOWN)); + BusComms?.WriteRegister(Registers.REG_CONFIG, (ushort)(config | Registers.CONFIG_SHUTDOWN)); } /// @@ -77,7 +64,7 @@ public void Sleep() /// public ushort GetDeviceId() { - return BusComms?.ReadRegisterAsUShort(MCP_DEVICE_ID, ByteOrder.BigEndian) ?? 0; + return BusComms?.ReadRegisterAsUShort(Registers.DEVICE_ID, ByteOrder.BigEndian) ?? 0; } /// @@ -85,7 +72,7 @@ public ushort GetDeviceId() /// public ushort GetManufactureId() { - return BusComms?.ReadRegisterAsUShort(MCP_MANUFACTURER_ID, ByteOrder.BigEndian) ?? 0; + return BusComms?.ReadRegisterAsUShort(Registers.MANUFACTURER_ID, ByteOrder.BigEndian) ?? 0; } /// @@ -93,7 +80,7 @@ public ushort GetManufactureId() /// public byte GetResolution() { - return BusComms?.ReadRegister(MCP_RESOLUTION) ?? 0; + return BusComms?.ReadRegister(Registers.RESOLUTION) ?? 0; } /// @@ -101,7 +88,7 @@ public byte GetResolution() /// public void SetResolution(byte resolution) { - BusComms?.WriteRegister(MCP_RESOLUTION, resolution); + BusComms?.WriteRegister(Registers.RESOLUTION, resolution); } /// @@ -110,7 +97,7 @@ public void SetResolution(byte resolution) /// The latest sensor reading protected override Task ReadSensor() { - ushort value = BusComms?.ReadRegisterAsUShort(MCP_AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; + ushort value = BusComms?.ReadRegisterAsUShort(Registers.AMBIENT_TEMP, ByteOrder.BigEndian) ?? 0; double temp = value & 0x0FFF; temp /= 16.0; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj index be1c3c3c23..e662310348 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Sensors.Temperature.Thermistor.csproj @@ -10,18 +10,15 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Temperature.Thermistor https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Temperature, Thermistor + Meadow.Foundation,Temperature,Thermistor 0.1.0 true - Thermistor temperature sensor + Thermistor analog temperature sensor enable Meadow.Foundation.Sensors.Temperature - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Thermistor.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Thermistor.cs index bd11eb6b93..3de0868fee 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Thermistor.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Thermistor/Driver/Thermistor.cs @@ -15,10 +15,11 @@ namespace Meadow.Foundation.Sensors.Temperature /// | /// +---[ TM ]--- < GND /// - public abstract class Thermistor : PollingSensorBase, ITemperatureSensor + public abstract class Thermistor : PollingSensorBase, + ITemperatureSensor { /// - /// The analog input eing used to determine output voltage of the voltage divider circuit + /// The analog input port used to determine output voltage of the voltage divider circuit /// protected IAnalogInputPort AnalogInput { get; } /// @@ -36,10 +37,10 @@ public abstract class Thermistor : PollingSensorBase, ITemper /// The analog input reading the thermistor voltage divider output protected Thermistor(IAnalogInputPort analogInput) { - this.AnalogInput = analogInput; - this.AnalogInput.StartUpdating(); + AnalogInput = analogInput; + AnalogInput.StartUpdating(); - base.Updated += (s, e) => TemperatureUpdated?.Invoke(this, e); + Updated += (s, e) => TemperatureUpdated?.Invoke(this, e); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj index 1f0fdb840d..8712d8c202 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Sensors.Temperature.Tmp102.csproj @@ -10,18 +10,15 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Temperature.Tmp102 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Temperature, TMP102 + Meadow.Foundation,Temperature,TMP102 0.1.53 true TMP102 I2C temperature sensor enable Meadow.Foundation.Sensors.Temperature - - 8.0 - - - 8.0 + + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs index df02f3387a..b4a7af1e39 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs @@ -1,27 +1,33 @@ -using System; -using System.Threading.Tasks; -using Meadow.Hardware; +using Meadow.Hardware; using Meadow.Peripherals.Sensors; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Temperature { /// /// TMP102 Temperature sensor object /// - public partial class Tmp102 : ByteCommsSensorBase, ITemperatureSensor + public partial class Tmp102 : ByteCommsSensorBase, + ITemperatureSensor, II2cPeripheral { + /// + /// The default I2C address for the peripheral + /// + public byte I2cDefaultAddress => (byte)Address.Default; + /// /// Raised when the temperature value changes /// public event EventHandler> TemperatureUpdated = delegate { }; /// - /// Backing variable for the SensorResolution property. + /// Backing variable for the SensorResolution property /// private Resolution _sensorResolution; /// - /// Get / set the resolution of the sensor. + /// Get / set the resolution of the sensor /// public Resolution SensorResolution { @@ -45,15 +51,15 @@ public Resolution SensorResolution } /// - /// The temperature from the last reading. + /// The temperature from the last reading /// public Units.Temperature? Temperature { get; protected set; } /// - /// Create a new TMP102 object using the default configuration for the sensor. + /// Create a new TMP102 object using the default configuration for the sensor /// /// The I2CBus - /// I2C address of the sensor. + /// I2C address of the sensor public Tmp102(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address, readBufferSize: 2, writeBufferSize: 2) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj index ac62a89d80..fcddfa92cc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/Sensors.Weather.SwitchingAnemometer.csproj @@ -8,7 +8,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Weather.SwitchingAnemometer https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Weather, Wind, Switching, Anemometer + Meadow.Foundation,Weather,Wind,Switching,Anemometer 0.1.17 true Digital Switching Anemometer wind speed sensor @@ -17,7 +17,7 @@ true icon.png - 8.0 + 10.0 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj index 33db39c2fe..9879c31c31 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingRainGauge/Driver/Sensors.Weather.SwitchingRainGauge.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Weather.SwitchingRainGauge https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Rain, RainGauge + Meadow,Meadow.Foundation,Rain,RainGauge 0.1.7 true GPIO rain gauge sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj index b2238f81da..a7e91aa793 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.WindVane/Driver/Sensors.Weather.WindVane.csproj @@ -10,7 +10,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Sensors.Weather.WindVane https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Wind, WindVane + Meadow,Meadow.Foundation,Wind,WindVane 0.1.22 true WindVane analog wind direction sensor diff --git a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj index 3b9e186bce..05d9d8c047 100644 --- a/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj +++ b/Source/Meadow.Foundation.Peripherals/Servos.ServoCore/Driver/Servos.ServoCore.csproj @@ -9,7 +9,7 @@ http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ Meadow.Foundation.Servos.ServoCore https://github.com/WildernessLabs/Meadow.Foundation - Meadow, Meadow.Foundation, Servo, Meadow.Foundation.Servo + Meadow,Meadow.Foundation,Servo,Meadow.Foundation.Servo 0.8.49 true PWM generic servo controller From 6fb671fb5575da91a30682b2ac6743b9cb88899c Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 25 Apr 2023 10:50:48 -0700 Subject: [PATCH 097/141] Rename Address enum to Addresses --- .../Driver/Tea5767.Enums.cs | 2 +- .../Audio.Radio.Tea5767/Driver/Tea5767.cs | 4 +- .../Driver/CharacterDisplay.cs | 2 +- .../Driver/GroveCharacterDisplay.cs | 6 +- .../Driver/I2cCharacterDisplay.Enums.cs | 2 +- .../Driver/I2cCharacterDisplay.cs | 4 +- .../CharacterDisplay_Sample/MeadowApp.cs | 4 +- .../Displays.Sh110x/Driver/Sh110x.Enums.cs | 2 +- .../Displays.Sh110x/Driver/Sh110x.cs | 2 +- .../Samples/Sh1107_Sample/MeadowApp.cs | 2 +- .../Driver/Drivers/Ssd1306.cs | 2 +- .../Driver/Drivers/Ssd1309.cs | 2 +- .../Driver/SSd130xBase.Enums.cs | 2 +- .../Displays.Ssd130x/Driver/Ssd130xBase.cs | 2 +- .../Driver/Ads1x15Base.Enums.cs | 2 +- .../ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs | 4 +- .../ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs | 2 +- .../ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs | 2 +- .../Samples/Ads1015_Sample/MeadowApp.cs | 2 +- .../Samples/Ads1115_Sample/MeadowApp.cs | 2 +- .../Driver/At24Cxx.Enums.cs | 2 +- .../ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs | 4 +- .../Driver/Emc2101.Enums.cs | 2 +- .../Driver/Emc2101.cs | 4 +- .../Driver/As1115.Enums.cs | 2 +- .../ICs.IOExpanders.As1115/Driver/As1115.cs | 4 +- .../Driver/Ds3502.Enums.cs | 2 +- .../ICs.IOExpanders.Ds3502/Driver/Ds3502.cs | 4 +- .../Driver/Ht16k33.Enums.cs | 2 +- .../ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs | 4 +- .../Driver/Is31fl3731.Enums.cs | 2 +- .../Driver/Is31fl3731.cs | 4 +- .../Driver/Mcp23xxx.Enums.cs | 2 +- .../Driver/Mcp23xxx.cs | 2 +- .../Mcp23x08_Input_Sample/MeadowApp.cs | 2 +- .../Mcp23x17_Input_Sample/MeadowApp.cs | 2 +- .../Driver/Pca9685.Enums.cs | 2 +- .../ICs.IOExpanders.Pca9685/Driver/Pca9685.cs | 6 +- .../Samples/Pca9685_Sample/MeadowApp.cs | 2 +- .../Driver/Drivers/Sw18AB.cs | 2 +- .../Driver/SerialWombatBase.Enums.cs | 2 +- .../Driver/SerialWombatBase.cs | 6 +- .../Driver/SparkFunQwiicLEDStick.Enums.cs | 2 +- .../Driver/SparkFunQwiicLEDStick.cs | 2 +- .../Leds.Pca9633/Driver/Pca9633.Enums.cs | 2 +- .../Leds.Pca9633/Driver/Pca9633.cs | 4 +- .../RTCs.Ds1307/Driver/Ds1307.Enums.cs | 2 +- .../RTCs.Ds1307/Driver/Ds1307.cs | 26 +++---- .../RTCs.Ds323x/Driver/Ds3231.cs | 4 +- .../RTCs.Ds323x/Driver/Ds323x.Enums.cs | 2 +- .../RTCs.Ds323x/Driver/Ds323x.cs | 2 +- .../Driver/AdafruitMPRLS.Enums.cs | 2 +- .../Driver/AdafruitMPRLS.cs | 4 +- .../Driver/Bh1900Nux.Address.cs | 2 +- .../Driver/Bh1900Nux.cs | 8 +- .../Samples/Bh1900Nux_Sample/MeadowApp.cs | 2 +- .../Driver/Bme280.Address.cs | 2 +- .../Driver/Bme280.cs | 4 +- .../Samples/Bme280_Sample/MeadowApp.cs | 2 +- .../Driver/Bme68x.Enums.cs | 2 +- .../Driver/Bme68x.cs | 4 +- .../Driver/Drivers/Bme680.cs | 2 +- .../Driver/Drivers/Bme688.cs | 2 +- .../Samples/Bme680_Sample/MeadowApp.cs | 2 +- .../Samples/Bme688_Sample/MeadowApp.cs | 2 +- .../Driver/Bmp085.Enums.cs | 2 +- .../Driver/Bmp085.cs | 4 +- .../Driver/Bmp180.Enums.cs | 74 +++++++++---------- .../Driver/Bmp180.cs | 4 +- .../Driver/Ccs811.Enums.cs | 2 +- .../Driver/Ccs811.cs | 4 +- .../Driver/DhtBase.Enums.cs | 2 +- .../Driver/DhtBase.cs | 2 +- .../Driver/Drivers/Dht10.cs | 2 +- .../Driver/Drivers/Dht12.cs | 4 +- .../Driver/Hih6130.Enums.cs | 2 +- .../Driver/Hih6130.cs | 4 +- .../Driver/Drivers/Extras/Htu31d.Enums.cs | 2 +- .../Driver/Drivers/Htu21d.cs | 2 +- .../Driver/Drivers/Htu31d.cs | 2 +- .../Driver/Htux1dBase.cs | 6 +- .../Driver/Mpl3115a2.Addresses.cs | 2 +- .../Driver/Mpl3115a2.cs | 4 +- .../Driver/Ms5611.Enums.cs | 2 +- .../Driver/Ms5611.cs | 4 +- .../Driver/Sgp40.Enums.cs | 2 +- .../Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs | 4 +- .../Driver/Sht31d.Enums.cs | 2 +- .../Driver/Sht31d.cs | 4 +- .../Driver/Sht4x.Enums.cs | 2 +- .../Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs | 4 +- .../Driver/Si70xx.Enums.cs | 2 +- .../Driver/Si70xx.cs | 4 +- .../Driver/Th02.Enums.cs | 2 +- .../Sensors.Atmospheric.Th02/Driver/Th02.cs | 4 +- .../Driver/Mlx90640.Enums.cs | 2 +- .../Driver/Mlx90640.cs | 4 +- .../Driver/MaxBotix.I2c.cs | 4 +- .../Driver/MaxBotix.enums.cs | 2 +- .../Driver/Vl53l0x.Enums.cs | 2 +- .../Driver/Vl53l0x.cs | 6 +- .../Driver/Ags01Db.Enums.cs | 2 +- .../Driver/Ags01Db.cs | 4 +- .../Driver/Ens160.Enums.cs | 2 +- .../Driver/Ens160.cs | 4 +- .../Samples/Ens160_Sample/MeadowApp.cs | 2 +- .../Driver/Pmsa003i.Enums.cs | 2 +- .../Driver/Pmsa003i.cs | 4 +- .../Driver/Scd4xBase.Enums.cs | 2 +- .../Driver/Scd4xBase.cs | 4 +- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs | 2 +- .../Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs | 6 +- .../Sensors.Hid.As5013/Driver/As5013.Enums.cs | 2 +- .../Sensors.Hid.As5013/Driver/As5013.cs | 4 +- .../Driver/BBQ10Keyboard.Enums.cs | 2 +- .../Driver/BBQ10Keyboard.cs | 4 +- .../Sensors.Hid.Mpr121/Driver/Mpr121.cs | 4 +- .../Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs | 2 +- .../Driver/Tsc2004.Enums.cs | 2 +- .../Sensors.Hid.Tsc2004/Driver/Tsc2004.cs | 4 +- .../Driver/Drivers/NesClassicController.cs | 2 +- .../Driver/Drivers/SnesClassicController.cs | 2 +- .../Driver/Drivers/WiiClassicController.cs | 2 +- .../Driver/Drivers/WiiClassicControllerPro.cs | 2 +- .../Driver/Drivers/WiiNunchuck.cs | 2 +- .../WiiExtensionControllerBase.Enums.cs | 2 +- .../Driver/WiiExtensionControllerBase.cs | 2 +- .../Driver/Bh1745.Addresses.cs | 2 +- .../Sensors.Light.Bh1745/Driver/Bh1745.cs | 4 +- .../Driver/Bh1750.Addresses.cs | 2 +- .../Sensors.Light.Bh1750/Driver/Bh1750.cs | 4 +- .../Driver/Max44009.Enums.cs | 2 +- .../Sensors.Light.Max44009/Driver/Max44009.cs | 4 +- .../Driver/Si1145.Addresses.cs | 2 +- .../Sensors.Light.Si1145/Driver/Si1145.cs | 4 +- .../Driver/Tsl2591.Enums.cs | 2 +- .../Sensors.Light.Tsl2591/Driver/Tsl2591.cs | 2 +- .../Driver/Veml7700.Addresses.cs | 2 +- .../Sensors.Light.Veml7700/Driver/Veml7700.cs | 4 +- .../Driver/Nau7802.Enums.cs | 2 +- .../Driver/Nau7802.cs | 10 +-- .../Driver/Drivers/Adxl345.cs | 4 +- .../Adxl345_Extras/Adxl345.Addresses.cs | 2 +- .../Driver/Apds9960.Addresses.cs | 2 +- .../Driver/Apds9960.cs | 4 +- .../Driver/Bmi270.Enums.cs | 2 +- .../Sensors.Motion.Bmi270/Driver/Bmi270.cs | 4 +- .../Driver/Bno055.Enums.cs | 2 +- .../Sensors.Motion.Bno055/Driver/Bno055.cs | 4 +- .../Driver/Hmc5883.Addresses.cs | 2 +- .../Sensors.Motion.Hmc5883/Driver/Hmc5883.cs | 4 +- .../Sensors.Motion.Hmc5883/Driver/Qmc5883.cs | 2 +- .../Driver/Lis2Mdl.Enums.cs | 2 +- .../Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs | 4 +- .../Driver/Lsm303agr.Enums.cs | 2 +- .../Driver/Lsm303agr.cs | 6 +- .../Driver/Mag3110.Addresses.cs | 2 +- .../Sensors.Motion.Mag3110/Driver/Mag3110.cs | 4 +- .../Driver/Mma7660fc.Addresses.cs | 2 +- .../Driver/Mma7660fc.cs | 4 +- .../Driver/Mmc5603.Addresses.cs | 2 +- .../Sensors.Motion.Mmc5603/Driver/Mmc5603.cs | 4 +- .../Driver/Mpu6050.Addresses.cs | 2 +- .../Sensors.Motion.Mpu6050/Driver/Mpu6050.cs | 4 +- .../Driver/Ina260.Enums.cs | 2 +- .../Sensors.Power.Ina260/Driver/Ina260.cs | 8 +- .../Driver/Lm75.Addresses.cs | 2 +- .../Sensors.Temperature.Lm75/Driver/Lm75.cs | 4 +- .../Driver/Drivers/Mcp9600.cs | 2 +- .../Driver/Drivers/Mcp9601.cs | 2 +- .../Driver/Mcp960x.Enums.cs | 2 +- .../Driver/Mcp960x.cs | 2 +- .../Driver/Mcp9808.Enums.cs | 2 +- .../Driver/Mcp9808.cs | 4 +- .../Driver/Tmp102.Addresses.cs | 2 +- .../Driver/Tmp102.cs | 4 +- 176 files changed, 303 insertions(+), 303 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs index b9f3022b6c..6367d6f020 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.Enums.cs @@ -5,7 +5,7 @@ public partial class Tea5767 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// I2C address 0 diff --git a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs index 25a0f3b42e..066da694e5 100644 --- a/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs +++ b/Source/Meadow.Foundation.Peripherals/Audio.Radio.Tea5767/Driver/Tea5767.cs @@ -28,14 +28,14 @@ public partial class Tea5767 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new TEA5767 object using the default parameters /// /// I2Cbus connected to the radio /// Address of the bus on the I2C display. - public Tea5767(II2cBus i2cBus, byte address = (byte)Address.Default) + public Tea5767(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs index 7b0d0ea84f..22516d5426 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/CharacterDisplay.cs @@ -120,7 +120,7 @@ public CharacterDisplay( /// The number of character columns /// True if this is a Seeed Studio Grove display (default is false) public CharacterDisplay(II2cBus i2cBus, - byte address = (byte)I2cCharacterDisplay.Address.Default, + byte address = (byte)I2cCharacterDisplay.Addresses.Default, byte rows = 4, byte columns = 20, bool isGroveDisplay = false) { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs index 4e866e909a..bcccf0c94b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/GroveCharacterDisplay.cs @@ -1,5 +1,5 @@ -using System.Threading; -using Meadow.Hardware; +using Meadow.Hardware; +using System.Threading; namespace Meadow.Foundation.Displays.Lcd { @@ -16,7 +16,7 @@ public class GroveCharacterDisplay : I2cCharacterDisplay /// The number of character rows /// The number of character columns public GroveCharacterDisplay(II2cBus i2cBus, - byte address = (byte)Address.Address_0x3E, + byte address = (byte)Addresses.Address_0x3E, byte rows = 2, byte columns = 16) : base(i2cBus, address, rows, columns) { diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs index cef498f95a..6b44b83894 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.Enums.cs @@ -5,7 +5,7 @@ public partial class I2cCharacterDisplay /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x27 diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs index 7bfd85b652..54f5b3cae9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Driver/I2cCharacterDisplay.cs @@ -12,7 +12,7 @@ public partial class I2cCharacterDisplay : ICharacterDisplay, II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -126,7 +126,7 @@ protected enum I2CCommands /// I2C address /// Number of character rows /// Number of character columns - public I2cCharacterDisplay(II2cBus i2cBus, byte address = (byte)Address.Default, byte rows = 4, byte columns = 20) + public I2cCharacterDisplay(II2cBus i2cBus, byte address = (byte)Addresses.Default, byte rows = 4, byte columns = 20) { i2cComms = new I2cCommunications(i2cBus, address); DisplayConfig = new TextDisplayConfig() { Width = columns, Height = rows }; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs index c21c1dd024..5f1df27532 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Lcd.CharacterDisplay/Samples/CharacterDisplay_Sample/MeadowApp.cs @@ -63,7 +63,7 @@ void InitI2c() display = new CharacterDisplay ( i2cBus: Device.CreateI2cBus(I2cBusSpeed.Standard), - address: (byte)I2cCharacterDisplay.Address.Default, + address: (byte)I2cCharacterDisplay.Addresses.Default, rows: 4, columns: 20 ); } @@ -75,7 +75,7 @@ void InitGrove() display = new CharacterDisplay ( i2cBus: Device.CreateI2cBus(I2cBusSpeed.Standard), - address: (byte)I2cCharacterDisplay.Address.Grove, + address: (byte)I2cCharacterDisplay.Addresses.Grove, rows: 2, columns: 16, isGroveDisplay: true ); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs index d7b51feabe..343c145196 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.Enums.cs @@ -66,7 +66,7 @@ internal enum DisplayCommand : byte /// /// Valid I2C addresses for the display /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x3C diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs index 37df60e8f8..71269a3b40 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Driver/Sh110x.cs @@ -63,7 +63,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// The connection type (I2C or SPI) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs index 886038ec61..ae107cdbc0 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Sh110x/Samples/Sh1107_Sample/MeadowApp.cs @@ -20,7 +20,7 @@ public override Task Initialize() var sh1107 = new Sh1107 ( i2cBus: Device.CreateI2cBus(), - address: (byte)Address.Address_0x3C, + address: (byte)Addresses.Address_0x3C, width: 128, height: 128 ); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs index 1452b0081f..7e2646d664 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1306.cs @@ -54,7 +54,7 @@ public Ssd1306(ISpiBus spiBus, /// Address of the bus on the I2C display. /// Type of SSD1306 display (default = 128x64 pixel display). public Ssd1306(II2cBus i2cBus, - byte address = (byte)Address.Default, + byte address = (byte)Addresses.Default, DisplayType displayType = DisplayType.OLED128x64) { this.displayType = displayType; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs index bc2b3c1675..05e69772c8 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Drivers/Ssd1309.cs @@ -36,7 +36,7 @@ public Ssd1309(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalOutput /// /// I2cBus connected to display /// Address of the bus on the I2C display. - public Ssd1309(II2cBus i2cBus, byte address = (byte)Address.Default) : + public Ssd1309(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, DisplayType.OLED128x64) { } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs index df6e4ccfc2..61e5002b9b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/SSd130xBase.Enums.cs @@ -5,7 +5,7 @@ public abstract partial class Ssd130xBase /// /// Valid I2C addresses for the display /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x3C diff --git a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs index 87f92d6c5f..9e5fa6078d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.Ssd130x/Driver/Ssd130xBase.cs @@ -53,7 +53,7 @@ public Frequency SpiBusSpeed /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// The default SPI bus mode for the device diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs index 9582fa3e17..021f84d016 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.Enums.cs @@ -5,7 +5,7 @@ public abstract partial class Ads1x15Base /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs index 29220bf38b..dc420e47b3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Ads1x15Base.cs @@ -12,7 +12,7 @@ public abstract partial class Ads1x15Base : PollingSensorBase, II2cPeri /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -44,7 +44,7 @@ public abstract partial class Ads1x15Base : PollingSensorBase, II2cPeri /// /// protected Ads1x15Base(II2cBus i2cBus, - Address address, + Addresses address, MeasureMode mode, ChannelSetting channel) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs index 741c0adff1..d3849baddc 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1015.cs @@ -65,7 +65,7 @@ public SampleRateSetting SampleRate /// Create a new ADS1015 object /// public Ads1015(II2cBus i2cBus, - Address address = Address.Default, + Addresses address = Addresses.Default, MeasureMode mode = MeasureMode.OneShot, ChannelSetting channel = ChannelSetting.A0A1Differential, SampleRateSetting sampleRate = SampleRateSetting.Sps1600) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs index 309bb5c367..de7efba83d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Driver/Drivers/Ads1115.cs @@ -64,7 +64,7 @@ public SampleRateSetting SampleRate /// Create a new ADS1115 object /// public Ads1115(II2cBus i2cBus, - Address address = Address.Default, + Addresses address = Addresses.Default, MeasureMode mode = MeasureMode.OneShot, ChannelSetting channel = ChannelSetting.A0A1Differential, SampleRateSetting sampleRate = SampleRateSetting.Sps128) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs index 5d8d9987cd..9f3bd1e77a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1015_Sample/MeadowApp.cs @@ -18,7 +18,7 @@ public override async Task Initialize() adc = new Ads1015( Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.FastPlus), - Ads1x15Base.Address.Default, + Ads1x15Base.Addresses.Default, Ads1x15Base.MeasureMode.Continuous, Ads1x15Base.ChannelSetting.A0SingleEnded, Ads1015.SampleRateSetting.Sps3300); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs index 1d64320625..f85f76cec8 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.ADC.Ads1x15/Samples/Ads1115_Sample/MeadowApp.cs @@ -18,7 +18,7 @@ public override async Task Initialize() adc = new Ads1115( Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.FastPlus), - Ads1x15Base.Address.Default, + Ads1x15Base.Addresses.Default, Ads1x15Base.MeasureMode.Continuous, Ads1x15Base.ChannelSetting.A0SingleEnded, Ads1115.SampleRateSetting.Sps128); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs index af7249c858..25dd0945d6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.Enums.cs @@ -5,7 +5,7 @@ public partial class At24Cxx /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x50 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs index ad7dde192a..75cd6881bb 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.EEPROM.At24Cxx/Driver/At24Cxx.cs @@ -12,7 +12,7 @@ public partial class At24Cxx : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -40,7 +40,7 @@ public partial class At24Cxx : II2cPeripheral /// Number of bytes in a page (default = 32 - AT24C32). /// Total number of bytes in the EEPROM (default = 8192 - AT24C32). public At24Cxx(II2cBus i2cBus, - byte address = (byte)Address.Default, + byte address = (byte)Addresses.Default, ushort pageSize = 32, ushort memorySize = 8192) { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs index d5255c21f1..cd4a0c7131 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.Enums.cs @@ -137,7 +137,7 @@ public enum DataRate : byte /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x4C diff --git a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs index aec5e2af8f..80d2837a81 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.FanControllers.Emc2101/Driver/Emc2101.cs @@ -46,7 +46,7 @@ public partial class Emc2101 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Get/Set the minimum fan speed for the currently connected fan @@ -156,7 +156,7 @@ public bool DACOutputEnabled /// /// I2CBus connected to display /// Address of the EMC2101 (default = 0x4C) - public Emc2101(II2cBus i2cBus, byte address = (byte)Address.Default) + public Emc2101(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs index 6b1ed4301b..b42572fdb6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.Enums.cs @@ -5,7 +5,7 @@ public partial class As1115 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x00 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs index be521facc8..c6f1687e7a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.As1115/Driver/As1115.cs @@ -48,7 +48,7 @@ public partial class As1115 : IGraphicsDisplay, II2cPeripheral, IDisposable /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// The display color mode (1 bit per pixel) @@ -100,7 +100,7 @@ public partial class As1115 : IGraphicsDisplay, II2cPeripheral, IDisposable /// Interrupt pin /// Address of the bus on the I2C display. public As1115(II2cBus i2cBus, IPin buttonInterruptPin, - byte address = (byte)Address.Default) + byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs index 63ac3ffe32..0e792d0c31 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs @@ -6,7 +6,7 @@ public partial class Ds3502 /// Valid I2C addresses for the sensor /// Controlled by pulling A0 and A1 high or low /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x28 (A0 low, A1 low) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs index 2d2d997da1..5e7f635095 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs @@ -12,7 +12,7 @@ public partial class Ds3502 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Default I2C bus speed @@ -29,7 +29,7 @@ public partial class Ds3502 : II2cPeripheral /// /// Address of the bus on the I2C display /// I2C bus instance - public Ds3502(II2cBus i2cBus, byte address = (byte)Address.Default) + public Ds3502(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs index 8b644dad3e..e97b83d3b6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.Enums.cs @@ -7,7 +7,7 @@ public partial class Ht16k33 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x70 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs index e574db66de..4527c4c926 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ht16k33/Driver/Ht16k33.cs @@ -11,7 +11,7 @@ public partial class Ht16k33 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -33,7 +33,7 @@ public partial class Ht16k33 : II2cPeripheral /// /// Address of the bus on the I2C display /// I2C bus instance - public Ht16k33(II2cBus i2cBus, byte address = (byte)Address.Default) + public Ht16k33(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address, 8, 17); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs index ca73c3baad..fb7d64b86d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.Enums.cs @@ -5,7 +5,7 @@ public partial class Is31fl3731 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x74 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs index 0e59c5f8e3..4414a9f443 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Is31fl3731/Driver/Is31fl3731.cs @@ -25,7 +25,7 @@ public partial class Is31fl3731 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -42,7 +42,7 @@ public partial class Is31fl3731 : II2cPeripheral /// /// The I2C bus /// The I2C address - public Is31fl3731(II2cBus i2cBus, byte address = (byte)Address.Default) + public Is31fl3731(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); Frame = 0; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs index 7ae7a2e874..972ef67f6a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs @@ -5,7 +5,7 @@ public partial class Mcp23xxx /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x20 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index 906c2830d8..5b44a9b0d6 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -55,7 +55,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; private readonly IByteCommunications mcpDevice; private IDigitalOutputPort resetPort; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs index 922c56bbc4..db00ba212b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x08_Input_Sample/MeadowApp.cs @@ -24,7 +24,7 @@ public override Task Initialize() IDigitalInputPort interruptPort = Device.CreateDigitalInputPort(Device.Pins.D00, InterruptMode.EdgeBoth, ResistorMode.InternalPullDown); IDigitalOutputPort resetPort = Device.CreateDigitalOutputPort(Device.Pins.D01); - mcp = new Mcp23008(Device.CreateI2cBus(), (byte)Address.Address_0x20, interruptPort, resetPort); + mcp = new Mcp23008(Device.CreateI2cBus(), (byte)Addresses.Address_0x20, interruptPort, resetPort); return base.Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs index 5c534cde33..4ee0acb267 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Samples/Mcp23x17_Input_Sample/MeadowApp.cs @@ -23,7 +23,7 @@ public override Task Initialize() IDigitalInputPort interruptPort = Device.CreateDigitalInputPort(Device.Pins.D00, InterruptMode.EdgeBoth, ResistorMode.InternalPullDown); IDigitalOutputPort resetPort = Device.CreateDigitalOutputPort(Device.Pins.D01); - mcp = new Mcp23017(Device.CreateI2cBus(), (byte)Address.Address_0x20, interruptPort, resetPort); + mcp = new Mcp23017(Device.CreateI2cBus(), (byte)Addresses.Address_0x20, interruptPort, resetPort); mcp.InputChanged += Mcp_InputChanged; diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs index 7565486850..4d14780ab3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.Enums.cs @@ -5,7 +5,7 @@ public partial class Pca9685 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs index 58389192cc..ec4e9c4148 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs @@ -14,7 +14,7 @@ public partial class Pca9685 /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte I2cDefaultAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -59,7 +59,7 @@ public partial class Pca9685 /// The I2C bus connected to the peripheral /// The frequency /// The I2C address - public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Address.Default) + public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Addresses.Default) { i2CBus = i2cBus; this.address = address; @@ -72,7 +72,7 @@ public Pca9685(II2cBus i2cBus, Frequency frequency, byte address = (byte)Address /// /// The I2C bus connected to the peripheral /// The I2C address - public Pca9685(II2cBus i2cBus, byte address = (byte)Address.Default) + public Pca9685(II2cBus i2cBus, byte address = (byte)Addresses.Default) : this(i2cBus, new Frequency(IPwmOutputController.DefaultPwmFrequency, Frequency.UnitType.Hertz), address) { } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs index 4949a83f2f..99d4de22d0 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Samples/Pca9685_Sample/MeadowApp.cs @@ -17,7 +17,7 @@ public override Task Initialize() Resolver.Log.Info("Initialize..."); var i2CBus = Device.CreateI2cBus(I2cBusSpeed.FastPlus); - pca9685 = new Pca9685(i2CBus, new Meadow.Units.Frequency(50, Meadow.Units.Frequency.UnitType.Hertz), (byte)Pca9685.Address.Default); + pca9685 = new Pca9685(i2CBus, new Meadow.Units.Frequency(50, Meadow.Units.Frequency.UnitType.Hertz), (byte)Pca9685.Addresses.Default); pca9685.Initialize(); return base.Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/Drivers/Sw18AB.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/Drivers/Sw18AB.cs index a25be8f709..fe49cf9453 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/Drivers/Sw18AB.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/Drivers/Sw18AB.cs @@ -14,7 +14,7 @@ public class Sw18AB : SerialWombatBase /// The I2C bus connected to the wombat /// The I2C address /// Meadow logger (optional) - public Sw18AB(II2cBus i2cBus, Address address = SerialWombatBase.Address.Default, Logger? logger = null) + public Sw18AB(II2cBus i2cBus, Addresses address = SerialWombatBase.Addresses.Default, Logger? logger = null) : base(i2cBus, address, logger) { } } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs index 3099d7df41..451357bbed 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.Enums.cs @@ -8,7 +8,7 @@ public partial class SerialWombatBase /// /// Valid I2C addresses for the device /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x6a diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs index e24ed96e8c..30e3269545 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.SerialWombat/Driver/SerialWombatBase.cs @@ -20,12 +20,12 @@ public abstract partial class SerialWombatBase : IDigitalInputOutputController, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// The current I2C address for the peripheral /// - public Address I2cAddress { get; } + public Addresses I2cAddress { get; } /// /// The sync root object @@ -40,7 +40,7 @@ public abstract partial class SerialWombatBase : IDigitalInputOutputController, /// /// Create SerialWombatBase object /// - protected SerialWombatBase(II2cBus bus, Address address = Address.Default, Logger? logger = null) + protected SerialWombatBase(II2cBus bus, Addresses address = Addresses.Default, Logger? logger = null) { Pins = new PinDefinitions(this); i2cBus = bus; diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs index fb96c2533c..d64f842745 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.Enums.cs @@ -5,7 +5,7 @@ public partial class SparkFunQwiicLEDStick /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x22 diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs index db08a83977..a805fe621b 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Apa102/Driver/SparkFunQwiicLEDStick.cs @@ -24,7 +24,7 @@ public partial class SparkFunQwiicLEDStick : I2cCommunications, IApa102 /// The I2C bus /// The I2C address public SparkFunQwiicLEDStick(II2cBus i2cbus, - byte address = (byte)Address.Default) + byte address = (byte)Addresses.Default) : base(i2cbus, address, 1, 16) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs index d6b342173b..2a0fb8a64a 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.Enums.cs @@ -5,7 +5,7 @@ public partial class Pca9633 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x62 diff --git a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs index 13960c8018..e421033edc 100644 --- a/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs +++ b/Source/Meadow.Foundation.Peripherals/Leds.Pca9633/Driver/Pca9633.cs @@ -10,7 +10,7 @@ public partial class Pca9633 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -45,7 +45,7 @@ public bool IsOn /// /// i2c bus /// i2c address - public Pca9633(II2cBus i2cBus, Address address = Address.Default) + public Pca9633(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs index 860efd6aaf..2a5c0a459c 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.Enums.cs @@ -5,7 +5,7 @@ public partial class Ds1307 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs index acbbc09c19..82f2fdbec8 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds1307/Driver/Ds1307.cs @@ -12,7 +12,7 @@ public partial class Ds1307 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; const int OriginYear = 1980; @@ -36,15 +36,15 @@ public bool IsRunning get { // read 1 byte starting from 0x00 var reg = new byte[1]; - i2cBus.Write((byte)Address.Default, new byte[] { 0 }); - i2cBus.Read((byte)Address.Default, reg); + i2cBus.Write((byte)Addresses.Default, new byte[] { 0 }); + i2cBus.Read((byte)Addresses.Default, reg); return (reg[0] & (1 << 7)) != 0; } set { // read the seconds register var reg = new byte[1]; - i2cBus.Write((byte)Address.Default, new byte[] { 0 }); - i2cBus.Read((byte)Address.Default, reg); + i2cBus.Write((byte)Addresses.Default, new byte[] { 0 }); + i2cBus.Read((byte)Addresses.Default, reg); var current = (reg[0] & (1 << 7)) != 0; if ((value && current) || (!value && !current)) return; @@ -59,7 +59,7 @@ public bool IsRunning } // and write it back to register 0x00 - i2cBus.Write((byte)Address.Default, reg); + i2cBus.Write((byte)Addresses.Default, reg); } } @@ -70,8 +70,8 @@ public bool IsRunning public DateTime GetTime() { var data = new byte[7]; - i2cBus.Write((byte)Address.Default, new byte[] { 0 }); - i2cBus.Read((byte)Address.Default, data); + i2cBus.Write((byte)Addresses.Default, new byte[] { 0 }); + i2cBus.Read((byte)Addresses.Default, data); return FromRTCTime(data); } @@ -84,7 +84,7 @@ public void SetTime(DateTime time) var data = new List { 0 }; data.AddRange(ToRTCTime(time)); - i2cBus.Write((byte)Address.Default, data.ToArray()); + i2cBus.Write((byte)Addresses.Default, data.ToArray()); } /// @@ -95,8 +95,8 @@ public void SetTime(DateTime time) public byte[] ReadRAM(int offset, int count) { var data = new byte[count]; - i2cBus.Write((byte)Address.Default, new byte[] { (byte)(0x08 + offset) }); - i2cBus.Read((byte)Address.Default, data); + i2cBus.Write((byte)Addresses.Default, new byte[] { (byte)(0x08 + offset) }); + i2cBus.Read((byte)Addresses.Default, data); return data; } @@ -114,7 +114,7 @@ public void WriteRAM(int offset, params byte[] data) }; d.AddRange(data); - i2cBus.Write((byte)Address.Default, d.ToArray()); + i2cBus.Write((byte)Addresses.Default, d.ToArray()); } /// @@ -136,7 +136,7 @@ public void SquareWaveOutput(SquareWaveFrequency freq) }; // control register is at 0x07 - i2cBus.Write((byte)Address.Default, new byte[] { 0x07, registerData }); //register and value + i2cBus.Write((byte)Addresses.Default, new byte[] { 0x07, registerData }); //register and value } static byte ToBCD(ushort i) diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs index 0f04cc3894..c4dc836559 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds3231.cs @@ -13,7 +13,7 @@ public partial class Ds3231 : Ds323x /// Digital pin connected to the alarm interrupt pin on the RTC. /// The I2C Bus the peripheral is connected to /// I2C Bus address of the peripheral - public Ds3231(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Address.Default) + public Ds3231(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Addresses.Default) : base(new I2cCommunications(i2cBus, address), interruptPin) { } @@ -26,7 +26,7 @@ public Ds3231(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Add public Ds3231( II2cBus i2cBus, IDigitalInputPort interruptPort = null, - byte address = (byte)Address.Default) + byte address = (byte)Addresses.Default) : base(new I2cCommunications(i2cBus, address), interruptPort) { } diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs index c71faca891..ff5a192471 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.Enums.cs @@ -5,7 +5,7 @@ public partial class Ds323x /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs index 125762c13e..1a7e8ab4b8 100644 --- a/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs +++ b/Source/Meadow.Foundation.Peripherals/RTCs.Ds323x/Driver/Ds323x.cs @@ -12,7 +12,7 @@ public partial class Ds323x : II2cPeripheral, IDisposable /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Number of registers that hold the date and time information. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs index 938279f327..f0cf2c078f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.Enums.cs @@ -5,7 +5,7 @@ public partial class AdafruitMPRLS /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x18 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs index ee53e52cbe..af9fa08623 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.AdafruitMPRLS/Driver/AdafruitMPRLS.cs @@ -18,7 +18,7 @@ public partial class AdafruitMPRLS : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when a new reading has been made. Events will only be raised @@ -67,7 +67,7 @@ public partial class AdafruitMPRLS : /// /// I2Cbus connected to the sensor public AdafruitMPRLS(II2cBus i2cbus) - : base(i2cbus, (byte)Address.Default) + : base(i2cbus, (byte)Addresses.Default) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs index 39c753e429..7ab8d4ff68 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.Address.cs @@ -58,7 +58,7 @@ public enum MeasurementModes /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs index f94f5f200c..1026a6e232 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Driver/Bh1900Nux.cs @@ -23,17 +23,17 @@ public partial class Bh1900Nux : ByteCommsSensorBase, ITemper /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Bh1900Nux object /// /// The I2C bus /// The I2C address - public Bh1900Nux(II2cBus i2cBus, Address address) + public Bh1900Nux(II2cBus i2cBus, Addresses address) : base(i2cBus, (byte)address, 2, 2) { - if (address < Address.Address_0x48 || address > Address.Address_0x4f) + if (address < Addresses.Address_0x48 || address > Addresses.Address_0x4f) { throw new ArgumentOutOfRangeException("Bh1900Nux address must be in the range of 0x48-0x4f"); } @@ -47,7 +47,7 @@ public Bh1900Nux(II2cBus i2cBus, Address address) /// The I2C bus /// The I2C address public Bh1900Nux(II2cBus i2cBus, byte address) - : this(i2cBus, (Address)address) + : this(i2cBus, (Addresses)address) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/MeadowApp.cs index d3c1476524..e3b76d4bab 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bh1900Nux/Samples/Bh1900Nux_Sample/MeadowApp.cs @@ -17,7 +17,7 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - _sensor = new Bh1900Nux(Device.CreateI2cBus(), Bh1900Nux.Address.Default); + _sensor = new Bh1900Nux(Device.CreateI2cBus(), Bh1900Nux.Addresses.Default); var consumer = Bh1900Nux.CreateObserver( handler: result => diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs index 697ca6d99b..d252eafac3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.Address.cs @@ -5,7 +5,7 @@ public partial class Bme280 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x76 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs index 227a1e3e9e..0b841337f8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Driver/Bme280.cs @@ -122,14 +122,14 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Initializes a new instance of the BME280 class /// /// I2C Bus to use for communicating with the sensor /// I2C address of the sensor (default = 0x77) - public Bme280(II2cBus i2cBus, byte address = (byte)Address.Default) + public Bme280(II2cBus i2cBus, byte address = (byte)Addresses.Default) { bme280Comms = new I2cCommunications(i2cBus, address); configuration = new Configuration(); // here to avoid the warning diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs index 1d769b5619..5aea2e58a6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme280/Samples/Bme280_Sample/MeadowApp.cs @@ -75,7 +75,7 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME280 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme280(i2c, (byte)Bme280.Address.Default); // SDA pulled up + sensor = new Bme280(i2c, (byte)Bme280.Addresses.Default); // SDA pulled up } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs index 6d52a1dfc9..cd479c7b00 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.Enums.cs @@ -5,7 +5,7 @@ partial class Bme68x /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x77 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs index 7310c72984..6a7f3c4f0c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Bme68x.cs @@ -186,7 +186,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Communication bus used to read and write to the BME68x sensor @@ -234,7 +234,7 @@ public SpiClockConfiguration.Mode SpiBusMode /// /// I2C Bus to use for communicating with the sensor /// I2C address - protected Bme68x(II2cBus i2cBus, byte address = (byte)Address.Default) + protected Bme68x(II2cBus i2cBus, byte address = (byte)Addresses.Default) { configuration = new Configuration(); busComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs index 8b353ab26b..5024dc58e4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme680.cs @@ -15,7 +15,7 @@ public partial class Bme680 : Bme68x /// /// I2C Bus to use for communicating with the busComms /// I2C address of the busComms - public Bme680(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) + public Bme680(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs index 7c951f29c2..388dc6e385 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Driver/Drivers/Bme688.cs @@ -15,7 +15,7 @@ public partial class Bme688 : Bme68x /// /// I2C Bus to use for communicating with the busComms /// I2C address of the busComms - public Bme688(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) + public Bme688(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs index 56c21b7bdb..a8cdef775a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme680_Sample/MeadowApp.cs @@ -89,7 +89,7 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME680 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme680(i2c, (byte)Bme688.Address.Address_0x76); + sensor = new Bme680(i2c, (byte)Bme688.Addresses.Address_0x76); } async Task ReadConditions() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs index 7981d2de9b..176ee63502 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bme68x/Samples/Bme688_Sample/MeadowApp.cs @@ -90,7 +90,7 @@ void CreateI2CSensor() Resolver.Log.Info("Create BME688 sensor with I2C..."); var i2c = Device.CreateI2cBus(); - sensor = new Bme688(i2c, (byte)Bme688.Address.Address_0x76); + sensor = new Bme688(i2c, (byte)Bme688.Addresses.Address_0x76); } async Task ReadConditions() diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs index 0c65e8b5e1..d7c56df4b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.Enums.cs @@ -5,7 +5,7 @@ public partial class Bmp085 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x77 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs index 493cb678a3..c1dc593e84 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp085/Driver/Bmp085.cs @@ -27,7 +27,7 @@ public partial class Bmp085 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; readonly byte oversamplingSetting; @@ -65,7 +65,7 @@ public partial class Bmp085 : /// The I2C bus /// The I2C address /// The device mode - public Bmp085(II2cBus i2cBus, byte address = (byte)Address.Default, + public Bmp085(II2cBus i2cBus, byte address = (byte)Addresses.Default, DeviceMode deviceMode = DeviceMode.Standard) : base(i2cBus, address) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs index f082b80018..8dd4755e8a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.Enums.cs @@ -2,42 +2,42 @@ { public partial class Bmp180 { - /// - /// Valid I2C addresses for the sensor - /// - public enum Address : byte - { - /// - /// Bus address 0x77 - /// - Address_0x77 = 0x77, - /// - /// Default bus address - /// - Default = Address_0x77 - } + /// + /// Valid I2C addresses for the sensor + /// + public enum Addresses : byte + { + /// + /// Bus address 0x77 + /// + Address_0x77 = 0x77, + /// + /// Default bus address + /// + Default = Address_0x77 + } - /// - /// BMP180 device mode - /// - public enum DeviceMode - { - /// - /// Ultra low power mode - /// - UltraLowPower = 0, - /// - /// Standard / normal mode - /// - Standard = 1, - /// - /// High resolution mode - /// - HighResolution = 2, - /// - /// Ultra high resolution mode - /// - UltraHighResolution = 3 - } - } + /// + /// BMP180 device mode + /// + public enum DeviceMode + { + /// + /// Ultra low power mode + /// + UltraLowPower = 0, + /// + /// Standard / normal mode + /// + Standard = 1, + /// + /// High resolution mode + /// + HighResolution = 2, + /// + /// Ultra high resolution mode + /// + UltraHighResolution = 3 + } + } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs index b8709a5a66..45b4b686fa 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Bmp180/Driver/Bmp180.cs @@ -60,7 +60,7 @@ public partial class Bmp180 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new BMP180 object @@ -68,7 +68,7 @@ public partial class Bmp180 : /// The I2C bus /// The I2C address /// The device mode - public Bmp180(II2cBus i2cBus, byte address = (byte)Address.Default, + public Bmp180(II2cBus i2cBus, byte address = (byte)Addresses.Default, DeviceMode deviceMode = DeviceMode.Standard) : base(i2cBus, address) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs index d8949873a0..fe5fe1dffd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.Enums.cs @@ -5,7 +5,7 @@ public partial class Ccs811 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x5A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs index 2d6dacef27..93cbc51566 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ccs811/Driver/Ccs811.cs @@ -42,14 +42,14 @@ public partial class Ccs811 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Ccs811 object /// /// The I2C bus /// The I2C address - public Ccs811(II2cBus i2cBus, Address address = Address.Default) + public Ccs811(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs index a146b53e5a..75422d5c88 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.Enums.cs @@ -10,7 +10,7 @@ public abstract partial class DhtBase /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x5C diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs index e8fd10969b..f1c2f21b64 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/DhtBase.cs @@ -46,7 +46,7 @@ public abstract partial class DhtBase : /// /// The I2C bus connected to the sensor /// The I2C address - public DhtBase(II2cBus i2cBus, byte address = (byte)Address.Default) + public DhtBase(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, writeBufferSize: 8, readBufferSize: 6) { protocol = BusType.I2C; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs index d6547beec9..f10e36019f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht10.cs @@ -20,7 +20,7 @@ public class Dht10 : DhtBase /// /// Address of the Dht12 (default = 0x27). /// I2C bus (default = 100 KHz). - public Dht10(II2cBus i2cBus, byte address = (byte)Address.Default) + public Dht10(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { BusComms?.Write(CMD_SOFTRESET); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs index 2ac93361b9..36818a7258 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Dhtxx/Driver/Drivers/Dht12.cs @@ -13,14 +13,14 @@ public class Dht12 : DhtBase, II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Dht12 object /// /// Address of the Dht12 (default = 0x27) /// I2C bus (default = 100 KHz) - public Dht12(II2cBus i2cBus, byte address = (byte)Address.Default) + public Dht12(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs index 67d4e73c41..c087fed902 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.Enums.cs @@ -5,7 +5,7 @@ public partial class Hih6130 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x27 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs index 6264a7ed4b..3a4510fb9d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Hih6130/Driver/Hih6130.cs @@ -36,14 +36,14 @@ public partial class Hih6130 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new HIH6130 object using the default parameters for the component. /// /// Address of the HIH6130 (default = 0x27). /// I2C bus (default = 100 KHz). - public Hih6130(II2cBus i2cBus, byte address = (byte)Address.Default) + public Hih6130(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 4, writeBufferSize: 4) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs index 2ee2a25d19..d8e3e61c56 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Extras/Htu31d.Enums.cs @@ -5,7 +5,7 @@ public partial class Htu31d /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs index c0275d6735..df61f72e6c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs @@ -24,7 +24,7 @@ public partial class Htu21d : Htux1dBase /// Sensor address (default to 0x40) /// I2CBus (default to 100 KHz) /// Update interval, defaults to 1 sec if null - public Htu21d(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) + public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, updateInterval) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs index 997abfcc08..c8cd0cdd4c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs @@ -19,7 +19,7 @@ public partial class Htu31d : Htux1dBase /// Sensor address (default to 0x40). /// I2CBus (default to 100 KHz). /// Update interval, defaults to 1 sec if null - public Htu31d(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) + public Htu31d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, updateInterval) { SerialNumber = GetSerial(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs index 8743e6bb5b..b8b530164b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs @@ -9,7 +9,7 @@ namespace Meadow.Foundation.Sensors.Atmospheric /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 @@ -41,7 +41,7 @@ public abstract class Htux1dBase : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Default I2C bus speed @@ -69,7 +69,7 @@ public abstract class Htux1dBase : /// /// /// - public Htux1dBase(II2cBus i2cBus, byte address = (byte)Address.Default, TimeSpan? updateInterval = null) + public Htux1dBase(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) : base(i2cBus, address, (int)(updateInterval == null ? 1000 : updateInterval.Value.TotalMilliseconds)) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs index 6472489bda..76a03b1658 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mpl3115a2 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs index 55a04c2183..284a7281e6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Mpl3115a2/Driver/Mpl3115a2.cs @@ -66,14 +66,14 @@ public bool Standby /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new MPL3115A2 object with the default address and speed settings /// /// Address of the sensor (default = 0x60) /// I2cBus (Maximum is 400 kHz) - public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Address.Default) + public Mpl3115a2(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { if (BusComms?.ReadRegister(Registers.WhoAmI) != 0xc4) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs index f8741d1775..97688decd5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.Enums.cs @@ -5,7 +5,7 @@ public partial class Ms5611 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x5C diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs index 454f654389..910600ab03 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Ms5611/Driver/Ms5611.cs @@ -37,7 +37,7 @@ public partial class Ms5611 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -52,7 +52,7 @@ public partial class Ms5611 : /// The I2C bus connected to the device /// I2c address - default is 0x5c /// - public Ms5611(II2cBus i2cBus, byte address = (byte)Address.Default, Resolution resolution = Resolution.OSR_1024) + public Ms5611(II2cBus i2cBus, byte address = (byte)Addresses.Default, Resolution resolution = Resolution.OSR_1024) { i2cComms = new I2cCommunications(i2cBus, address); this.resolution = resolution; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs index 2ba15fd25b..6cfe42ba6e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.Enums.cs @@ -7,7 +7,7 @@ public partial class Sgp40 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x59 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs index bee0b84c53..b53405a698 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sgp40/Driver/Sgp40.cs @@ -28,7 +28,7 @@ public partial class Sgp40 : ByteCommsSensorBase, II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; private byte[]? compensationData = null; @@ -37,7 +37,7 @@ public partial class Sgp40 : ByteCommsSensorBase, II2cPeripheral /// /// Sensor address (default to 0x40). /// I2CBus. - public Sgp40(II2cBus i2cBus, byte address = (byte)Address.Default) + public Sgp40(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, 9, 8) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs index 0387718a94..45e166d7ef 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.Enums.cs @@ -5,7 +5,7 @@ public partial class Sht31d /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs index ce8b4aa2c0..ba269dba85 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht31D/Driver/Sht31d.cs @@ -36,14 +36,14 @@ public partial class Sht31d : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new SHT31D object /// /// Sensor address (should be 0x44 or 0x45) /// I2cBus (0-1000 KHz). - public Sht31d(II2cBus i2cBus, byte address = (byte)Address.Default) + public Sht31d(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 6, writeBufferSize: 2) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs index a6fc00ae97..182b23105a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.Enums.cs @@ -5,7 +5,7 @@ public partial class Sht4x /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x44 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs index 8ce85f97af..888cab9f6d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Sht4x/Driver/Sht4x.cs @@ -42,14 +42,14 @@ public partial class Sht4x : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new SHT4x object /// /// Sensor address /// I2cBus - public Sht4x(II2cBus i2cBus, byte address = (byte)Address.Default) + public Sht4x(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 6, writeBufferSize: 2) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs index 1d513a3a11..9ccc39f6fb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.Enums.cs @@ -5,7 +5,7 @@ public partial class Si70xx /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs index bd40088925..97825e052e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Si70xx/Driver/Si70xx.cs @@ -55,14 +55,14 @@ public partial class Si70xx : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new SI7021 temperature and humidity sensor /// /// I2CBus /// I2C address (default to 0x40) - public Si70xx(II2cBus i2cBus, byte address = (byte)Address.Default) + public Si70xx(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, 8, 3) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs index 808cdd67bf..a6b4a83752 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.Enums.cs @@ -5,7 +5,7 @@ public partial class Th02 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs index b5c8964c4f..a6df4dbe01 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Th02/Driver/Th02.cs @@ -38,13 +38,13 @@ public partial class Th02 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Provide a mechanism for reading the temperature and humidity from /// a Th02 temperature / humidity sensor /// - public Th02(II2cBus i2cBus, byte address = (byte)Address.Default) + public Th02(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs index 7ba82f90ac..45091d733b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.Enums.cs @@ -5,7 +5,7 @@ public partial class Mlx90640 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x33 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs index d915d7729f..8684713fc8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Camera.Mlx90640/Driver/Mlx90640.cs @@ -56,7 +56,7 @@ public float Emissivity /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -72,7 +72,7 @@ public float Emissivity /// I2C address /// Emissivity public Mlx90640(II2cBus i2cBus, - byte address = (byte)Address.Default, + byte address = (byte)Addresses.Default, float emissivity = 0.95f) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs index 11b70f3160..a120826d69 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.I2c.cs @@ -9,7 +9,7 @@ public partial class MaxBotix : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Creates a new MaxBotix object communicating over I2C @@ -17,7 +17,7 @@ public partial class MaxBotix : II2cPeripheral /// The I2C bus /// The distance sensor type /// The I2C address - public MaxBotix(II2cBus i2cBus, SensorType sensor, byte address = (byte)Address.Default) + public MaxBotix(II2cBus i2cBus, SensorType sensor, byte address = (byte)Addresses.Default) : base(i2cBus, address) { sensorType = sensor; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs index c207c68e9e..1bc972d847 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.MaxBotix/Driver/MaxBotix.enums.cs @@ -5,7 +5,7 @@ public partial class MaxBotix /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x70 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs index eee6940213..00eba29ad0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.Enums.cs @@ -8,7 +8,7 @@ public partial class Vl53l0x /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x29 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs index 1c78354e37..73e5772ada 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Distance.Vl53l0x/Driver/Vl53l0x.cs @@ -53,7 +53,7 @@ public bool IsShutdown /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; readonly IDigitalOutputPort shutdownPort; @@ -64,7 +64,7 @@ public bool IsShutdown /// /// I2C bus /// I2C address - public Vl53l0x(II2cBus i2cBus, byte address = (byte)Address.Default) + public Vl53l0x(II2cBus i2cBus, byte address = (byte)Addresses.Default) : this(i2cBus, null, address) { } @@ -75,7 +75,7 @@ public Vl53l0x(II2cBus i2cBus, byte address = (byte)Address.Default) /// Shutdown pin /// VL53L0X address - public Vl53l0x(II2cBus i2cBus, IPin shutdownPin, byte address = (byte)Address.Default) + public Vl53l0x(II2cBus i2cBus, IPin shutdownPin, byte address = (byte)Addresses.Default) : base(i2cBus, address) { if (shutdownPin != null) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs index 6067121ae9..dd97bda25a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.Enums.cs @@ -10,7 +10,7 @@ public partial class Ags01Db /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x11 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs index 1fe1b4d514..5c5f39cac9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ags01Db/Driver/Ags01Db.cs @@ -33,14 +33,14 @@ public partial class Ags01Db : ByteCommsSensorBase, II2cPeriphera /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Ags01Db object /// /// The I2C bus /// The I2C address - public Ags01Db(II2cBus i2cBus, byte address = (byte)Address.Default) + public Ags01Db(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 3, writeBufferSize: 3) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs index 99822f117f..11d7bded6f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.Enums.cs @@ -5,7 +5,7 @@ partial class Ens160 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs index 9b36965b36..44b8b02b2b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs @@ -69,7 +69,7 @@ public OperatingMode CurrentOperatingMode /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new ENS160 object @@ -80,7 +80,7 @@ public OperatingMode CurrentOperatingMode /// /// The I2C bus /// The I2C address - public Ens160(II2cBus i2cBus, byte address = (byte)Address.Default) + public Ens160(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 9, writeBufferSize: 9) { Initialize().Wait(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs index 08dfb88d22..4e22b203a1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Samples/Ens160_Sample/MeadowApp.cs @@ -18,7 +18,7 @@ public override Task Initialize() var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); - sensor = new Ens160(i2cBus, (byte)Ens160.Address.Address_0x53); + sensor = new Ens160(i2cBus, (byte)Ens160.Addresses.Address_0x53); var consumer = Ens160.CreateObserver( diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs index 2e390fc91a..82cb2a69cb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs @@ -5,7 +5,7 @@ public partial class Pmsa003i /// /// Valid I2C addresses for the sensor /// - internal enum Address : byte + internal enum Addresses : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs index 393a368da4..fa653f2606 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs @@ -143,7 +143,7 @@ public partial class Pmsa003i : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new PMSA003I sensor object @@ -151,7 +151,7 @@ public partial class Pmsa003i : /// /// The I2C bus public Pmsa003i(II2cBus i2cBus) - : base(i2cBus, (byte)Address.Default) + : base(i2cBus, (byte)Addresses.Default) { } /// diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs index 51033c761e..85034d05b5 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.Enums.cs @@ -5,7 +5,7 @@ partial class Scd4xBase /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x62 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs index 68dfb6b720..e7aa52e88e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Scd4x/Driver/Scd4xBase.cs @@ -50,7 +50,7 @@ public abstract partial class Scd4xBase /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Scd4xBase object @@ -61,7 +61,7 @@ public abstract partial class Scd4xBase /// /// The I2C bus /// The I2C address - public Scd4xBase(II2cBus i2cBus, byte address = (byte)Address.Default) + public Scd4xBase(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 9, writeBufferSize: 9) { StopPeriodicUpdates().Wait(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs index 25bf8324cb..aaef4ee3c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Enums.cs @@ -5,7 +5,7 @@ public partial class NeoM8 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x42 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs index dce53885d5..b8583c35d6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.I2c.cs @@ -11,7 +11,7 @@ public partial class NeoM8 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -25,7 +25,7 @@ public partial class NeoM8 : II2cPeripheral /// /// Create a new NeoM8 object using I2C /// - public NeoM8(II2cBus i2cBus, byte address = (byte)Address.Default, IPin resetPin = null, IPin ppsPin = null) + public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IPin resetPin = null, IPin ppsPin = null) { if (resetPin != null) { @@ -43,7 +43,7 @@ public NeoM8(II2cBus i2cBus, byte address = (byte)Address.Default, IPin resetPin /// /// Create a new NeoM8 object using I2C /// - public NeoM8(II2cBus i2cBus, byte address = (byte)Address.Default, IDigitalOutputPort resetPort = null, IDigitalInputPort ppsPort = null) + public NeoM8(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalOutputPort resetPort = null, IDigitalInputPort ppsPort = null) { ResetPort = resetPort; PulsePerSecondPort = ppsPort; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs index e421605f99..ae7fd7c148 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.Enums.cs @@ -5,7 +5,7 @@ public partial class As5013 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs index 84e185d68f..f30497119d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.As5013/Driver/As5013.cs @@ -61,7 +61,7 @@ public DigitalJoystickPosition? DigitalPosition /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -74,7 +74,7 @@ public DigitalJoystickPosition? DigitalPosition /// the I2C bus /// the device I2C address /// port connected to the interrupt pin - public As5013(II2cBus i2cBus, byte address = (byte)Address.Default, IDigitalInterruptPort interruptPort = null) + public As5013(II2cBus i2cBus, byte address = (byte)Addresses.Default, IDigitalInterruptPort interruptPort = null) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs index 6b776ded44..efa6240eea 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.Enums.cs @@ -28,7 +28,7 @@ public enum KeyState /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x1F diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs index 6f067c3f15..a9f1326fd3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.BBQ10Keyboard/Driver/BBQ10Keyboard.cs @@ -12,7 +12,7 @@ public partial class BBQ10Keyboard : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -54,7 +54,7 @@ public byte BackLight2 /// The I2C bus /// The interrupt pin /// The I2C address - public BBQ10Keyboard(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Address.Default) + public BBQ10Keyboard(II2cBus i2cBus, IPin interruptPin = null, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs index 5981a7d6a2..8149a08cfc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.cs @@ -14,7 +14,7 @@ public partial class Mpr121 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -64,7 +64,7 @@ public int RefreshPeriod /// /// Create a new MPR121 keypad object. /// - public Mpr121(II2cBus i2cBus, byte address = (byte)Address.Default, int refreshPeriod = -1, Mpr121Configuration configuration = null) + public Mpr121(II2cBus i2cBus, byte address = (byte)Addresses.Default, int refreshPeriod = -1, Mpr121Configuration configuration = null) { this.refreshPeriod = refreshPeriod; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs index 1dbdc36379..abbc2e9a43 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Mpr121/Driver/Mpr121.enums.cs @@ -6,7 +6,7 @@ public partial class Mpr121 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x5A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs index 6933e33677..db84f79085 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.Enums.cs @@ -5,7 +5,7 @@ public partial class Tsc2004 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x4B diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs index 12209d5014..d7ad9639ba 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.Tsc2004/Driver/Tsc2004.cs @@ -13,7 +13,7 @@ public partial class Tsc2004 : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -60,7 +60,7 @@ public partial class Tsc2004 : II2cPeripheral /// /// The I2C bus /// The I2C address - public Tsc2004(II2cBus i2cBus, byte address = (byte)Address.Default) + public Tsc2004(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs index 8bc9fae6f1..b00f9d9538 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/NesClassicController.cs @@ -36,7 +36,7 @@ public class NesClassicController : WiiClassicControllerBase /// Creates a NES Classic Mini Controller object /// /// the I2C bus connected to controller - public NesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) + public NesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs index ba7fa434e8..d2839a4e98 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/SnesClassicController.cs @@ -53,7 +53,7 @@ public class SnesClassicController : WiiClassicControllerBase /// Creates a SNES Classic Mini Controller object /// /// the I2C bus connected to controller - public SnesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) + public SnesClassicController(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs index 6b9818ede2..3863f6b89d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicController.cs @@ -85,7 +85,7 @@ public class WiiClassicController : WiiClassicControllerBase /// /// the I2C bus connected to controller /// Enable high resolution mode analog sticks and triggers (8 bits of precision) - public WiiClassicController(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Address.Default) + public WiiClassicController(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Addresses.Default) { this.useHighResolutionMode = useHighResolutionMode; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs index 685cca31b0..f013b4d680 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiClassicControllerPro.cs @@ -76,7 +76,7 @@ public class WiiClassicControllerPro : WiiClassicControllerBase /// /// the I2C bus connected to controller /// Enable high resolution mode analog sticks and triggers (8 bits of precision) - public WiiClassicControllerPro(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Address.Default) + public WiiClassicControllerPro(II2cBus i2cBus, bool useHighResolutionMode = false) : base(i2cBus, (byte)Addresses.Default) { this.useHighResolutionMode = useHighResolutionMode; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs index d9d70a8884..a95c44779a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/Drivers/WiiNunchuck.cs @@ -45,7 +45,7 @@ public class WiiNunchuck : WiiExtensionControllerBase /// Creates a Wii Nunchuck object /// /// the I2C bus connected to controller - public WiiNunchuck(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) + public WiiNunchuck(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs index a6b72382d5..efcd5b09a9 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.Enums.cs @@ -5,7 +5,7 @@ public abstract partial class WiiExtensionControllerBase /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x52 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs index 51158c3286..d07dd462c4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Hid.WiiExtensionControllers/Driver/WiiExtensionControllerBase.cs @@ -14,7 +14,7 @@ public abstract partial class WiiExtensionControllerBase : II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Default I2C bus speed (400kHz) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs index 92f3e14992..e5fa769eff 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.Addresses.cs @@ -5,7 +5,7 @@ public partial class Bh1745 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Address of the peripheral when the address pin is pulled low. diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs index 27cb077536..952ec019b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1745/Driver/Bh1745.cs @@ -225,12 +225,12 @@ public ushort UpperInterruptThreshold /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new BH17545 color sensor object /// - public Bh1745(II2cBus i2cBus, byte address = (byte)Address.Default) + public Bh1745(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { CompensationMultipliers = new ChannelMultipliers diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs index 05eb2e6e28..e48257343f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.Addresses.cs @@ -5,7 +5,7 @@ public partial class Bh1750 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Address of the peripheral when the address pin is pulled low diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs index a03920267d..673bdbe61a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Bh1750/Driver/Bh1750.cs @@ -45,13 +45,13 @@ public double LightTransmittance /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new BH1750 light sensor object using a static reference voltage. /// public Bh1750( - II2cBus i2cBus, byte address = (byte)Address.Default, + II2cBus i2cBus, byte address = (byte)Addresses.Default, MeasuringModes measuringMode = MeasuringModes.ContinuouslyHighResolutionMode, double lightTransmittance = 1) : base(i2cBus, address) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs index e20c1a31ed..533dac2185 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.Enums.cs @@ -5,7 +5,7 @@ public partial class Max44009 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x4A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs index 2018fbcbcd..812cf7d8c0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Max44009/Driver/Max44009.cs @@ -13,14 +13,14 @@ public partial class Max44009 : ByteCommsSensorBase, II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Max44009 object /// /// The I2C bus /// The I2C address - public Max44009(II2cBus i2cBus, byte address = (byte)Address.Default) + public Max44009(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { Initialize(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs index 0550c0fda1..433da494b6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.Addresses.cs @@ -5,7 +5,7 @@ public partial class Si1145 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs index 97c61f53c5..c3762c0b9a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Si1145/Driver/Si1145.cs @@ -16,13 +16,13 @@ public partial class Si1145 /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new SI1145 sensor object /// /// I2cBus (default to 400 KHz) - public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Address.Default) + public Si1145(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Default) { if (BusComms.ReadRegister(Registers.REG_PARTID) != 0x45) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs index 71f4cdd257..cab3cd875f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.Enums.cs @@ -16,7 +16,7 @@ public partial class Tsl2591 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x29 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs index eda0ecea7f..db2875d788 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Tsl2591/Driver/Tsl2591.cs @@ -107,7 +107,7 @@ public IntegrationTimes IntegrationTime /// The I2C bus /// The I2C address public Tsl2591(II2cBus i2cBus, - byte address = (byte)Address.Default) + byte address = (byte)Addresses.Default) : base(i2cBus, address) { Gain = GainFactor.Medium; diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs index 51087ac99a..cac8db767c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.Addresses.cs @@ -5,7 +5,7 @@ public partial class Veml7700 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x10 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs index 97e5226f03..35b2085a42 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Light.Veml7700/Driver/Veml7700.cs @@ -45,14 +45,14 @@ public partial class Veml7700 : ByteCommsSensorBase, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Create a new Veml7700 object with the default address /// /// The I2C bus public Veml7700(II2cBus i2cBus) - : base(i2cBus, (byte)Address.Default) + : base(i2cBus, (byte)Addresses.Default) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs index 7195733dec..2bb609e3dc 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.Enums.cs @@ -6,7 +6,7 @@ public partial class Nau7802 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x2A diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs index 2396e679cf..d9fe3041ef 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.LoadCell.Nau7802/Driver/Nau7802.cs @@ -35,27 +35,27 @@ public partial class Nau7802 : ByteCommsSensorBase, IMassSensor, II2cPerip /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Creates an instance of the NAU7802 Driver class /// /// The I2C bus public Nau7802(II2cBus i2cBus) - : base(i2cBus, (byte)Address.Default) + : base(i2cBus, (byte)Addresses.Default) { - Initialize((byte)Address.Default); + Initialize((byte)Addresses.Default); } private void Initialize(byte address) { switch (address) { - case (byte)Address.Default: + case (byte)Addresses.Default: // valid; break; default: - throw new ArgumentOutOfRangeException($"NAU7802 device supports only address {(byte)Address.Default}"); + throw new ArgumentOutOfRangeException($"NAU7802 device supports only address {(byte)Addresses.Default}"); } PowerOn(); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs index 07d92976ce..82d848858d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345.cs @@ -16,7 +16,7 @@ public partial class Adxl345 : ByteCommsSensorBase, IAcceleromet /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Event raised when acceleration changes @@ -77,7 +77,7 @@ public sbyte OffsetZ /// /// Address of the I2C sensor /// I2C bus - public Adxl345(II2cBus i2cBus, Address address = Address.Default) + public Adxl345(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs index c1fd8e6bdc..b975a00da4 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Adxl3xx/Driver/Drivers/Adxl345_Extras/Adxl345.Addresses.cs @@ -5,7 +5,7 @@ public partial class Adxl345 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x53 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs index aa6b9f7f2b..21cccf18da 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.Addresses.cs @@ -5,7 +5,7 @@ public partial class Apds9960 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x39 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs index aac94f8fa3..28c7722338 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Apds9960/Driver/Apds9960.cs @@ -25,7 +25,7 @@ public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; readonly IDigitalInputPort interruptPort; readonly GestureData gestureData; @@ -60,7 +60,7 @@ public partial class Apds9960 : ByteCommsSensorBase<(Color? Color, Illuminance? /// SI2C bus object /// The interrupt pin public Apds9960(II2cBus i2cBus, IPin interruptPin) - : base(i2cBus, (byte)Address.Default) + : base(i2cBus, (byte)Addresses.Default) { if (interruptPin != null) { diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs index 3f2a365dfc..4c137f14f6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.Enums.cs @@ -5,7 +5,7 @@ public partial class Bmi270 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs index 2b7daded85..6d39352869 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bmi270/Driver/Bmi270.cs @@ -57,7 +57,7 @@ public partial class Bmi270 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -69,7 +69,7 @@ public partial class Bmi270 : /// /// The I2C bus connected to the sensor /// The I2C address - public Bmi270(II2cBus i2cBus, byte address = (byte)Address.Address_0x68) + public Bmi270(II2cBus i2cBus, byte address = (byte)Addresses.Address_0x68) { //Read buffer: 16 (needs at least 13) //Write buffer: 256 bytes for the config data + 1 for the address diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs index 6d948bbedc..82c7be7fd1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.Enums.cs @@ -5,7 +5,7 @@ public partial class Bno055 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x28 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs index 19e1efcb74..dace41b79d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Bno055/Driver/Bno055.cs @@ -32,7 +32,7 @@ public partial class Bno055 : ByteCommsSensorBase<( /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the acceleration value changes @@ -236,7 +236,7 @@ private byte Page /// /// Address of the BNO055 (default = 0x28). /// I2C bus (default = 400 KHz). - public Bno055(II2cBus i2cBus, Address address = Address.Default) + public Bno055(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs index dd1f53e054..629dd6c7b1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.Addresses.cs @@ -5,7 +5,7 @@ public partial class Hmc5883 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x1E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs index f8af3663a7..aa48362b74 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Hmc5883.cs @@ -16,7 +16,7 @@ public partial class Hmc5883 : ByteCommsSensorBase, II2cPeripheral /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Event to be raised when the compass changes @@ -54,7 +54,7 @@ public partial class Hmc5883 : ByteCommsSensorBase, II2cPeripheral /// Output rate /// Sample amount /// Measurement configuration - public Hmc5883(II2cBus i2cBus, byte address = (byte)Address.Default, + public Hmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Default, GainLevels gain = GainLevels.Gain1090, MeasuringModes measuringMode = MeasuringModes.Continuous, DataOutputRates outputRate = DataOutputRates.Rate15, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs index 8cf29aa7e8..38414c3217 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Hmc5883/Driver/Qmc5883.cs @@ -20,7 +20,7 @@ public class Qmc5883 : Hmc5883 /// Output rate /// Samples amount /// Measurement configuration - public Qmc5883(II2cBus i2cBus, byte address = (byte)Address.Qmc5883, + public Qmc5883(II2cBus i2cBus, byte address = (byte)Addresses.Qmc5883, GainLevels gain = GainLevels.Gain1090, MeasuringModes measuringMode = MeasuringModes.Continuous, DataOutputRates outputRate = DataOutputRates.Rate15, diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs index f19333b8af..c30e3f6524 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.Enums.cs @@ -5,7 +5,7 @@ public partial class Lis2Mdl /// /// Valid I2C addresses for the sensor /// - enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x1E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs index fb91329216..26bf1b7f75 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lis2Mdl/Driver/Lis2Mdl.cs @@ -25,7 +25,7 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral @@ -37,7 +37,7 @@ public partial class Lis2Mdl : PollingSensorBase, IMagnetometer /// /// The I2C bus connected to the sensor /// The I2C address - public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Address.Default) + public Lis2Mdl(II2cBus i2cBus, byte address = (byte)Addresses.Default) { i2cComms = new I2cCommunications(i2cBus, address); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs index 566bcc003b..eea6d0b66f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.Enums.cs @@ -5,7 +5,7 @@ public partial class Lsm303agr /// /// Valid I2C addresses for the sensor /// - enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x19 for the accelerometer diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs index d8db61d456..a2f8dcd9a6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Lsm303agr/Driver/Lsm303agr.cs @@ -37,7 +37,7 @@ public partial class Lsm303agr : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.AddressAccel_0x19; + public byte DefaultI2cAddress => (byte)Addresses.AddressAccel_0x19; /// /// I2C Communication bus used to communicate with the accelerometer @@ -55,8 +55,8 @@ public partial class Lsm303agr : /// The I2C bus connected to the sensor public Lsm303agr(II2cBus i2cBus) { - i2cCommsAccel = new I2cCommunications(i2cBus, (byte)Address.AddressAccel_0x19); - i2cCommsMag = new I2cCommunications(i2cBus, (byte)Address.AddressMag_0x1E); + i2cCommsAccel = new I2cCommunications(i2cBus, (byte)Addresses.AddressAccel_0x19); + i2cCommsMag = new I2cCommunications(i2cBus, (byte)Addresses.AddressMag_0x1E); Initialize(); } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs index a75d32aee9..648cc07e2e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mag3110 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x0E diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs index f50b27c5af..d572cfedc1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mag3110/Driver/Mag3110.cs @@ -17,7 +17,7 @@ public partial class Mag3110 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the magnetic field value changes @@ -113,7 +113,7 @@ public bool DigitalInputsEnabled /// Interrupt port used to detect end of conversions /// Address of the MAG3110 (default = 0x0e) /// I2C bus object - default = 400 KHz) - public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Address.Default) + public Mag3110(II2cBus i2cBus, IDigitalInputPort interruptPort = null, byte address = (byte)Addresses.Default) : base(i2cBus, address) { var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs index 72f5c68417..cbd08ba890 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mma7660fc /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x4C diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs index b732b43773..f00567906a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mma7660fc/Driver/Mma7660fc.cs @@ -14,7 +14,7 @@ public partial class Mma7660fc : ByteCommsSensorBase, IAccelerom /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when new acceleration data is processed @@ -41,7 +41,7 @@ public partial class Mma7660fc : ByteCommsSensorBase, IAccelerom /// /// Address of the I2C sensor /// I2C bus - public Mma7660fc(II2cBus i2cBus, Address address = Address.Default) + public Mma7660fc(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs index 6a23fb556b..2329db725a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mmc5603 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x30 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs index 87d8564d38..75cc5a7abd 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mmc5603/Driver/Mmc5603.cs @@ -17,7 +17,7 @@ public partial class Mmc5603 : ByteCommsSensorBase, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the magnetic field value changes @@ -43,7 +43,7 @@ public bool ContinuousModeEnabled /// /// Address of the Mmc5603 /// I2C bus object - default = 400 KHz - public Mmc5603(II2cBus i2cBus, byte address = (byte)Address.Default) + public Mmc5603(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, 10, 8) { var deviceID = BusComms.ReadRegister(Registers.WHO_AM_I); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs index d6659579f2..ab7b22ea57 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.Addresses.cs @@ -5,7 +5,7 @@ public partial class Mpu6050 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x68 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs index 14ed7773e9..24ac3f6c24 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Motion.Mpu6050/Driver/Mpu6050.cs @@ -18,7 +18,7 @@ public partial class Mpu6050 : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the acceration value changes @@ -59,7 +59,7 @@ public partial class Mpu6050 : /// /// The I2C bus /// The I2C address - public Mpu6050(II2cBus i2cBus, Address address = Address.Default) + public Mpu6050(II2cBus i2cBus, Addresses address = Addresses.Default) : this(i2cBus, (byte)address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs index dc920116b5..15ded9391e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.Enums.cs @@ -10,7 +10,7 @@ public partial class Ina260 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x40 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs index 97282efc17..7f1c161644 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Power.Ina260/Driver/Ina260.cs @@ -15,7 +15,7 @@ public partial class Ina260 /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the power value changes @@ -54,13 +54,13 @@ public partial class Ina260 /// /// The I2C bus /// The I2C address - public Ina260(II2cBus i2cBus, byte address = (byte)Address.Default) + public Ina260(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { switch (address) { - case (byte)Address.Address_0x40: - case (byte)Address.Address_0x41: + case (byte)Addresses.Address_0x40: + case (byte)Addresses.Address_0x41: // valid; break; default: diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs index 01aaae2755..4f8a4401a3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.Addresses.cs @@ -5,7 +5,7 @@ public partial class Lm75 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs index c1f9ab2dc4..f50ddf9f2e 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Lm75/Driver/Lm75.cs @@ -14,7 +14,7 @@ public partial class Lm75 : ByteCommsSensorBase, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the value of the reading changes @@ -31,7 +31,7 @@ public partial class Lm75 : ByteCommsSensorBase, /// /// The I2C bus /// I2C address of the sensor - public Lm75(II2cBus i2cBus, byte address = (byte)Address.Default) + public Lm75(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs index f7f490b4fc..c118755f7d 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9600.cs @@ -12,7 +12,7 @@ public partial class Mcp9600 : Mcp960x /// /// The I2C bus /// I2C address of the sensor - public Mcp9600(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) + public Mcp9600(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs index 048cce7af5..bdf771d233 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Drivers/Mcp9601.cs @@ -12,7 +12,7 @@ public partial class Mcp9601 : Mcp960x /// /// The I2C bus /// I2C address of the sensor - public Mcp9601(II2cBus i2cBus, byte address = (byte)Address.Default) : base(i2cBus, address) + public Mcp9601(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address) { } } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs index 66189d9ce3..b7dbd3f6d1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.Enums.cs @@ -5,7 +5,7 @@ public partial class Mcp960x /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x60 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs index 2d24dac600..5d34d9d606 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp960x/Driver/Mcp960x.cs @@ -15,7 +15,7 @@ public abstract partial class Mcp960x : /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the Hot temperature value changes diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs index 7258c79188..8cb7af7277 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.Enums.cs @@ -5,7 +5,7 @@ public partial class Mcp9808 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x18 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs index 054e719c0d..4394a4b9b0 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Mcp9808/Driver/Mcp9808.cs @@ -14,7 +14,7 @@ public partial class Mcp9808 : ByteCommsSensorBase, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the temeperature value changes @@ -31,7 +31,7 @@ public partial class Mcp9808 : ByteCommsSensorBase, /// /// The I2C bus /// The I2C address - public Mcp9808(II2cBus i2CBus, byte address = (byte)Address.Default) + public Mcp9808(II2cBus i2CBus, byte address = (byte)Addresses.Default) : base(i2CBus, address, readBufferSize: 8, writeBufferSize: 8) { BusComms?.WriteRegister(Registers.REG_CONFIG, (ushort)0x0); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs index 442816a862..75909355aa 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.Addresses.cs @@ -5,7 +5,7 @@ public partial class Tmp102 /// /// Valid I2C addresses for the sensor /// - public enum Address : byte + public enum Addresses : byte { /// /// Bus address 0x48 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs index b4a7af1e39..525fd49664 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Temperature.Tmp102/Driver/Tmp102.cs @@ -14,7 +14,7 @@ public partial class Tmp102 : ByteCommsSensorBase, /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Address.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// Raised when the temperature value changes @@ -60,7 +60,7 @@ public Resolution SensorResolution /// /// The I2CBus /// I2C address of the sensor - public Tmp102(II2cBus i2cBus, byte address = (byte)Address.Default) + public Tmp102(II2cBus i2cBus, byte address = (byte)Addresses.Default) : base(i2cBus, address, readBufferSize: 2, writeBufferSize: 2) { BusComms?.ReadRegister(0x01, ReadBuffer.Span); From 5c42abd30fedbf7e3f5575d294df02a4c0d7688f Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Tue, 25 Apr 2023 12:51:43 -0500 Subject: [PATCH 098/141] RggPwmLed updates --- .../Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 5 +- .../Leds/RgbPwmLedExtensions.cs | 154 +++++++----------- 2 files changed, 66 insertions(+), 93 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 2aab0e8ffe..36e7bd1ea5 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -251,7 +251,10 @@ public void SetColor(Color color, float brightness = 1) { return; } - ColorChanged?.Invoke(this, EventArgs.Empty); + if (color != Color) + { + ColorChanged?.Invoke(this, EventArgs.Empty); + } Color = color; Brightness = brightness; diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index 34751c14c6..713f9512bd 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -1,25 +1,26 @@ using System; using System.Collections.Generic; using System.Threading; -using System.Threading.Tasks; namespace Meadow.Foundation.Leds { + /// + /// Utility functions to provide blinking and pulsing for RgbPwmLeds + /// public static class RgbPwmLedExtensions { - private static Dictionary _cancellationTokens = new Dictionary(); - - // private Task? animationTask = null; + private static Dictionary _animationThreads = new Dictionary(); /// /// Stops any running animations. /// public static void Stop(this RgbPwmLed led) { - if (_cancellationTokens.ContainsKey(led)) + if (_animationThreads.ContainsKey(led)) { - _cancellationTokens[led].Cancel(); - _cancellationTokens.Remove(led); + var task = _animationThreads[led]; + _animationThreads.Remove(led); + task.Join(); } led.IsOn = false; @@ -28,6 +29,7 @@ public static void Stop(this RgbPwmLed led) /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. /// + /// /// /// /// @@ -39,6 +41,7 @@ public static void StartBlink(this RgbPwmLed led, Color color, float highBrightn /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// + /// /// /// /// @@ -61,46 +64,30 @@ public static void StartBlink(this RgbPwmLed led, Color color, TimeSpan onDurati led.Stop(); - var animationTask = new Task(async () => - { - var cancellationTokenSource = new CancellationTokenSource(); - _cancellationTokens.Add(led, cancellationTokenSource); - await led.StartBlinkAsync(color, onDuration, offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }, TaskCreationOptions.LongRunning); - animationTask.Start(); - } - - /// - /// Start blinking led - /// - /// color to blink - /// on duration in ms - /// off duration in ms - /// maximum brightness - /// minimum brightness - /// token to cancel blink - private static async Task StartBlinkAsync(this RgbPwmLed led, Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - // stop animation on color change - led.ColorChanged += OnLedColorChange; - - while (true) + // we need to wait for any currently running animation to complete + var animationTask = new Thread((s) => { - if (cancellationToken.IsCancellationRequested) + while (true) { - break; + led.SetColor(color, highBrightness); + Thread.Sleep(onDuration); + if (!_animationThreads.ContainsKey(led)) break; + + led.SetColor(color, lowBrightness); + Thread.Sleep(offDuration); + if (!_animationThreads.ContainsKey(led)) break; } + }); - led.SetColor(color, highBrightness); - await Task.Delay(onDuration); - led.SetColor(color, lowBrightness); - await Task.Delay(offDuration); - } + _animationThreads.Add(led, animationTask); + + animationTask.Start(); } /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. /// + /// /// /// /// @@ -112,6 +99,7 @@ public static void StartPulse(this RgbPwmLed led, Color color, float highBrightn /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// + /// /// /// /// @@ -133,66 +121,48 @@ public static void StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDur led.Stop(); - var animationTask = new Task(async () => - { - var cancellationTokenSource = new CancellationTokenSource(); - _cancellationTokens.Add(led, cancellationTokenSource); - await led.StartPulseAsync(color, pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }, TaskCreationOptions.LongRunning); - animationTask.Start(); - } - - /// - /// Start led pulsing - /// - /// color to pulse - /// pulse duration in ms - /// maximum brightness - /// minimum brightness - /// token to cancel pulse - private static async Task StartPulseAsync(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - float brightness = lowBrightness; - bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. - float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); - float delta = (highBrightness - lowBrightness) / steps; - - // stop animation on color change - led.ColorChanged += OnLedColorChange; - - while (true) + var animationTask = new Thread((s) => { - if (cancellationToken.IsCancellationRequested) - { - break; - } + float brightness = lowBrightness; + bool ascending = true; + TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); + float delta = (highBrightness - lowBrightness) / steps; - if (brightness <= lowBrightness) - { - ascending = true; - } - else if (brightness >= highBrightness) + while (true) { - ascending = false; + if (brightness <= lowBrightness) + { + ascending = true; + } + else if (brightness >= highBrightness) + { + ascending = false; + } + + brightness += delta * (ascending ? 1 : -1); + + if (brightness < lowBrightness) + { + brightness = lowBrightness; + } + else if (brightness > highBrightness) + { + brightness = highBrightness; + } + + Resolver.Log.Info($"Brightness: {brightness}"); + led.SetColor(color, brightness); + + Thread.Sleep(intervalTime); + + if (!_animationThreads.ContainsKey(led)) break; } + }); - brightness += delta * (ascending ? 1 : -1); + _animationThreads.Add(led, animationTask); - if (brightness < 0) - { - brightness = 0; - } - else - if (brightness > 1) - { - brightness = 1; - } - - led.SetColor(color, brightness); - - await Task.Delay(intervalTime); - } + animationTask.Start(); } private static void OnLedColorChange(object sender, EventArgs e) From 974623fa90b001792ace96dc324e19f5ec8f4d59 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 25 Apr 2023 14:15:11 -0700 Subject: [PATCH 099/141] Add II2cPeripheral to Pca9685 --- .../ICs.IOExpanders.Pca9685/Driver/Pca9685.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs index ec4e9c4148..91a1dd51d3 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Pca9685/Driver/Pca9685.cs @@ -9,12 +9,12 @@ namespace Meadow.Foundation.ICs.IOExpanders /// Represents PCA9685 IC /// /// All PWM channels run at the same Frequency - public partial class Pca9685 + public partial class Pca9685 : II2cPeripheral { /// /// The default I2C address for the peripheral /// - public byte I2cDefaultAddress => (byte)Addresses.Default; + public byte DefaultI2cAddress => (byte)Addresses.Default; /// /// I2C Communication bus used to communicate with the peripheral From 69767ab2471c45083bb16f7812035f19e76c24df Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Tue, 25 Apr 2023 18:27:57 -0500 Subject: [PATCH 100/141] fix LED deadlock bug --- .../Leds/RgbPwmLedExtensions.cs | 136 +++++++++++------- 1 file changed, 82 insertions(+), 54 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index 713f9512bd..bd2e312a1c 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -10,17 +10,25 @@ namespace Meadow.Foundation.Leds public static class RgbPwmLedExtensions { private static Dictionary _animationThreads = new Dictionary(); + private static object _syncRoot = new object(); /// /// Stops any running animations. /// public static void Stop(this RgbPwmLed led) { - if (_animationThreads.ContainsKey(led)) + var exists = _animationThreads.ContainsKey(led); + if (exists) { - var task = _animationThreads[led]; - _animationThreads.Remove(led); - task.Join(); + Thread thread; + + lock (_animationThreads) + { + thread = _animationThreads[led]; + _animationThreads.Remove(led); + } + // we need to wait for any currently running animation to complete + thread.Join(); } led.IsOn = false; @@ -62,26 +70,37 @@ public static void StartBlink(this RgbPwmLed led, Color color, TimeSpan onDurati throw new Exception("offBrightness must be less than onBrightness"); } - led.Stop(); - - // we need to wait for any currently running animation to complete - var animationTask = new Thread((s) => + lock (_syncRoot) { - while (true) + led.Stop(); + + var animationTask = new Thread((s) => { - led.SetColor(color, highBrightness); - Thread.Sleep(onDuration); - if (!_animationThreads.ContainsKey(led)) break; + while (true) + { + led.SetColor(color, highBrightness); + Thread.Sleep(onDuration); + lock (_animationThreads) + { + if (!_animationThreads.ContainsKey(led)) break; + } + + led.SetColor(color, lowBrightness); + Thread.Sleep(offDuration); + lock (_animationThreads) + { + if (!_animationThreads.ContainsKey(led)) break; + } + } + }); - led.SetColor(color, lowBrightness); - Thread.Sleep(offDuration); - if (!_animationThreads.ContainsKey(led)) break; + lock (_animationThreads) + { + _animationThreads.Add(led, animationTask); } - }); - - _animationThreads.Add(led, animationTask); - animationTask.Start(); + animationTask.Start(); + } } /// @@ -119,50 +138,59 @@ public static void StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDur throw new Exception("offBrightness must be less than onBrightness"); } - led.Stop(); - - var animationTask = new Thread((s) => + lock (_syncRoot) { - float brightness = lowBrightness; - bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. - float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); - float delta = (highBrightness - lowBrightness) / steps; + led.Stop(); - while (true) + var animationTask = new Thread((s) => { - if (brightness <= lowBrightness) - { - ascending = true; - } - else if (brightness >= highBrightness) - { - ascending = false; - } - - brightness += delta * (ascending ? 1 : -1); + float brightness = lowBrightness; + bool ascending = true; + TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); + float delta = (highBrightness - lowBrightness) / steps; - if (brightness < lowBrightness) - { - brightness = lowBrightness; - } - else if (brightness > highBrightness) + while (true) { - brightness = highBrightness; + if (brightness <= lowBrightness) + { + ascending = true; + } + else if (brightness >= highBrightness) + { + ascending = false; + } + + brightness += delta * (ascending ? 1 : -1); + + if (brightness < lowBrightness) + { + brightness = lowBrightness; + } + else if (brightness > highBrightness) + { + brightness = highBrightness; + } + + Resolver.Log.Info($"Brightness: {brightness}"); + led.SetColor(color, brightness); + + Thread.Sleep(intervalTime); + + lock (_animationThreads) + { + if (!_animationThreads.ContainsKey(led)) break; + } } + }); - Resolver.Log.Info($"Brightness: {brightness}"); - led.SetColor(color, brightness); - - Thread.Sleep(intervalTime); - - if (!_animationThreads.ContainsKey(led)) break; + lock (_animationThreads) + { + _animationThreads.Add(led, animationTask); } - }); - - _animationThreads.Add(led, animationTask); - animationTask.Start(); + animationTask.Start(); + } } private static void OnLedColorChange(object sender, EventArgs e) From 40301a0c1e419cee2aa52aecb1a2b387d48e09cd Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 26 Apr 2023 13:42:47 -0700 Subject: [PATCH 101/141] Add ILI9341 driver rotation, fix MicroGraphics rotation logic, fix TftSpi API typo + minor cleanup --- .../Driver/MicroGraphics.cs | 113 ++++++++++++------ .../Displays.TftSpi/Driver/Drivers/Gc9a01.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/Hx8357d.cs | 4 +- .../Displays.TftSpi/Driver/Drivers/Ili9163.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/Ili9341.cs | 46 +++++-- .../Displays.TftSpi/Driver/Drivers/Ili9481.cs | 4 +- .../Displays.TftSpi/Driver/Drivers/Ili9486.cs | 4 +- .../Displays.TftSpi/Driver/Drivers/Ili9488.cs | 12 +- .../Displays.TftSpi/Driver/Drivers/Rm68140.cs | 10 +- .../Displays.TftSpi/Driver/Drivers/S6D02A1.cs | 8 +- .../Displays.TftSpi/Driver/Drivers/Ssd1331.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/Ssd1351.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/St7735.cs | 2 +- .../Displays.TftSpi/Driver/Drivers/St7789.cs | 6 +- .../Displays.TftSpi/Driver/Drivers/St7796s.cs | 6 +- .../Driver/TftSpiBase.Enums.cs | 6 +- .../Displays.TftSpi/Driver/TftSpiBase.cs | 4 +- 17 files changed, 146 insertions(+), 87 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs index d31247e5da..201b7b4efc 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs @@ -19,7 +19,15 @@ public partial class MicroGraphics /// /// PixelBuffer draw target /// - protected IPixelBuffer pixelBuffer; + protected IPixelBuffer PixelBuffer + { + get + { + if (display != null) return display.PixelBuffer; + return _memoryBuffer; + } + } + private readonly IPixelBuffer _memoryBuffer; /// /// Ingore pixels that are outside of the pixel buffer coordinate space @@ -34,10 +42,7 @@ public IFont CurrentFont get { // lazy load - if (currentFont == null) - { - currentFont = new Font6x8(); - } + currentFont ??= new Font6x8(); return currentFont; } @@ -55,7 +60,7 @@ public IFont CurrentFont /// /// Current color mode /// - public ColorMode ColorMode => pixelBuffer.ColorMode; + public ColorMode ColorMode => PixelBuffer.ColorMode; /// /// Current rotation used for drawing pixels to the display @@ -87,14 +92,36 @@ public RotationType Rotation public Color PenColor { get; set; } = Color.White; /// - /// Return the height of the display after accounting for the rotation. + /// Return the height of the display after accounting for the rotation /// - public int Height => Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? pixelBuffer.Height : pixelBuffer.Width; + public int Height + { + get + { + if (display is IRotatableDisplay { } d) + { + return display.Height; + } + + return Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? PixelBuffer.Height : PixelBuffer.Width; + } + } /// - /// Return the width of the display after accounting for the rotation. + /// Return the width of the display after accounting for the rotation /// - public int Width => Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? pixelBuffer.Width : pixelBuffer.Height; + public int Width + { + get + { + if (display is IRotatableDisplay { } d) + { + return display.Width; + } + + return Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? PixelBuffer.Width : PixelBuffer.Height; + } + } /// /// Text display configuration for use with text display menu @@ -123,8 +150,6 @@ public RotationType Rotation public MicroGraphics(IGraphicsDisplay display) { this.display = display; - - this.pixelBuffer = display.PixelBuffer; } /// @@ -134,7 +159,7 @@ public MicroGraphics(IGraphicsDisplay display) /// Initialize the offscreen buffer if true public MicroGraphics(PixelBufferBase pixelBuffer, bool initializeBuffer) { - this.pixelBuffer = pixelBuffer; + _memoryBuffer = pixelBuffer; if (initializeBuffer) { @@ -155,7 +180,14 @@ public virtual void DrawPixel(int x, int y, Color color) return; } - pixelBuffer.SetPixel(GetXForRotation(x, y), GetYForRotation(x, y), color); + if (display is IRotatableDisplay) + { + PixelBuffer.SetPixel(x, y, color); + } + else + { + PixelBuffer.SetPixel(GetXForRotation(x, y), GetYForRotation(x, y), color); + } } /// @@ -190,7 +222,7 @@ public virtual void DrawPixel(int index) return; } - pixelBuffer.SetPixel(index % pixelBuffer.Width, index / pixelBuffer.Width, PenColor); + PixelBuffer.SetPixel(index % PixelBuffer.Width, index / PixelBuffer.Width, PenColor); } /// @@ -205,7 +237,7 @@ public void InvertPixel(int x, int y) return; } - pixelBuffer.InvertPixel(GetXForRotation(x, y), GetYForRotation(x, y)); + PixelBuffer.InvertPixel(GetXForRotation(x, y), GetYForRotation(x, y)); } /// @@ -521,9 +553,7 @@ public void DrawArc(int centerX, int centerY, int radius, Angle startAngle, Angl if (startAngleRadians > endAngleRadians) { - double temp = startAngleRadians; - startAngleRadians = endAngleRadians; - endAngleRadians = temp; + (endAngleRadians, startAngleRadians) = (startAngleRadians, endAngleRadians); } void DrawArcPoint(int x, int y, Color color) @@ -1232,12 +1262,7 @@ public void DrawText(int x, int y, string text, Color color, VerticalAlignment alignmentV = VerticalAlignment.Top, IFont? font = null) { - var fontToDraw = font != null ? font : CurrentFont; - - if (fontToDraw == null) - { - throw new Exception("CurrentFont must be set before calling DrawText."); - } + var fontToDraw = (font ?? CurrentFont) ?? throw new Exception("CurrentFont must be set before calling DrawText."); byte[] bitMap = GetBytesForTextBitmap(text, fontToDraw); @@ -1314,9 +1339,9 @@ public void DrawBuffer(int x, int y, IPixelBuffer buffer) } //fast and happy path - if (Rotation == RotationType.Default && isInBounds) + if (display is IRotatableDisplay || Rotation == RotationType.Default && isInBounds) { - pixelBuffer.WriteBuffer(x, y, buffer); + PixelBuffer.WriteBuffer(x, y, buffer); } else //loop over every pixel { @@ -1324,7 +1349,7 @@ public void DrawBuffer(int x, int y, IPixelBuffer buffer) { for (int j = yStartIndex; j < heightToDraw; j++) { - pixelBuffer.SetPixel(GetXForRotation(x + i, y + j), + PixelBuffer.SetPixel(GetXForRotation(x + i, y + j), GetYForRotation(x + i, y + j), buffer.GetPixel(i, j)); } @@ -1618,11 +1643,11 @@ public virtual void Clear(bool updateDisplay = false) { if (display.DisabledColor == Color.Black) { - pixelBuffer.Clear(); + PixelBuffer.Clear(); } else { - pixelBuffer.Fill(display.DisabledColor); + PixelBuffer.Fill(display.DisabledColor); } if (updateDisplay) @@ -1641,7 +1666,7 @@ public virtual void Clear(bool updateDisplay = false) /// Update the display immediately when true public virtual void Clear(int originX, int originY, int width, int height, bool updateDisplay = false) { - pixelBuffer.Fill(originX, originY, width, height, display.DisabledColor); + PixelBuffer.Fill(originX, originY, width, height, display.DisabledColor); if (updateDisplay) { @@ -1734,10 +1759,12 @@ protected void DrawBitmap(int x, int y, int width, int height, byte[] bitmap, Sc /// public int GetXForRotation(int x, int y) { + if (display is IRotatableDisplay) { return x; } + return Rotation switch { - RotationType._90Degrees => pixelBuffer.Width - y - 1, - RotationType._180Degrees => pixelBuffer.Width - x - 1, + RotationType._90Degrees => PixelBuffer.Width - y - 1, + RotationType._180Degrees => PixelBuffer.Width - x - 1, RotationType._270Degrees => y, _ => x, }; @@ -1751,11 +1778,13 @@ public int GetXForRotation(int x, int y) /// public int GetYForRotation(int x, int y) { + if (display is IRotatableDisplay) { return y; } + return Rotation switch { RotationType._90Degrees => x, - RotationType._180Degrees => pixelBuffer.Height - y - 1, - RotationType._270Degrees => pixelBuffer.Height - x - 1, + RotationType._180Degrees => PixelBuffer.Height - y - 1, + RotationType._270Degrees => PixelBuffer.Height - x - 1, _ => y, }; } @@ -1787,19 +1816,25 @@ void Fill(int x, int y, int width, int height, Color color) if (y + height >= Height) height = Height - y; } + if (display is IRotatableDisplay) + { + PixelBuffer.Fill(x, y, width, height, color); + return; + } + switch (Rotation) { case RotationType.Default: - pixelBuffer.Fill(x, y, width, height, color); + PixelBuffer.Fill(x, y, width, height, color); break; case RotationType._90Degrees: - pixelBuffer.Fill(GetXForRotation(x, y) - height + 1, GetYForRotation(x, y), height, width, color); + PixelBuffer.Fill(GetXForRotation(x, y) - height + 1, GetYForRotation(x, y), height, width, color); break; case RotationType._180Degrees: - pixelBuffer.Fill(GetXForRotation(x, y) - width + 1, GetYForRotation(x, y) - height + 1, width, height, color); + PixelBuffer.Fill(GetXForRotation(x, y) - width + 1, GetYForRotation(x, y) - height + 1, width, height, color); break; case RotationType._270Degrees: - pixelBuffer.Fill(GetXForRotation(x, y), GetYForRotation(x, y) - width + 1, height, width, color); + PixelBuffer.Fill(GetXForRotation(x, y), GetYForRotation(x, y) - width + 1, height, width, color); break; } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs index ca9f1a4178..fd70ca16d3 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs @@ -11,7 +11,7 @@ public class Gc9a01 : TftSpiBase, IRotatableDisplay /// /// The display default color mode /// - public override ColorMode DefautColorMode => ColorMode.Format16bppRgb565; + public override ColorMode DefaultColorMode => ColorMode.Format16bppRgb565; /// /// The color modes supported by the display diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs index 167998b5c3..79a7f9f498 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs @@ -11,7 +11,7 @@ public class Hx8357d : TftSpiBase, IRotatableDisplay /// /// The display default color mode /// - public override ColorMode DefautColorMode => ColorMode.Format16bppRgb565; + public override ColorMode DefaultColorMode => ColorMode.Format16bppRgb565; /// /// The color modes supported by the display @@ -201,7 +201,7 @@ public void SetRotation(RotationType rotation) { SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)(Register.MADCTL_MX | Register.MADCTL_MY | Register.MADCTL_RGB)); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs index 02d713a9a1..ed45d9d20c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs @@ -11,7 +11,7 @@ public class Ili9163 : TftSpiBase /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs index e62fb61d01..c3d15ec004 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Displays /// /// Represents a Ili9341 TFT color display /// - public class Ili9341 : TftSpiBase + public class Ili9341 : TftSpiBase, IRotatableDisplay { /// /// SPI bus speed @@ -17,7 +17,7 @@ public class Ili9341 : TftSpiBase /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -75,22 +75,22 @@ protected override void Initialize() } else { - DelayMs(150); //Not sure if this is needed but can't hurt + DelayMs(120); //Not sure if this is needed but can't hurt } SendCommand(0xEF, new byte[] { 0x03, 0x80, 0x02 }); SendCommand(0xCF, new byte[] { 0x00, 0xC1, 0x30 }); SendCommand(0xED, new byte[] { 0x64, 0x03, 0x12, 0x81 }); - SendCommand(0xe8, new byte[] { 0x85, 0x00, 0x78 }); + SendCommand(0xE8, new byte[] { 0x85, 0x00, 0x78 }); SendCommand(0xCB, new byte[] { 0x39, 0x2C, 0x00, 0x34, 0x02 }); SendCommand(0xF7, new byte[] { 0x20 }); SendCommand(0xEA, new byte[] { 0x00, 0x00 }); SendCommand(ILI9341_PWCTR1, new byte[] { 0x23 }); SendCommand(ILI9341_PWCTR2, new byte[] { 0x10 }); - SendCommand(ILI9341_VMCTR1, new byte[] { 0x3e, 0x28 }); + SendCommand(ILI9341_VMCTR1, new byte[] { 0x3E, 0x28 }); SendCommand(ILI9341_VMCTR2, new byte[] { 0x86 }); - SendCommand((byte)Register.MADCTL, new byte[] { (byte)(Register.MADCTL_MX | Register.MADCTL_BGR) }); //13 + SendCommand((byte)Register.MADCTL, new byte[] { (byte)(Register.MADCTL_MX | Register.MADCTL_BGR) }); if (ColorMode == ColorMode.Format16bppRgb565) { @@ -110,9 +110,7 @@ protected override void Initialize() DelayMs(120); SendCommand(Register.DISPON); - SetAddressWindow(0, 0, Width - 1, Height - 1); - - dataCommandPort.State = (Data); + dataCommandPort.State = Data; } /// @@ -138,8 +136,7 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) Write((byte)(y1 >> 8)); Write((byte)(y1 & 0xff)); // YEND - dataCommandPort.State = Command; - Write((byte)LcdCommand.RAMWR); // write to RAM */ + SendCommand(LcdCommand.RAMWR); // write to RAM */ } void SendCommand(byte command, byte[] data) @@ -154,6 +151,33 @@ void SendCommand(byte command, byte[] data) } } + /// + /// Set the display rotation + /// + /// The rotation value + public void SetRotation(RotationType rotation) + { + SendCommand(Register.MADCTL); + + switch (Rotation = rotation) + { + case RotationType.Normal: + SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_BGR); + break; + case RotationType._90Degrees: + SendData((byte)Register.MADCTL_MV | (byte)Register.MADCTL_BGR); + break; + case RotationType._180Degrees: + SendData((byte)Register.MADCTL_MY | (byte)Register.MADCTL_BGR); + break; + case RotationType._270Degrees: + SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_MY | (byte)Register.MADCTL_MV | (byte)Register.MADCTL_BGR); + break; + } + + UpdateBuffer(); + } + static byte ILI9341_GAMMASET = 0x26; static byte ILI9341_DFUNCTR = 0xB6; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs index cd508f8365..c512335958 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs @@ -11,7 +11,7 @@ public class Ili9481 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -168,7 +168,7 @@ public void SetRotation(RotationType rotation) { SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)(Register.MADCTL_SS | Register.MADCTL_BGR)); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs index 0c5e0c70b2..447d880b49 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs @@ -11,7 +11,7 @@ public class Ili9486 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -157,7 +157,7 @@ public void SetRotation(RotationType rotation) { SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_BGR); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs index e300ce2759..cd1a96f52b 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs @@ -11,7 +11,7 @@ public class Ili9488 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format24bppRgb888; + public override ColorMode DefaultColorMode => ColorMode.Format24bppRgb888; /// /// The color modes supported by the display @@ -113,10 +113,10 @@ protected override void Initialize() SendData(0x12); SendData(0x80); - SendCommand((byte)Register.MADCTL); // Memory Access Control - SendData(0x48); // MX, BGR + SendCommand(Register.MADCTL); + SendData(0x48); - SendCommand((byte)Register.COLOR_MODE); // Pixel Interface Format + SendCommand(Register.COLOR_MODE); SendData(0x66); //24bpp SendCommand(0xB0); // Interface Mode Control @@ -184,9 +184,9 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) /// The rotation value public void SetRotation(RotationType rotation) { - SendCommand((byte)Register.MADCTL); + SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_BGR); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs index 4d6bdc85d7..4a434b58cf 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs @@ -11,7 +11,7 @@ public class Rm68140 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -103,10 +103,10 @@ protected override void Initialize() SendData(0x0C); SendData(0x00); - SendCommand((byte)Register.MADCTL); + SendCommand(Register.MADCTL); SendData(0x0A); - SendCommand((byte)Register.COLOR_MODE); + SendCommand(Register.COLOR_MODE); if (ColorMode == ColorMode.Format16bppRgb565) SendData(0x55); //16 bit RGB565 else @@ -161,9 +161,9 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) /// The rotation value public void SetRotation(RotationType rotation) { - SendCommand((byte)Register.MADCTL); + SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_BGR); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs index 198b06dff2..f0146d74e7 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs @@ -11,7 +11,7 @@ public class S6D02A1 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -108,7 +108,7 @@ protected override void Initialize() SendCommand(0x36, new byte[] { 0xC8 }); // Memory access data control SendCommand(0x35, new byte[] { 0x00 }); // Tearing effect line on - SendCommand((byte)Register.COLOR_MODE); + SendCommand(Register.COLOR_MODE); if (ColorMode == ColorMode.Format16bppRgb565) SendData(0x05); //16 bit RGB565 else @@ -156,9 +156,9 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) /// The rotation value public void SetRotation(RotationType rotation) { - SendCommand((byte)Register.MADCTL); + SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_MY | (byte)Register.MADCTL_BGR); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs index 5222db3355..e52042c15a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs @@ -12,7 +12,7 @@ public class Ssd1331 : TftSpiBase /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format16bppRgb565; + public override ColorMode DefaultColorMode => ColorMode.Format16bppRgb565; /// /// The color modes supported by the display diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs index 6524681036..45626dd419 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs @@ -11,7 +11,7 @@ public class Ssd1351 : TftSpiBase /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format16bppRgb565; + public override ColorMode DefaultColorMode => ColorMode.Format16bppRgb565; /// /// The color modes supported by the display diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs index 2fda516e16..2b2bdf47f3 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs @@ -11,7 +11,7 @@ public class St7735 : TftSpiBase /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index 1e7a5b8557..ac969441c2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -12,7 +12,7 @@ public class St7789 : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format16bppRgb565; + public override ColorMode DefaultColorMode => ColorMode.Format16bppRgb565; /// /// The color modes supported by the display @@ -135,7 +135,7 @@ protected override void Initialize() SendCommand(Register.DISPON); //display on DelayMs(500); - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); + SetAddressWindow(0, 0, Width - 1, Height - 1); dataCommandPort.State = Data; } @@ -180,7 +180,7 @@ public void SetRotation(RotationType rotation) { SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_MY | (byte)Register.MADCTL_RGB); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs index 684d7c1d20..2ff1f535f2 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs @@ -11,7 +11,7 @@ public class St7796s : TftSpiBase, IRotatableDisplay /// /// The default display color mode /// - public override ColorMode DefautColorMode => ColorMode.Format12bppRgb444; + public override ColorMode DefaultColorMode => ColorMode.Format12bppRgb444; /// /// The color modes supported by the display @@ -190,9 +190,9 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) /// The rotation value public void SetRotation(RotationType rotation) { - SendCommand((byte)Register.MADCTL); + SendCommand(Register.MADCTL); - switch (rotation) + switch (Rotation = rotation) { case RotationType.Normal: SendData((byte)Register.MADCTL_MX | (byte)Register.MADCTL_BGR); diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.Enums.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.Enums.cs index 482f583d25..900c15314a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.Enums.cs @@ -11,11 +11,11 @@ public abstract partial class TftSpiBase protected enum LcdCommand : byte { /// - /// CASET + /// Column address set /// CASET = 0x2A, /// - /// RASET + /// Row address set /// RASET = 0x2B, /// @@ -70,7 +70,7 @@ protected enum Register : byte /// DISPON = 0x29, /// - /// MADCTL + /// Memory access control /// MADCTL = 0x36, /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 4f52203684..268c4d7240 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -24,12 +24,12 @@ public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiPeripheral /// /// The current rotation of the display /// - public RotationType Rotation { get; set; } = RotationType.Normal; + public RotationType Rotation { get; protected set; } = RotationType.Normal; /// /// The display default color mode /// - public abstract ColorMode DefautColorMode { get; } + public abstract ColorMode DefaultColorMode { get; } /// /// Width of display in pixels From d6851c1ae6848bd4616723ef58d09e01bd2e6975 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 26 Apr 2023 15:26:20 -0700 Subject: [PATCH 102/141] Minor comment cleanup --- .../ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs index 972ef67f6a..46ece3624d 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.Enums.cs @@ -92,7 +92,7 @@ public enum PortBankType : byte /// /// /// 16-bit controllers are logically separated into two 8-bit ports. 8-bit - /// controllers only have one "port" of GPIO pins and ingore the bank setting + /// controllers only have one "port" of GPIO pins and ignore the bank setting /// public enum PortBank { From 3cdb47fedf737feb7e4143faaed8c07d711b2b52 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 26 Apr 2023 15:26:32 -0700 Subject: [PATCH 103/141] Code + comment cleanup --- .../Driver/MicroGraphics.cs | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs index 201b7b4efc..3e96bd173f 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/MicroGraphics.cs @@ -19,18 +19,11 @@ public partial class MicroGraphics /// /// PixelBuffer draw target /// - protected IPixelBuffer PixelBuffer - { - get - { - if (display != null) return display.PixelBuffer; - return _memoryBuffer; - } - } + protected IPixelBuffer PixelBuffer => (display != null) ? display.PixelBuffer : _memoryBuffer; private readonly IPixelBuffer _memoryBuffer; /// - /// Ingore pixels that are outside of the pixel buffer coordinate space + /// ignore pixels that are outside of the pixel buffer coordinate space /// public bool IgnoreOutOfBoundsPixels = true; @@ -41,9 +34,7 @@ public IFont CurrentFont { get { - // lazy load currentFont ??= new Font6x8(); - return currentFont; } set @@ -98,11 +89,10 @@ public int Height { get { - if (display is IRotatableDisplay { } d) + if (display is IRotatableDisplay) { return display.Height; } - return Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? PixelBuffer.Height : PixelBuffer.Width; } } @@ -114,11 +104,10 @@ public int Width { get { - if (display is IRotatableDisplay { } d) + if (display is IRotatableDisplay) { return display.Width; } - return Rotation == RotationType.Default || Rotation == RotationType._180Degrees ? PixelBuffer.Width : PixelBuffer.Height; } } From a86172d37b2ae34c142d423eeb10f8875e067b06 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 27 Apr 2023 14:17:58 -0700 Subject: [PATCH 104/141] Remove reflection and cleanup names --- .../Driver/BaseClasses/InputBase.cs | 2 +- .../Driver/BaseClasses/MenuItemBase.cs | 2 +- .../Driver/BaseClasses/NumericBase.cs | 2 +- .../Driver/BaseClasses/TimeBase.cs | 2 +- .../Driver/EventHandlers.cs | 2 +- .../Driver/InputTypes/Age.cs | 2 +- .../Driver/InputTypes/Boolean.cs | 2 +- .../Driver/InputTypes/Date.cs | 2 +- .../Driver/InputTypes/InputHelpers.cs | 2 +- .../Driver/InputTypes/InputType.cs | 12 +++ .../Driver/InputTypes/ListBase.cs | 2 +- .../Driver/InputTypes/Numerical.cs | 2 +- .../Driver/InputTypes/OnOff.cs | 2 +- .../Driver/InputTypes/Temperature.cs | 2 +- .../Driver/InputTypes/Time.cs | 2 +- .../Driver/InputTypes/TimeDetailed.cs | 2 +- .../Driver/InputTypes/TimeShort.cs | 2 +- .../Driver/Interfaces/IMenuInputItem.cs | 4 +- .../Driver/Interfaces/IPage.cs | 2 +- .../Driver/MenuPage.cs | 10 +-- .../Driver/TextCharacters.cs | 2 +- .../Driver/TextDisplayMenu.cs | 85 +++++++++++-------- .../MeadowApp.cs | 6 +- .../TextDisplayMenu_Sample/MeadowApp.cs | 4 +- 24 files changed, 92 insertions(+), 65 deletions(-) create mode 100644 Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputType.cs diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/InputBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/InputBase.cs index 4cb2e94954..5a4ada89fe 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/InputBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/InputBase.cs @@ -1,6 +1,6 @@ using Meadow.Peripherals.Displays; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Represents a base input menu item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs index 05cde8d488..a066c28b14 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// /// Represents a text display menu item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/NumericBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/NumericBase.cs index eb4f7d9e4c..89783e4f56 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/NumericBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/NumericBase.cs @@ -1,6 +1,6 @@ using System; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Represents a base Numeric input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/TimeBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/TimeBase.cs index 01821d2adc..e4bef47bcd 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/TimeBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/TimeBase.cs @@ -1,6 +1,6 @@ using System; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// A base time input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/EventHandlers.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/EventHandlers.cs index 20771b0253..fa18d81b7c 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/EventHandlers.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/EventHandlers.cs @@ -1,6 +1,6 @@ using System; -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// /// Text display MenuSelectedEventArgs diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Age.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Age.cs index 525f4bc881..001012b279 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Age.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Age.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Age input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Boolean.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Boolean.cs index 826525bb94..730bab234c 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Boolean.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Boolean.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu bool input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Date.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Date.cs index 1981b6cc4a..32d98e106e 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Date.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Date.cs @@ -1,6 +1,6 @@ using System; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu Date input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputHelpers.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputHelpers.cs index ab86bff46c..7bd5af04f3 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputHelpers.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputHelpers.cs @@ -1,6 +1,6 @@ using System.Text; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { internal static class InputHelpers { diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputType.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputType.cs new file mode 100644 index 0000000000..4636b20e33 --- /dev/null +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/InputType.cs @@ -0,0 +1,12 @@ +internal enum InputType +{ + Age, + Boolean, + Date, + Numerical, + Onff, + Temperature, + Time, + TimeDetailed, + TimeShort, +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/ListBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/ListBase.cs index 6450129b2e..37815f37c2 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/ListBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/ListBase.cs @@ -1,6 +1,6 @@ using System; -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu base List input type diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Numerical.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Numerical.cs index e9e0d9efa8..39705b30d0 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Numerical.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Numerical.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu Numerical input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/OnOff.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/OnOff.cs index 1a452ae297..70497f3b0a 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/OnOff.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/OnOff.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu on/off input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Temperature.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Temperature.cs index 8f7ebf391e..a502d390bc 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Temperature.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Temperature.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu Temperature input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Time.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Time.cs index a14d28c84b..a4cf9df1a6 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Time.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/Time.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu Time input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeDetailed.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeDetailed.cs index 8095a8efa5..b60ffbc2f9 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeDetailed.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeDetailed.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu TimeDetailed input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeShort.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeShort.cs index 59e8542e94..072659b182 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeShort.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/InputTypes/TimeShort.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu.InputTypes +namespace Meadow.Foundation.Displays.UI.InputTypes { /// /// Text display menu TimeShort input item diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IMenuInputItem.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IMenuInputItem.cs index 4ee6e7011c..b51aad175a 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IMenuInputItem.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IMenuInputItem.cs @@ -1,9 +1,9 @@ using Meadow.Peripherals.Displays; -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// - /// Text display Menu Input abstraction + /// Text display TextDisplayMenu Input abstraction /// public interface IMenuInputItem : IPage { diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IPage.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IPage.cs index 309fc88684..79e35a9ac2 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IPage.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Interfaces/IPage.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// /// Text display menu page abstraction diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/MenuPage.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/MenuPage.cs index 3ed3cc339f..42511a5271 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/MenuPage.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/MenuPage.cs @@ -1,7 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// /// Text display MenuPage class @@ -13,8 +12,9 @@ public class MenuPage : IPage /// public int ScrollPosition { - get => scrollPosition; - set { + get => scrollPosition; + set + { if (value > MenuItems.Count - 1 || value < 0) { Resolver.Log.Warn("Attempting to set a scroll position outside of item range: " + value.ToString()); diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextCharacters.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextCharacters.cs index d6bfbb2461..99753c6bfe 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextCharacters.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextCharacters.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// /// TextCharacters class for custom characters on LCD character displays diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs index f0157ee8fd..96c776f102 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs @@ -1,17 +1,16 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using Meadow.Foundation.Displays.TextDisplayMenu.InputTypes; +using Meadow.Foundation.Displays.UI.InputTypes; using Meadow.Peripherals.Displays; using Newtonsoft.Json; +using System; +using System.Collections; +using System.Collections.Generic; -namespace Meadow.Foundation.Displays.TextDisplayMenu +namespace Meadow.Foundation.Displays.UI { /// - /// TextDisplayMenu Menu class + /// TextDisplayMenu TextDisplayMenu class /// - public class Menu + public class TextDisplayMenu { const string INPUT_TYPES_NAMESPACE = "Meadow.Foundation.Displays.TextDisplayMenu.InputTypes."; ITextDisplay display; @@ -46,12 +45,12 @@ public class Menu public bool IsEnabled { get; protected set; } = false; /// - /// Create a new Menu object + /// Create a new TextDisplayMenu object /// /// The display to render the menu /// Json to define the menu structure /// True to show Back item on root menu - public Menu(ITextDisplay display, byte[] menuJson, bool showBackOnRoot = false) + public TextDisplayMenu(ITextDisplay display, byte[] menuJson, bool showBackOnRoot = false) { this.showBackOnRoot = showBackOnRoot; var items = ParseMenuData(menuJson); @@ -59,12 +58,12 @@ public Menu(ITextDisplay display, byte[] menuJson, bool showBackOnRoot = false) } /// - /// Create a new Menu object + /// Create a new TextDisplayMenu object /// /// The display to render the menu - /// Menu items array + /// TextDisplayMenu items array /// True to show Back item on root menu - public Menu(ITextDisplay display, MenuItem[] menuItems, bool showBackOnRoot = false) + public TextDisplayMenu(ITextDisplay display, MenuItem[] menuItems, bool showBackOnRoot = false) { Init(display, CreateMenuPage(menuItems, showBackOnRoot)); } @@ -109,7 +108,7 @@ public void Disable() } /// - /// Create a Menu page + /// Create a TextDisplayMenu page /// /// Items to populate page /// True to add a back item @@ -126,7 +125,7 @@ protected MenuPage CreateMenuPage(MenuItem[] items, bool addBack) foreach (var item in items) { menuPage.MenuItems.Add(item); - } + } return menuPage; } @@ -136,7 +135,8 @@ protected MenuPage CreateMenuPage(MenuItem[] items, bool addBack) /// protected void ShowCurrentPage() { - if (!IsEnabled) { + if (!IsEnabled) + { Resolver.Log.Warn("Render not enabled"); return; } @@ -186,7 +186,7 @@ protected void ShowCurrentPage() /// The item text protected string GetItemText(MenuItem item, bool isSelected) { - if(item == null) + if (item == null) { Resolver.Log.Warn("GetItemText: item is null"); return "no item"; @@ -216,7 +216,7 @@ protected string GetItemText(MenuItem item, bool isSelected) string padding = string.Empty; if (paddingLength > 0) { padding = new string(' ', paddingLength); } - itemText += padding + (isSelected?"*":">"); + itemText += padding + (isSelected ? "*" : ">"); } return itemText; @@ -228,7 +228,7 @@ protected string GetItemText(MenuItem item, bool isSelected) protected void UpdateCurrentMenuPage() { currentMenuPage = rootMenuPage; - } + } /// /// Next input - navigates down/forward in the list of items @@ -236,9 +236,9 @@ protected void UpdateCurrentMenuPage() /// True if successful, false in menu is disabled public bool Next() { - if(IsEnabled == false) { return false; } + if (IsEnabled == false) { return false; } - if(currentInputItem != null) + if (currentInputItem != null) { currentInputItem.Next(); } @@ -327,7 +327,7 @@ public bool Select() Exited(this, new EventArgs()); return true; } - + // if currently on a subpage and user selects back, pop back to parent page. if (currentMenuPage.ScrollPosition == 0 && pageStack.Count > 0) { @@ -359,19 +359,10 @@ public bool Select() else if (menuItem.Type != string.Empty) { pageStack.Push(currentMenuPage); - - isEditMode = true; - - // create the new input type - var type = Type.GetType(INPUT_TYPES_NAMESPACE + menuItem.Type); - if (type == null) - { - throw new ArgumentException(menuItem.Type + " was not found"); - } + isEditMode = true; - var constructor = type.GetConstructor(new Type[] { }); - currentInputItem = constructor.Invoke(new object[] { }) as IMenuInputItem; + currentInputItem = GetMenuInputItemFromName(menuItem.Type); // setup callback currentInputItem.ValueChanged += delegate (object sender, ValueChangedEventArgs e) @@ -400,6 +391,30 @@ public bool Select() } } + enum DaysOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; + + IMenuInputItem GetMenuInputItemFromName(string name) + { + if (Enum.TryParse(name, out InputType inputType) == false) + { + throw new ArgumentException(name + " was not found"); + } + + return inputType switch + { + InputType.Age => new Age(), + InputType.Boolean => new InputTypes.Boolean(), + InputType.Date => new Date(), + InputType.Numerical => new Numerical(), + InputType.Onff => new OnOff(), + InputType.Temperature => new Temperature(), + InputType.Time => new Time(), + InputType.TimeDetailed => new TimeDetailed(), + InputType.TimeShort => new TimeShort(), + _ => null, + }; + } + /// /// Refresh / redraw the menu /// @@ -441,7 +456,7 @@ private void UpdateMenuItemValue(string id, object value) MenuItem node = null; foreach (var menuItem in rootMenuPage.MenuItems) { - node = FindNodeById(menuItem as MenuItem, id); + node = FindNodeById(menuItem, id); if (node != null) { break; } } @@ -465,7 +480,7 @@ private MenuItem FindNodeById(MenuItem menuItem, string id) { foreach (var subMenuItem in menuItem.SubItems) { - var node = FindNodeById(subMenuItem as MenuItem, id); + var node = FindNodeById(subMenuItem, id); if (node != null) return node; } } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs index 50486c539f..e8dac1e5f9 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs @@ -1,7 +1,7 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Displays; -using Meadow.Foundation.Displays.TextDisplayMenu; +using Meadow.Foundation.Displays.UI; using Meadow.Foundation.Graphics; using Meadow.Foundation.Sensors.Buttons; using Meadow.Hardware; @@ -16,7 +16,7 @@ namespace MeadowApp { public class MeadowApp : App { - Menu menu; + TextDisplayMenu menu; MicroGraphics graphics; Ssd1309 ssd1309; @@ -154,7 +154,7 @@ void CreateMenu(ITextDisplay display) Resolver.Log.Info("Create menu..."); - menu = new Menu(display, menuData, false); + menu = new TextDisplayMenu(display, menuData, false); menu.Selected += Menu_Selected; } diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs index 0021325fc9..dfed7ef97a 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs @@ -14,7 +14,7 @@ namespace MeadowApp { public class MeadowApp : App { - Menu menu; + TextDisplayMenu menu; Ssd1309 ssd1309; @@ -57,7 +57,7 @@ public override Task Initialize() Resolver.Log.Info("Create menu..."); - menu = new Menu(ssd1309 as ITextDisplay, menuData, false); + menu = new TextDisplayMenu(ssd1309 as ITextDisplay, menuData, false); next = new PushButton(Device.Pins.D10); next.Clicked += (s, e) => { menu.Next(); }; From a30b0da6ce5f98609e3cb56059aa0a7b33f54bc3 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Thu, 27 Apr 2023 15:42:41 -0700 Subject: [PATCH 105/141] Update Samples --- .../MeadowApp.cs | 117 +++++++++--------- .../TextDisplayMenu_Sample/MeadowApp.cs | 44 +++---- 2 files changed, 79 insertions(+), 82 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs index e8dac1e5f9..1d5316d543 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_GameMenu_Sample/MeadowApp.cs @@ -4,37 +4,35 @@ using Meadow.Foundation.Displays.UI; using Meadow.Foundation.Graphics; using Meadow.Foundation.Sensors.Buttons; -using Meadow.Hardware; -using Meadow.Peripherals.Displays; using Meadow.Peripherals.Sensors.Buttons; using System; using System.IO; using System.Reflection; using System.Threading.Tasks; -namespace MeadowApp +namespace TextDisplayMenu_GameMenu_Sample { public class MeadowApp : App { TextDisplayMenu menu; - MicroGraphics graphics; - Ssd1309 ssd1309; + MicroGraphics microGraphics; IButton up = null; IButton down = null; IButton left = null; IButton right = null; + bool playGame = false; + public override Task Initialize() { Resolver.Log.Info("Initialize..."); - Resolver.Log.Info("Create Display with SPI..."); - var bus = Device.CreateSpiBus(); - ssd1309 = new Ssd1309 + // SSD1309 with SPI + var ssd1309 = new Ssd1309 ( spiBus: bus, chipSelectPin: Device.Pins.D02, @@ -42,49 +40,67 @@ public override Task Initialize() resetPin: Device.Pins.D00 ); - Resolver.Log.Info("Create MicroGraphics..."); + // SSD1309 with I2C + //var ssd1309 = new Ssd1309 + //( + // Device.CreateI2cBus() + //); - graphics = new MicroGraphics(ssd1309) + microGraphics = new MicroGraphics(ssd1309) { CurrentFont = new Font8x12(), }; - graphics.Clear(); - graphics.DrawText(0, 0, "Loading Menu"); - graphics.Show(); + microGraphics.Clear(); + microGraphics.DrawText(0, 0, "Loading Menu"); + microGraphics.Show(); + + Resolver.Log.Info("Load menu data..."); + + var menuData = LoadResource("menu.json"); - CreateMenu(graphics); + Resolver.Log.Info("Create menu..."); + + menu = new TextDisplayMenu(microGraphics, menuData, false); + + menu.Selected += Menu_Selected; Resolver.Log.Info("Create buttons..."); - up = new PushButton(Device.Pins.D09, ResistorMode.InternalPullDown); + up = new PushButton(Device.Pins.D09); up.Clicked += Up_Clicked; - left = new PushButton(Device.Pins.D11, ResistorMode.InternalPullDown); + left = new PushButton(Device.Pins.D11); left.Clicked += Left_Clicked; - right = new PushButton(Device.Pins.D10, ResistorMode.InternalPullDown); + right = new PushButton(Device.Pins.D10); right.Clicked += Right_Clicked; - down = new PushButton(Device.Pins.D12, ResistorMode.InternalPullDown); + down = new PushButton(Device.Pins.D12); down.Clicked += Down_Clicked; + Resolver.Log.Info("Enable menu..."); + menu.Enable(); return Task.CompletedTask; } - private void Down_Clicked(object sender, EventArgs e) + private void Up_Clicked(object sender, EventArgs e) { - if (menu.IsEnabled) { menu.Next(); } + Resolver.Log.Info("Up_Clicked"); + if (menu.IsEnabled) + { + menu.Previous(); + } } - private void Right_Clicked(object sender, EventArgs e) + private void Down_Clicked(object sender, EventArgs e) { - Resolver.Log.Info("Right_Clicked"); + Resolver.Log.Info("Down_Clicked"); if (menu.IsEnabled) { - menu.Select(); + menu.Next(); } } @@ -97,15 +113,24 @@ private void Left_Clicked(object sender, EventArgs e) } } - private void Up_Clicked(object sender, EventArgs e) + private void Right_Clicked(object sender, EventArgs e) { + Resolver.Log.Info("Right_Clicked"); if (menu.IsEnabled) { - menu.Previous(); + menu.Select(); } } - bool playGame = false; + private void Menu_Selected(object sender, MenuSelectedEventArgs e) + { + Resolver.Log.Info($"******** Selected: {e.Command}"); + + DisableMenu(); + + _ = StartGame(e.Command); + } + async Task StartGame(string command) { Resolver.Log.Info($"******** {command}"); @@ -119,13 +144,13 @@ await Task.Run(() => { while (count < 150 && playGame == true) { - graphics.Clear(); - graphics.DrawText(0, 0, $"{command}:"); - graphics.DrawText(0, 20, $"{count++}"); - graphics.DrawPixel(x += xD, y += yD); - if (x == graphics.Width || x == 0) { xD *= -1; }; - if (y == graphics.Height || y == 0) { yD *= -1; }; - graphics.Show(); + microGraphics.Clear(); + microGraphics.DrawText(0, 0, $"{command}:"); + microGraphics.DrawText(0, 20, $"{count++}"); + microGraphics.DrawPixel(x += xD, y += yD); + if (x == microGraphics.Width || x == 0) { xD *= -1; }; + if (y == microGraphics.Height || y == 0) { yD *= -1; }; + microGraphics.Show(); } }).ConfigureAwait(false); @@ -144,34 +169,10 @@ void DisableMenu() menu?.Disable(); } - void CreateMenu(ITextDisplay display) - { - Resolver.Log.Info("Load menu data..."); - - var menuData = LoadResource("menu.json"); - - Resolver.Log.Info($"Data length: {menuData.Length}..."); - - Resolver.Log.Info("Create menu..."); - - menu = new TextDisplayMenu(display, menuData, false); - - menu.Selected += Menu_Selected; - } - - private void Menu_Selected(object sender, MenuSelectedEventArgs e) - { - Resolver.Log.Info($"******** Selected: {e.Command}"); - - DisableMenu(); - - _ = StartGame(e.Command); - } - byte[] LoadResource(string filename) { var assembly = Assembly.GetExecutingAssembly(); - var resourceName = $"Graphics.TextDisplayMenu_GameMenu_Sample.{filename}"; + var resourceName = $"TextDisplayMenu_GameMenu_Sample.{filename}"; using Stream stream = assembly.GetManifestResourceStream(resourceName); using var ms = new MemoryStream(); diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs index dfed7ef97a..94538faf45 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Samples/TextDisplayMenu_Sample/MeadowApp.cs @@ -1,23 +1,20 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Displays; -using Meadow.Foundation.Displays.TextDisplayMenu; +using Meadow.Foundation.Displays.UI; using Meadow.Foundation.Graphics; using Meadow.Foundation.Sensors.Buttons; -using Meadow.Peripherals.Displays; using Meadow.Peripherals.Sensors.Buttons; using System.IO; using System.Reflection; using System.Threading.Tasks; -namespace MeadowApp +namespace TextDisplayMenu_Sample { public class MeadowApp : App { TextDisplayMenu menu; - Ssd1309 ssd1309; - IButton next = null; IButton previous = null; IButton select = null; @@ -26,26 +23,29 @@ public override Task Initialize() { Resolver.Log.Info("Initialize..."); - var bus = Device.CreateSpiBus(); - - ssd1309 = new Ssd1309 + // SSD1309 with SPI + var ssd1309 = new Ssd1309 ( - spiBus: bus, + spiBus: Device.CreateSpiBus(), chipSelectPin: Device.Pins.D02, dcPin: Device.Pins.D01, resetPin: Device.Pins.D00 ); - Resolver.Log.Info("Create MicroGraphics..."); + // SSD1309 with I2C + //var ssd1309 = new Ssd1309 + //( + // Device.CreateI2cBus() + //); - var gl = new MicroGraphics(ssd1309) + var microGraphics = new MicroGraphics(ssd1309) { CurrentFont = new Font8x12(), }; - gl.Clear(); - gl.DrawText(0, 0, "Loading Menu"); - gl.Show(); + microGraphics.Clear(); + microGraphics.DrawText(0, 0, "Loading Menu"); + microGraphics.Show(); Resolver.Log.Info("Load menu data..."); @@ -57,7 +57,7 @@ public override Task Initialize() Resolver.Log.Info("Create menu..."); - menu = new TextDisplayMenu(ssd1309 as ITextDisplay, menuData, false); + menu = new TextDisplayMenu(microGraphics, menuData, false); next = new PushButton(Device.Pins.D10); next.Clicked += (s, e) => { menu.Next(); }; @@ -78,16 +78,12 @@ public override Task Initialize() byte[] LoadResource(string filename) { var assembly = Assembly.GetExecutingAssembly(); - var resourceName = $"Graphics.TextDisplayMenu_Sample.{filename}"; + var resourceName = $"TextDisplayMenu_Sample.{filename}"; - using (Stream stream = assembly.GetManifestResourceStream(resourceName)) - { - using (var ms = new MemoryStream()) - { - stream.CopyTo(ms); - return ms.ToArray(); - } - } + using Stream stream = assembly.GetManifestResourceStream(resourceName); + using var ms = new MemoryStream(); + stream.CopyTo(ms); + return ms.ToArray(); } } } \ No newline at end of file From 43d71b6ce89dce6144a1926664c6c13812c129b6 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Thu, 27 Apr 2023 16:13:33 -0700 Subject: [PATCH 106/141] TextDisplayMenu switched to System.Text.Json --- .../Driver/BaseClasses/MenuItemBase.cs | 16 ++++++++-------- .../Driver/Displays.TextDisplayMenu.csproj | 2 +- .../Driver/TextDisplayMenu.cs | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs index a066c28b14..c17014afc9 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/BaseClasses/MenuItemBase.cs @@ -1,47 +1,47 @@ -using Newtonsoft.Json; + +using System.Text.Json.Serialization; namespace Meadow.Foundation.Displays.UI { /// /// Represents a text display menu item /// - [JsonObject(MemberSerialization.OptIn)] public class MenuItem { /// /// Sub items in the menu /// - [JsonProperty("sub")] + [JsonPropertyName("sub")] public MenuItem[] SubItems { get; set; } /// /// The text on the menu item /// - [JsonProperty("text")] + [JsonPropertyName("text")] public string Text { get; set; } /// /// The optional command when the item is selected /// - [JsonProperty("command")] + [JsonPropertyName("command")] public string Command { get; set; } /// /// The menu item type /// - [JsonProperty("type")] + [JsonPropertyName("type")] public string Type { get; set; } /// /// The menu item id /// - [JsonProperty("id")] + [JsonPropertyName("id")] public string Id { get; set; } /// /// The menu item value /// - [JsonProperty("value")] + [JsonPropertyName("value")] public object Value { get; set; } /// diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj index 9412145386..81a0d23d1d 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/Displays.TextDisplayMenu.csproj @@ -17,7 +17,7 @@ - + diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs index 96c776f102..69ec074875 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Displays.TextDisplayMenu/Driver/TextDisplayMenu.cs @@ -1,9 +1,9 @@ using Meadow.Foundation.Displays.UI.InputTypes; using Meadow.Peripherals.Displays; -using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; +using System.Text.Json; namespace Meadow.Foundation.Displays.UI { @@ -72,7 +72,7 @@ MenuItem[] ParseMenuData(byte[] menuJson) { var menuString = System.Text.Encoding.Default.GetString(menuJson); - return JsonConvert.DeserializeObject(menuString); + return JsonSerializer.Deserialize(menuString); } void Init(ITextDisplay display, MenuPage menuPage) From 5da3ee9bcc76b0237ce14430160694b220543c06 Mon Sep 17 00:00:00 2001 From: KallDrexx Date: Sun, 30 Apr 2023 16:43:45 -0400 Subject: [PATCH 107/141] Improve performance of St7789's SetAddressWindow There's overhead to each SPI write call. Sending all 4 Caset/Raset bytes in one shot instead of individually halves `SetAccessWindow` call times. --- .../Displays.TftSpi/Driver/Drivers/St7789.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index ac969441c2..4dde550593 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -9,6 +9,8 @@ namespace Meadow.Foundation.Displays /// public class St7789 : TftSpiBase, IRotatableDisplay { + private readonly byte[] _setAddressBuffer = new byte[4]; + /// /// The default display color mode /// @@ -157,18 +159,19 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) SendCommand(LcdCommand.CASET); // column addr set dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - + _setAddressBuffer[0] = (byte)(x0 >> 8); + _setAddressBuffer[1] = (byte)(x0 & 0xff); // XSTART + _setAddressBuffer[2] = (byte)(x1 >> 8); + _setAddressBuffer[3] = (byte)(x1 & 0xff); // XEND + Write(_setAddressBuffer); + SendCommand(LcdCommand.RASET); // row addr set dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - + _setAddressBuffer[0] = (byte)(y0 >> 8); + _setAddressBuffer[0] = (byte)(y0 & 0xff); // XEND + _setAddressBuffer[0] = (byte)(y1 >> 8); + _setAddressBuffer[0] = (byte)(y1 & 0xff); // YEND + SendCommand(LcdCommand.RAMWR); // write to RAM } From 9ace743efe567011538da9a42a83e8725939d91e Mon Sep 17 00:00:00 2001 From: KallDrexx Date: Sun, 30 Apr 2023 21:10:30 -0400 Subject: [PATCH 108/141] Moved address window logic to base class --- .../Displays.TftSpi/Driver/Drivers/Gc9a01.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Hx8357d.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Ili9163.cs | 27 ----------------- .../Displays.TftSpi/Driver/Drivers/Ili9341.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Ili9481.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Ili9486.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Ili9488.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/Rm68140.cs | 26 ----------------- .../Displays.TftSpi/Driver/Drivers/S6D02A1.cs | 27 ----------------- .../Displays.TftSpi/Driver/Drivers/Ssd1331.cs | 5 ++-- .../Displays.TftSpi/Driver/Drivers/St7735.cs | 18 ++---------- .../Displays.TftSpi/Driver/Drivers/St7789.cs | 19 +----------- .../Displays.TftSpi/Driver/Drivers/St7796s.cs | 26 ----------------- .../Displays.TftSpi/Driver/TftSpiBase.cs | 29 +++++++++++++++++-- 14 files changed, 32 insertions(+), 301 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs index fd70ca16d3..e54a788052 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Gc9a01.cs @@ -286,32 +286,6 @@ protected override void Initialize() DelayMs(20); } - /// - /// Set address window to update - /// - /// Start x position in pixels - /// End x position in pixels - /// Start y position in pixels - /// End y position in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the rotation of the display /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs index 79a7f9f498..a3bcf53de4 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Hx8357d.cs @@ -167,32 +167,6 @@ protected override void Initialize() DelayMs(50); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs index ed45d9d20c..782bf4a627 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs @@ -190,32 +190,5 @@ protected override void Initialize() dataCommandPort.State = (Data); } - - /// - /// Set the address window to update the display - /// - /// X0 - /// Y0 - /// X1 - /// Y1 - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = (Data); - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - dataCommandPort.State = (Command); - Write((byte)LcdCommand.RAMWR); // write to RAM */ - } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs index c3d15ec004..101b5fe7fc 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9341.cs @@ -113,32 +113,6 @@ protected override void Initialize() dataCommandPort.State = Data; } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM */ - } - void SendCommand(byte command, byte[] data) { dataCommandPort.State = Command; diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs index c512335958..abeb45c418 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9481.cs @@ -134,32 +134,6 @@ protected override void Initialize() DelayMs(25); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs index 447d880b49..c52665a6e0 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9486.cs @@ -123,32 +123,6 @@ protected override void Initialize() DelayMs(150); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs index cd1a96f52b..7312d674df 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9488.cs @@ -152,32 +152,6 @@ protected override void Initialize() DelayMs(25); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs index 4a434b58cf..9193a5d2b9 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Rm68140.cs @@ -129,32 +129,6 @@ protected override void Initialize() DelayMs(25); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs index f0146d74e7..f78ddb2d87 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs @@ -123,33 +123,6 @@ protected override void Initialize() dataCommandPort.State = (Data); } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = (Data); - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = (Data); - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - dataCommandPort.State = (Command); - Write((byte)LcdCommand.RAMWR); // write to RAM */ - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs index e52042c15a..5d2763cb47 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs @@ -1,4 +1,5 @@ -using Meadow.Foundation.Graphics; +using System; +using Meadow.Foundation.Graphics; using Meadow.Hardware; namespace Meadow.Foundation.Displays @@ -126,7 +127,7 @@ protected override void Initialize() } /// - /// Set addrees window for display updates + /// Set address window for display updates /// /// X start in pixels /// Y start in pixels diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs index 2b2bdf47f3..4f1d9bcf06 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs @@ -382,22 +382,8 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) x1 += xOffset; y1 += yOffset; - - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM + + base.SetAddressWindow(x0, y0, x1, y1); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index 4dde550593..3586a170eb 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -9,8 +9,6 @@ namespace Meadow.Foundation.Displays /// public class St7789 : TftSpiBase, IRotatableDisplay { - private readonly byte[] _setAddressBuffer = new byte[4]; - /// /// The default display color mode /// @@ -156,23 +154,8 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) x1 += xOffset; y1 += yOffset; - - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - _setAddressBuffer[0] = (byte)(x0 >> 8); - _setAddressBuffer[1] = (byte)(x0 & 0xff); // XSTART - _setAddressBuffer[2] = (byte)(x1 >> 8); - _setAddressBuffer[3] = (byte)(x1 & 0xff); // XEND - Write(_setAddressBuffer); - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - _setAddressBuffer[0] = (byte)(y0 >> 8); - _setAddressBuffer[0] = (byte)(y0 & 0xff); // XEND - _setAddressBuffer[0] = (byte)(y1 >> 8); - _setAddressBuffer[0] = (byte)(y1 & 0xff); // YEND - SendCommand(LcdCommand.RAMWR); // write to RAM + base.SetAddressWindow(x0, y0, x1, y1); } /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs index 2ff1f535f2..e68ef5398c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7796s.cs @@ -158,32 +158,6 @@ protected override void Initialize() SendCommand(0x29); //Display on } - /// - /// Set addrees window for display updates - /// - /// X start in pixels - /// Y start in pixels - /// X end in pixels - /// Y end in pixels - protected override void SetAddressWindow(int x0, int y0, int x1, int y1) - { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - Write((byte)(x0 >> 8)); - Write((byte)(x0 & 0xff)); // XSTART - Write((byte)(x1 >> 8)); - Write((byte)(x1 & 0xff)); // XEND - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - Write((byte)(y0 >> 8)); - Write((byte)(y0 & 0xff)); // YSTART - Write((byte)(y1 >> 8)); - Write((byte)(y1 & 0xff)); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM - } - /// /// Set the display rotation /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 268c4d7240..d9b6046ebb 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -9,6 +9,11 @@ namespace Meadow.Foundation.Displays { public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiPeripheral { + /// + /// Temporary buffer that can be used to batch set address window buffer commands + /// + protected byte[] SetAddressBuffer { get; } = new byte[4]; + //these displays typically support 16 & 18 bit, some also include 8, 9, 12 and/or 24 bit color /// @@ -218,13 +223,31 @@ protected void CreateBuffer(ColorMode colorMode, int width, int height) } /// - /// Set addrees window for display updates + /// Set address window for display updates /// /// X start in pixels /// Y start in pixels /// X end in pixels /// Y end in pixels - protected abstract void SetAddressWindow(int x0, int y0, int x1, int y1); + protected virtual void SetAddressWindow(int x0, int y0, int x1, int y1) + { + SendCommand(LcdCommand.CASET); // column addr set + dataCommandPort.State = Data; + SetAddressBuffer[0] = (byte)(x0 >> 8); + SetAddressBuffer[1] = (byte)(x0 & 0xff); // XSTART + SetAddressBuffer[2] = (byte)(x1 >> 8); + SetAddressBuffer[3] = (byte)(x1 & 0xff); // XEND + Write(SetAddressBuffer); + + SendCommand(LcdCommand.RASET); // row addr set + dataCommandPort.State = Data; + SetAddressBuffer[0] = (byte)(y0 >> 8); + SetAddressBuffer[0] = (byte)(y0 & 0xff); // XEND + SetAddressBuffer[0] = (byte)(y1 >> 8); + SetAddressBuffer[0] = (byte)(y1 & 0xff); // YEND + + SendCommand(LcdCommand.RAMWR); // write to RAM + } /// /// Clear the display. @@ -424,7 +447,7 @@ protected void SendCommand(byte command) dataCommandPort.State = Command; Write(command); } - + /// /// Send a single byte to the display (convenience method) /// From f7178b795eadfcf682ed1a98408e687e5919a812 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 12:01:39 -0700 Subject: [PATCH 109/141] Simplify and cleanup RgbPwmLed + extension --- .../Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 173 +++++++++--------- .../Leds/RgbPwmLedExtensions.cs | 167 +++++++---------- 2 files changed, 152 insertions(+), 188 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 36e7bd1ea5..8d8b16f6ef 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -6,18 +6,14 @@ namespace Meadow.Foundation.Leds { /// - /// Represents a Pulse-Width-Modulation (PWM) controlled RGB LED. Controlling an RGB LED with - /// PWM allows for more colors to be expressed than if it were simply controlled with normal - /// digital outputs which provide only binary control at each pin. As such, a PWM controlled - /// RGB LED can express millions of colors, as opposed to the 8 colors that can be expressed - /// via binary digital output. + /// Represents a Pulse-Width-Modulation (PWM) controlled RGB LED /// public class RgbPwmLed { - internal event EventHandler ColorChanged = delegate { }; - static readonly Frequency DefaultFrequency = new Frequency(200, Frequency.UnitType.Hertz); + readonly float DEFAULT_DUTY_CYCLE = 0f; + readonly double maxRedDutyCycle = 1; readonly double maxGreenDutyCycle = 1; readonly double maxBlueDutyCycle = 1; @@ -47,66 +43,66 @@ public bool IsOn bool isOn; /// - /// The color the LED has been set to. + /// The current LED color /// public Color Color { get; protected set; } = Color.White; /// - /// The brightness value assigned to the LED relative to Color + /// The brightness value assigned to the LED /// public float Brightness { get; protected set; } = 1f; /// - /// Get the red LED port + /// The red LED port /// protected IPwmPort RedPwm { get; set; } /// - /// Get the blue LED port + /// The blue LED port /// protected IPwmPort BluePwm { get; set; } /// - /// Get the green LED port + /// The green LED port /// protected IPwmPort GreenPwm { get; set; } /// - /// Gets the common type + /// The common type (common annode or common cathode) /// public CommonType Common { get; protected set; } /// - /// Get the red LED forward voltage + /// The red LED forward voltage /// public Voltage RedForwardVoltage { get; protected set; } /// - /// Get the green LED forward voltage + /// The green LED forward voltage /// public Voltage GreenForwardVoltage { get; protected set; } /// - /// Get the blue LED forward voltage + /// The blue LED forward voltage /// public Voltage BlueForwardVoltage { get; protected set; } /// - /// Create instance of RgbPwmLed + /// Create instance of RgbPwmLed /// - /// - /// - /// - /// + /// The PWM port for the red LED + /// The PWM port for the green LED + /// The PWM port for the blue LED + /// Common annode or common cathode public RgbPwmLed( - IPwmPort redPwm, - IPwmPort greenPwm, - IPwmPort bluePwm, + IPwmPort redPwmPort, + IPwmPort greenPwmPort, + IPwmPort bluePwmPort, CommonType commonType = CommonType.CommonCathode) { - RedPwm = redPwm; - GreenPwm = greenPwm; - BluePwm = bluePwm; + RedPwm = redPwmPort; + GreenPwm = greenPwmPort; + BluePwm = bluePwmPort; RedForwardVoltage = TypicalForwardVoltage.Red; GreenForwardVoltage = TypicalForwardVoltage.Green; @@ -114,21 +110,20 @@ public RgbPwmLed( Common = commonType; - // calculate and set maximum PWM duty cycles maxRedDutyCycle = Helpers.CalculateMaximumDutyCycle(RedForwardVoltage); maxGreenDutyCycle = Helpers.CalculateMaximumDutyCycle(GreenForwardVoltage); maxBlueDutyCycle = Helpers.CalculateMaximumDutyCycle(BlueForwardVoltage); - ResetPwms(); + ResetPwmPorts(); } /// - /// Create instance of RgbPwmLed + /// Create instance of RgbPwmLed /// - /// - /// - /// - /// + /// The PWM pin for the red LED + /// The PWM pin for the green LED + /// The PWM pin for the blue LED + /// Common annode or common cathode public RgbPwmLed( IPin redPwmPin, IPin greenPwmPin, @@ -142,16 +137,15 @@ public RgbPwmLed( { } /// - /// Instantiates a RgbPwmLed object with the especified IO device, connected - /// to three digital pins for red, green and blue channels, respectively + /// Create instance of RgbPwmLed /// - /// - /// - /// - /// - /// - /// - /// + /// The PWM pin for the red LED + /// The PWM pin for the green LED + /// The PWM pin for the blue LED + /// The forward voltage for the red LED + /// The forward voltage for the green LED + /// The forward voltage for the blue LED + /// Common annode or common cathode public RgbPwmLed( IPin redPwmPin, IPin greenPwmPin, @@ -171,90 +165,97 @@ public RgbPwmLed( { } /// - /// - /// Implementation notes: Architecturally, it would be much cleaner to construct this class - /// as three PwmLeds. Then each one's implementation would be self-contained. However, that - /// would require three additional threads during ON; one contained by each PwmLed. For this - /// reason, I'm basically duplicating the functionality for all three in here. + /// Create instance of RgbPwmLed /// - /// - /// - /// - /// - /// - /// - /// + /// The PWM port for the red LED + /// The PWM port for the green LED + /// The PWM port for the blue LED + /// The forward voltage for the red LED + /// The forward voltage for the green LED + /// The forward voltage for the blue LED + /// Common annode or common cathode public RgbPwmLed( - IPwmPort redPwm, - IPwmPort greenPwm, - IPwmPort bluePwm, + IPwmPort redPwmPort, + IPwmPort greenPwmPort, + IPwmPort bluePwmPort, Voltage redLedForwardVoltage, Voltage greenLedForwardVoltage, Voltage blueLedForwardVoltage, CommonType commonType = CommonType.CommonCathode) { - // validate and persist forward voltages + ValidateForwardVoltages(redLedForwardVoltage, greenLedForwardVoltage, blueLedForwardVoltage); + + RedForwardVoltage = redLedForwardVoltage; + GreenForwardVoltage = greenLedForwardVoltage; + BlueForwardVoltage = blueLedForwardVoltage; + + Common = commonType; + + RedPwm = redPwmPort; + GreenPwm = greenPwmPort; + BluePwm = bluePwmPort; + + maxRedDutyCycle = Helpers.CalculateMaximumDutyCycle(RedForwardVoltage); + maxGreenDutyCycle = Helpers.CalculateMaximumDutyCycle(GreenForwardVoltage); + maxBlueDutyCycle = Helpers.CalculateMaximumDutyCycle(BlueForwardVoltage); + + ResetPwmPorts(); + } + + /// + /// Validates forward voltages to ensure they're within the range MIN_FORWARD_VOLTAGE to MAX_FORWARD_VOLTAGE + /// + /// The forward voltage for the red LED + /// The forward voltage for the green LED + /// The forward voltage for the blue LED + /// + protected void ValidateForwardVoltages(Voltage redLedForwardVoltage, + Voltage greenLedForwardVoltage, + Voltage blueLedForwardVoltage) + { if (redLedForwardVoltage < MIN_FORWARD_VOLTAGE || redLedForwardVoltage > MAX_FORWARD_VOLTAGE) { throw new ArgumentOutOfRangeException(nameof(redLedForwardVoltage), "error, forward voltage must be between 0, and 3.3"); } - RedForwardVoltage = redLedForwardVoltage; if (greenLedForwardVoltage < MIN_FORWARD_VOLTAGE || greenLedForwardVoltage > MAX_FORWARD_VOLTAGE) { throw new ArgumentOutOfRangeException(nameof(greenLedForwardVoltage), "error, forward voltage must be between 0, and 3.3"); } - GreenForwardVoltage = greenLedForwardVoltage; if (blueLedForwardVoltage < MIN_FORWARD_VOLTAGE || blueLedForwardVoltage > MAX_FORWARD_VOLTAGE) { throw new ArgumentOutOfRangeException(nameof(blueLedForwardVoltage), "error, forward voltage must be between 0, and 3.3"); } - BlueForwardVoltage = blueLedForwardVoltage; - - Common = commonType; - - RedPwm = redPwm; - GreenPwm = greenPwm; - BluePwm = bluePwm; - - // calculate and set maximum PWM duty cycles - maxRedDutyCycle = Helpers.CalculateMaximumDutyCycle(RedForwardVoltage); - maxGreenDutyCycle = Helpers.CalculateMaximumDutyCycle(GreenForwardVoltage); - maxBlueDutyCycle = Helpers.CalculateMaximumDutyCycle(BlueForwardVoltage); - - ResetPwms(); } /// /// Resets all PWM ports /// - protected void ResetPwms() + protected void ResetPwmPorts() { RedPwm.Frequency = GreenPwm.Frequency = BluePwm.Frequency = DefaultFrequency; RedPwm.DutyCycle = GreenPwm.DutyCycle = BluePwm.DutyCycle = DEFAULT_DUTY_CYCLE; + // invert the PWM signal if it common anode - RedPwm.Inverted = GreenPwm.Inverted = BluePwm.Inverted - = (Common == CommonType.CommonAnode); + RedPwm.Inverted = GreenPwm.Inverted = BluePwm.Inverted = Common == CommonType.CommonAnode; - RedPwm.Start(); GreenPwm.Start(); BluePwm.Start(); + RedPwm.Start(); + GreenPwm.Start(); + BluePwm.Start(); } /// - /// Sets the current color of the LED. + /// Sets the current color of the LED /// - /// - /// + /// The LED color + /// The LED brightness public void SetColor(Color color, float brightness = 1) { if (color == Color && brightness == Brightness) { return; } - if (color != Color) - { - ColorChanged?.Invoke(this, EventArgs.Empty); - } Color = color; Brightness = brightness; diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index bd2e312a1c..9659279ad6 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -1,6 +1,6 @@ using System; -using System.Collections.Generic; using System.Threading; +using System.Threading.Tasks; namespace Meadow.Foundation.Leds { @@ -9,139 +9,105 @@ namespace Meadow.Foundation.Leds /// public static class RgbPwmLedExtensions { - private static Dictionary _animationThreads = new Dictionary(); - private static object _syncRoot = new object(); + private static object syncRoot = new object(); + + private static Task? animationTask = null; + private static CancellationTokenSource? cancellationTokenSource = null; /// - /// Stops any running animations. + /// Stops any running animations /// - public static void Stop(this RgbPwmLed led) + /// The LED + public static async Task Stop(this RgbPwmLed led) { - var exists = _animationThreads.ContainsKey(led); - if (exists) + if (animationTask != null) { - Thread thread; - - lock (_animationThreads) - { - thread = _animationThreads[led]; - _animationThreads.Remove(led); - } - // we need to wait for any currently running animation to complete - thread.Join(); + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; } - - led.IsOn = false; } /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness + /// On an interval of 1 second (500ms on, 500ms off) /// - /// - /// - /// - /// - public static void StartBlink(this RgbPwmLed led, Color color, float highBrightness = 1f, float lowBrightness = 0f) + /// The LED + /// The LED color + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static Task StartBlink(this RgbPwmLed led, Color color, + float highBrightness = 1f, float lowBrightness = 0f) { - led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + return led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); } /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// - /// - /// - /// - /// - /// - /// - public static void StartBlink(this RgbPwmLed led, Color color, TimeSpan onDuration, TimeSpan offDuration, float highBrightness = 1f, float lowBrightness = 0f) + /// The LED + /// The LED color + /// The duration the LED stays on + /// The duration the LED stays off + /// The maximum brightness of the animation + /// The minimum brightness of the animation + + public static async Task StartBlink(this RgbPwmLed led, Color color, + TimeSpan onDuration, TimeSpan offDuration, + float highBrightness = 1f, float lowBrightness = 0f) { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } + ValidateBrightness(highBrightness, lowBrightness); - lock (_syncRoot) - { - led.Stop(); + await Stop(led); + lock (syncRoot) + { var animationTask = new Thread((s) => { while (true) { led.SetColor(color, highBrightness); Thread.Sleep(onDuration); - lock (_animationThreads) - { - if (!_animationThreads.ContainsKey(led)) break; - } led.SetColor(color, lowBrightness); Thread.Sleep(offDuration); - lock (_animationThreads) - { - if (!_animationThreads.ContainsKey(led)) break; - } } }); - lock (_animationThreads) - { - _animationThreads.Add(led, animationTask); - } - animationTask.Start(); } } /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting + /// with a cycle time of 600ms /// - /// - /// - /// - /// - public static void StartPulse(this RgbPwmLed led, Color color, float highBrightness = 1, float lowBrightness = 0.15F) + /// The LED + /// The LED color + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static Task StartPulse(this RgbPwmLed led, Color color, float highBrightness = 1, float lowBrightness = 0.15F) { - led.StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + return led.StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); } /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// - /// - /// - /// - /// - /// - public static void StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + /// The LED + /// The LED color + /// The pulse animation duration + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } + ValidateBrightness(highBrightness, lowBrightness); - lock (_syncRoot) - { - led.Stop(); + await Stop(led); + lock (syncRoot) + { var animationTask = new Thread((s) => { float brightness = lowBrightness; @@ -176,29 +142,26 @@ public static void StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDur led.SetColor(color, brightness); Thread.Sleep(intervalTime); - - lock (_animationThreads) - { - if (!_animationThreads.ContainsKey(led)) break; - } } }); - lock (_animationThreads) - { - _animationThreads.Add(led, animationTask); - } - animationTask.Start(); } } - private static void OnLedColorChange(object sender, EventArgs e) + private static void ValidateBrightness(float highBrightness, float lowBrightness) { - if (sender is RgbPwmLed { } led) + if (highBrightness > 1 || highBrightness <= 0) { - led.Stop(); - led.ColorChanged -= OnLedColorChange; + throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); + } + if (lowBrightness >= 1 || lowBrightness < 0) + { + throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); + } + if (lowBrightness >= highBrightness) + { + throw new Exception("offBrightness must be less than onBrightness"); } } } From ceb18079b9d3ca78ac7631f37237bc8d23fbb4ff Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 12:06:49 -0700 Subject: [PATCH 110/141] Rename RgbPwmLed Stop to StopAnimation --- .../Leds.RgbPwmLed_Sample/MeadowApp.cs | 18 +++++++++--------- .../Leds/RgbPwmLedExtensions.cs | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs index fa3e6c945e..f22d987a93 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs @@ -77,7 +77,7 @@ public override Task Run() Resolver.Log.Info($"Red brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); for (int i = 0; i < 10; i++) { @@ -85,7 +85,7 @@ public override Task Run() Resolver.Log.Info($"Green brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); for (int i = 0; i < 10; i++) { @@ -93,39 +93,39 @@ public override Task Run() Resolver.Log.Info($"Blue brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); // Blink rgbPwmLed.StartBlink(Color.Red, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); Resolver.Log.Info("Blinking Red"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); rgbPwmLed.StartBlink(Color.Green, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); Resolver.Log.Info("Blinking Green"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); rgbPwmLed.StartBlink(Color.Blue, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); Resolver.Log.Info("Blinking Blue"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); // Pulse rgbPwmLed.StartPulse(Color.Red); Resolver.Log.Info("Pulsing Red"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); rgbPwmLed.StartPulse(Color.Green); Resolver.Log.Info("Pulsing Green"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); rgbPwmLed.StartPulse(Color.Blue); Resolver.Log.Info("Pulsing Blue"); Thread.Sleep(3000); - rgbPwmLed.Stop(); + rgbPwmLed.StopAnimation(); } } } diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index 9659279ad6..46f2e96285 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -15,10 +15,10 @@ public static class RgbPwmLedExtensions private static CancellationTokenSource? cancellationTokenSource = null; /// - /// Stops any running animations + /// Stops the current LED animation /// /// The LED - public static async Task Stop(this RgbPwmLed led) + public static async Task StopAnimation(this RgbPwmLed led) { if (animationTask != null) { @@ -59,7 +59,7 @@ public static async Task StartBlink(this RgbPwmLed led, Color color, { ValidateBrightness(highBrightness, lowBrightness); - await Stop(led); + await StopAnimation(led); lock (syncRoot) { @@ -104,7 +104,7 @@ public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pu { ValidateBrightness(highBrightness, lowBrightness); - await Stop(led); + await StopAnimation(led); lock (syncRoot) { From f5f46529a296e0209774a95ec70776d4cc6c496d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 12:57:10 -0700 Subject: [PATCH 111/141] Only call SetAddressWindow if the update window changes --- .../Displays.TftSpi/Driver/TftSpiBase.cs | 68 ++++++++++++++----- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index d9b6046ebb..83df3caa7a 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -13,7 +13,7 @@ public abstract partial class TftSpiBase : IGraphicsDisplay, ISpiPeripheral /// Temporary buffer that can be used to batch set address window buffer commands /// protected byte[] SetAddressBuffer { get; } = new byte[4]; - + //these displays typically support 16 & 18 bit, some also include 8, 9, 12 and/or 24 bit color /// @@ -134,6 +134,30 @@ public SpiClockConfiguration.Mode SpiBusMode /// protected int nativeWidth; + /// + /// Previous x0 value passed to SetAddressWindow + /// Used for optimization to avoid unnecessary SPI commands + /// + protected int setAddressLastX0 = -1; + + /// + /// Previous x1 value passed to SetAddressWindow + /// Used for optimization to avoid unnecessary SPI commands + /// + protected int setAddressLastX1 = -1; + + /// + /// Previous y0 value passed to SetAddressWindow + /// Used for optimization to avoid unnecessary SPI commands + /// + protected int setAddressLastY0 = -1; + + /// + /// Previous y1 value passed to SetAddressWindow + /// Used for optimization to avoid unnecessary SPI commands + /// + protected int setAddressLastY1 = -1; + /// /// Represents an abstract TftSpiBase object /// @@ -231,22 +255,30 @@ protected void CreateBuffer(ColorMode colorMode, int width, int height) /// Y end in pixels protected virtual void SetAddressWindow(int x0, int y0, int x1, int y1) { - SendCommand(LcdCommand.CASET); // column addr set - dataCommandPort.State = Data; - SetAddressBuffer[0] = (byte)(x0 >> 8); - SetAddressBuffer[1] = (byte)(x0 & 0xff); // XSTART - SetAddressBuffer[2] = (byte)(x1 >> 8); - SetAddressBuffer[3] = (byte)(x1 & 0xff); // XEND - Write(SetAddressBuffer); - - SendCommand(LcdCommand.RASET); // row addr set - dataCommandPort.State = Data; - SetAddressBuffer[0] = (byte)(y0 >> 8); - SetAddressBuffer[0] = (byte)(y0 & 0xff); // XEND - SetAddressBuffer[0] = (byte)(y1 >> 8); - SetAddressBuffer[0] = (byte)(y1 & 0xff); // YEND - - SendCommand(LcdCommand.RAMWR); // write to RAM + if (x0 != setAddressLastX0 || x1 != setAddressLastX1 || y0 != setAddressLastY0 || y1 != setAddressLastY1) + { + setAddressLastX0 = x0; + setAddressLastX1 = x1; + setAddressLastY0 = y0; + setAddressLastY1 = y1; + + SendCommand(LcdCommand.CASET); // column addr set + dataCommandPort.State = Data; + SetAddressBuffer[0] = (byte)(x0 >> 8); + SetAddressBuffer[1] = (byte)(x0 & 0xff); // XSTART + SetAddressBuffer[2] = (byte)(x1 >> 8); + SetAddressBuffer[3] = (byte)(x1 & 0xff); // XEND + Write(SetAddressBuffer); + + SendCommand(LcdCommand.RASET); // row addr set + dataCommandPort.State = Data; + SetAddressBuffer[0] = (byte)(y0 >> 8); + SetAddressBuffer[0] = (byte)(y0 & 0xff); // XEND + SetAddressBuffer[0] = (byte)(y1 >> 8); + SetAddressBuffer[0] = (byte)(y1 & 0xff); // YEND + + SendCommand(LcdCommand.RAMWR); // write to RAM + } } /// @@ -447,7 +479,7 @@ protected void SendCommand(byte command) dataCommandPort.State = Command; Write(command); } - + /// /// Send a single byte to the display (convenience method) /// From c2c13605b757ec5e477f4f4ed503f1e3b27f66af Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 13:09:42 -0700 Subject: [PATCH 112/141] Update logic in SetAddressWindow --- .../Displays.TftSpi/Driver/TftSpiBase.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index 83df3caa7a..ba35347856 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -273,9 +273,10 @@ protected virtual void SetAddressWindow(int x0, int y0, int x1, int y1) SendCommand(LcdCommand.RASET); // row addr set dataCommandPort.State = Data; SetAddressBuffer[0] = (byte)(y0 >> 8); - SetAddressBuffer[0] = (byte)(y0 & 0xff); // XEND - SetAddressBuffer[0] = (byte)(y1 >> 8); - SetAddressBuffer[0] = (byte)(y1 & 0xff); // YEND + SetAddressBuffer[1] = (byte)(y0 & 0xff); // XEND + SetAddressBuffer[2] = (byte)(y1 >> 8); + SetAddressBuffer[3] = (byte)(y1 & 0xff); // YEND + Write(SetAddressBuffer); SendCommand(LcdCommand.RAMWR); // write to RAM } From a626664efed41a27154c78e6bf85fff080bdfd0c Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:20:34 -0700 Subject: [PATCH 113/141] Add set brightness method to RgbPwmLed --- Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 8d8b16f6ef..54ae30afbb 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -245,6 +245,19 @@ protected void ResetPwmPorts() BluePwm.Start(); } + /// + /// Set the led brightness + /// + /// The LED brightness + public void SetBrightness(float brightness) + { + if (brightness < 0 || brightness > 1) + { + throw new ArgumentOutOfRangeException(nameof(brightness), "error, brightness must be between 0, and 1"); + } + SetColor(Color, brightness); + } + /// /// Sets the current color of the LED /// From 1cc4dceb8e082bad85fd8fbb8064a030d2624d96 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:21:01 -0700 Subject: [PATCH 114/141] Fix logic and add overloads to RgbPwmLedExtensions --- .../Leds/RgbPwmLedExtensions.cs | 88 ++++++++++++++++--- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index 46f2e96285..963fe2dc1c 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -43,6 +43,19 @@ public static Task StartBlink(this RgbPwmLed led, Color color, return led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); } + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness + /// On an interval of 1 second (500ms on, 500ms off) + /// + /// The LED + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static Task StartBlink(this RgbPwmLed led, + float highBrightness = 1f, float lowBrightness = 0f) + { + return led.StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + } + /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// @@ -61,19 +74,43 @@ public static async Task StartBlink(this RgbPwmLed led, Color color, await StopAnimation(led); + led.SetColor(color); + + await StartBlink(led, onDuration, offDuration, highBrightness, lowBrightness); + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. + /// + /// The LED + /// The duration the LED stays on + /// The duration the LED stays off + /// The maximum brightness of the animation + /// The minimum brightness of the animation + + public static async Task StartBlink(this RgbPwmLed led, + TimeSpan onDuration, TimeSpan offDuration, + float highBrightness = 1f, float lowBrightness = 0f) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(led); + lock (syncRoot) { - var animationTask = new Thread((s) => + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => { - while (true) + while (cancellationTokenSource.Token.IsCancellationRequested == false) { - led.SetColor(color, highBrightness); + led.SetBrightness(highBrightness); Thread.Sleep(onDuration); - led.SetColor(color, lowBrightness); + led.SetBrightness(lowBrightness); Thread.Sleep(offDuration); } - }); + }, TaskCreationOptions.LongRunning); animationTask.Start(); } @@ -92,6 +129,18 @@ public static Task StartPulse(this RgbPwmLed led, Color color, float highBrightn return led.StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); } + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting + /// with a cycle time of 600ms + /// + /// The LED + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static Task StartPulse(this RgbPwmLed led, float highBrightness = 1, float lowBrightness = 0.15F) + { + return led.StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + } + /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// @@ -106,9 +155,29 @@ public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pu await StopAnimation(led); + led.SetColor(color); + + await StartPulse(led, pulseDuration, highBrightness, lowBrightness); + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. + /// + /// The LED + /// The pulse animation duration + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(led); + lock (syncRoot) { - var animationTask = new Thread((s) => + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => { float brightness = lowBrightness; bool ascending = true; @@ -116,7 +185,7 @@ public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pu float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); float delta = (highBrightness - lowBrightness) / steps; - while (true) + while (cancellationTokenSource.Token.IsCancellationRequested == false) { if (brightness <= lowBrightness) { @@ -138,12 +207,11 @@ public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pu brightness = highBrightness; } - Resolver.Log.Info($"Brightness: {brightness}"); - led.SetColor(color, brightness); + led.SetBrightness(brightness); Thread.Sleep(intervalTime); } - }); + }, TaskCreationOptions.LongRunning); animationTask.Start(); } From a232a589a14e42d86b86bf2c74d6946e10e9e98b Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:21:16 -0700 Subject: [PATCH 115/141] Minor cleanup in PwmLed sample --- .../Leds.PwmLed_Onboard_Sample/MeadowApp.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs index 4db48f0ac5..358870c6d4 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs @@ -21,7 +21,7 @@ public override Task Initialize() redPwmLed = new PwmLed(Device.Pins.OnboardLedRed, TypicalForwardVoltage.ResistorLimited, CircuitTerminationType.High); greenPwmLed = new PwmLed(Device.Pins.OnboardLedGreen, TypicalForwardVoltage.ResistorLimited, CircuitTerminationType.High); bluePwmLed = new PwmLed(Device.Pins.OnboardLedBlue, TypicalForwardVoltage.ResistorLimited, CircuitTerminationType.High); - + return Task.CompletedTask; } @@ -29,10 +29,11 @@ public override Task Run() { return PulseLeds(); } - + public async Task BrightnessTest(int loopCount) { - for (int i = 0; i < loopCount; i++) { + for (int i = 0; i < loopCount; i++) + { Resolver.Log.Info("Blue On @ 1.0"); bluePwmLed.Brightness = 1; await Task.Delay(1000); @@ -54,7 +55,7 @@ public async Task BrightnessTest(int loopCount) public async Task PulseLeds() { - while (true) + while (true) { Resolver.Log.Info("Pulse Red."); redPwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.05f); From 67028d987ea1f34cb66eb7e33d2801b0be571d0d Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:26:39 -0700 Subject: [PATCH 116/141] Pass in cancellation token to animation tasks --- Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index 963fe2dc1c..fca6f02711 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -110,7 +110,7 @@ public static async Task StartBlink(this RgbPwmLed led, led.SetBrightness(lowBrightness); Thread.Sleep(offDuration); } - }, TaskCreationOptions.LongRunning); + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); animationTask.Start(); } @@ -211,7 +211,7 @@ public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, Thread.Sleep(intervalTime); } - }, TaskCreationOptions.LongRunning); + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); animationTask.Start(); } From 2fff3866678b76f1d2ffd66df5fd4bf2737cc384 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:28:23 -0700 Subject: [PATCH 117/141] Minor sample cleanup --- .../Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs index 102597f7cd..50488601cc 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs @@ -3,7 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Leds; using Meadow.Peripherals.Leds; -using System; using System.Threading; using System.Threading.Tasks; @@ -18,7 +17,7 @@ public class MeadowApp : App public override Task Initialize() { Resolver.Log.Info("Creating peripherals..."); - + onboardLed = new RgbPwmLed( Device.Pins.OnboardLedRed, Device.Pins.OnboardLedGreen, @@ -48,17 +47,18 @@ public void TestColors() public void RunColors() { - while (true) { - + while (true) + { // loop through the entire hue spectrum (360 degrees) - for (int i = 0; i < 360; i++) { - var hue = ((double)i / 360F); + for (int i = 0; i < 360; i++) + { + var hue = (double)i / 360F; Resolver.Log.Info($"Hue: {hue}"); // set the color of the RGB - onboardLed.SetColor(Color.FromHsba((hue), 1, 1)); + onboardLed.SetColor(Color.FromHsba(hue, 1, 1)); - Thread.Sleep(18); + Thread.Sleep(20); } } } From 4312a426817f95abae24ed325bbc80811f038bbc Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 17:35:26 -0700 Subject: [PATCH 118/141] Minor cleanup --- Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index fca6f02711..a3b34b559d 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -181,7 +181,7 @@ public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, { float brightness = lowBrightness; bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + var intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); float delta = (highBrightness - lowBrightness) / steps; From 0d925f55d5d573c4701c9eb2f06b7eaa741773ba Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Mon, 1 May 2023 20:46:30 -0700 Subject: [PATCH 119/141] Remove unneeded SetAddressWindow call and reduce startup delay --- .../Displays.TftSpi/Driver/Drivers/St7789.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs index 3586a170eb..938e4a2d41 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7789.cs @@ -133,9 +133,7 @@ protected override void Initialize() SendCommand(Register.NORON); //normal display DelayMs(10); SendCommand(Register.DISPON); //display on - DelayMs(500); - - SetAddressWindow(0, 0, Width - 1, Height - 1); + DelayMs(120); dataCommandPort.State = Data; } @@ -154,7 +152,7 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) x1 += xOffset; y1 += yOffset; - + base.SetAddressWindow(x0, y0, x1, y1); } From f1aa68bc92161407827cb1ad45ed88addc76805f Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 00:58:58 -0700 Subject: [PATCH 120/141] Update on RgbLed --- .../MeadowApp.cs | 50 +++-- Source/Meadow.Foundation.Core/Leds/RgbLed.cs | 186 ++++++------------ .../Leds/RgbLedExtensions.cs | 100 ++++++++++ .../Leds/RgbPwmLedExtensions.cs | 2 +- 4 files changed, 183 insertions(+), 155 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs index 50488601cc..b44f20e9cf 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs @@ -1,8 +1,8 @@ using Meadow; using Meadow.Devices; -using Meadow.Foundation; using Meadow.Foundation.Leds; using Meadow.Peripherals.Leds; +using System; using System.Threading; using System.Threading.Tasks; @@ -12,17 +12,16 @@ public class MeadowApp : App { // - RgbPwmLed onboardLed; + RgbLed onboardLed; public override Task Initialize() { Resolver.Log.Info("Creating peripherals..."); - onboardLed = new RgbPwmLed( + onboardLed = new RgbLed( Device.Pins.OnboardLedRed, Device.Pins.OnboardLedGreen, - Device.Pins.OnboardLedBlue, - commonType: CommonType.CommonAnode); + Device.Pins.OnboardLedBlue); return Task.CompletedTask; } @@ -31,35 +30,34 @@ public override Task Run() { TestColors(); - RunColors(); - return Task.CompletedTask; } - public void TestColors() - { - onboardLed.SetColor(Color.Crimson); - Thread.Sleep(3000); - onboardLed.SetColor(Color.MediumPurple); - Thread.Sleep(3000); - onboardLed.SetColor(Color.FromHex("#23abe3")); - } - - public void RunColors() + public async Task TestColors() { while (true) { - // loop through the entire hue spectrum (360 degrees) - for (int i = 0; i < 360; i++) - { - var hue = (double)i / 360F; - Resolver.Log.Info($"Hue: {hue}"); + Console.WriteLine("SetColor(RgbLedColors.Red);"); + onboardLed.SetColor(RgbLedColors.Red); + Thread.Sleep(3000); + + Console.WriteLine("StartBlink();"); + await onboardLed.StartBlink(); + Thread.Sleep(3000); + + Console.WriteLine("StartBlink(RgbLedColors.Green);"); + await onboardLed.StartBlink(RgbLedColors.Green); + Thread.Sleep(3000); + + Console.WriteLine("SetColor(RgbLedColors.Yellow);"); + onboardLed.SetColor(RgbLedColors.Yellow); + Thread.Sleep(3000); - // set the color of the RGB - onboardLed.SetColor(Color.FromHsba(hue, 1, 1)); + Console.WriteLine("StartBlink(RgbLedColors.Cyan, 200, 200);"); + await onboardLed.StartBlink(RgbLedColors.Cyan, TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200)); + Thread.Sleep(3000); - Thread.Sleep(20); - } + await onboardLed.StopAnimation(); } } diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs index a173b2e6d1..e372866741 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs @@ -1,8 +1,5 @@ using Meadow.Hardware; using Meadow.Peripherals.Leds; -using System; -using System.Threading; -using System.Threading.Tasks; namespace Meadow.Foundation.Leds { @@ -11,31 +8,28 @@ namespace Meadow.Foundation.Leds /// public partial class RgbLed : IRgbLed { - private Task? animationTask; - private CancellationTokenSource? cancellationTokenSource; - /// - /// Get the color the LED has been set to. + /// The current LED color /// public RgbLedColors Color { get; protected set; } = RgbLedColors.White; /// - /// Get the red LED port + /// The red LED port /// protected IDigitalOutputPort RedPort { get; set; } /// - /// Get the green LED port + /// The green LED port /// protected IDigitalOutputPort GreenPort { get; set; } /// - /// Get the blue LED port + ///The blue LED port /// protected IDigitalOutputPort BluePort { get; set; } /// - /// Is the LED using a common cathode + /// The common type (common annode or common cathode) /// public CommonType Common { get; protected set; } @@ -47,14 +41,63 @@ public bool IsOn get => isOn; set { - SetColor(value ? Color : RgbLedColors.Black); + bool onState = (Common == CommonType.CommonCathode); + + if (value) + { + switch (Color) + { + case RgbLedColors.Red: + RedPort.State = onState; + GreenPort.State = !onState; + BluePort.State = !onState; + break; + case RgbLedColors.Green: + RedPort.State = !onState; + GreenPort.State = onState; + BluePort.State = !onState; + break; + case RgbLedColors.Blue: + RedPort.State = !onState; + GreenPort.State = !onState; + BluePort.State = onState; + break; + case RgbLedColors.Yellow: + RedPort.State = onState; + GreenPort.State = onState; + BluePort.State = !onState; + break; + case RgbLedColors.Magenta: + RedPort.State = onState; + GreenPort.State = !onState; + BluePort.State = onState; + break; + case RgbLedColors.Cyan: + RedPort.State = !onState; + GreenPort.State = onState; + BluePort.State = onState; + break; + case RgbLedColors.White: + RedPort.State = onState; + GreenPort.State = onState; + BluePort.State = onState; + break; + } + } + else + { + RedPort.State = !onState; + GreenPort.State = !onState; + BluePort.State = !onState; + } + isOn = value; } } bool isOn; /// - /// Initializes a new instance of the class. + /// Create instance of RgbLed /// /// Red Pin /// Green Pin @@ -73,7 +116,7 @@ public RgbLed( { } /// - /// Initializes a new instance of the class. + /// Create instance of RgbLed /// /// Red Port /// Green Port @@ -91,15 +134,6 @@ public RgbLed( Common = commonType; } - /// - /// Stops any running animations. - /// - public void Stop() - { - cancellationTokenSource?.Cancel(); - IsOn = false; - } - /// /// Sets the current color of the LED. /// @@ -108,111 +142,7 @@ public void SetColor(RgbLedColors color) { Color = color; - bool onState = (Common == CommonType.CommonCathode); - - switch (color) - { - case RgbLedColors.Red: - RedPort.State = onState; - GreenPort.State = !onState; - BluePort.State = !onState; - break; - case RgbLedColors.Green: - RedPort.State = !onState; - GreenPort.State = onState; - BluePort.State = !onState; - break; - case RgbLedColors.Blue: - RedPort.State = !onState; - GreenPort.State = !onState; - BluePort.State = onState; - break; - case RgbLedColors.Yellow: - RedPort.State = onState; - GreenPort.State = onState; - BluePort.State = !onState; - break; - case RgbLedColors.Magenta: - RedPort.State = onState; - GreenPort.State = !onState; - BluePort.State = onState; - break; - case RgbLedColors.Cyan: - RedPort.State = !onState; - GreenPort.State = onState; - BluePort.State = onState; - break; - case RgbLedColors.White: - RedPort.State = onState; - GreenPort.State = onState; - BluePort.State = onState; - break; - case RgbLedColors.Black: - RedPort.State = !onState; - GreenPort.State = !onState; - BluePort.State = !onState; - break; - } - } - - /// - /// Starts the blink animation LED turning it on (500) and off (500) - /// - /// - public void StartBlink(RgbLedColors color) - { - var onDuration = TimeSpan.FromMilliseconds(500); - var offDuration = TimeSpan.FromMilliseconds(500); - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(color, onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Starts the blink animation with the specified on and off duration. - /// - /// - /// - /// - public void StartBlink(RgbLedColors color, TimeSpan onDuration, TimeSpan offDuration) - { - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(color, onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Turn the LED on and off (blink) - /// - /// - /// - /// - /// - protected async Task StartBlinkAsync(RgbLedColors color, TimeSpan onDuration, TimeSpan offDuration, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - SetColor(color); - await Task.Delay(onDuration); - SetColor(RgbLedColors.Black); - await Task.Delay(offDuration); - } + IsOn = true; } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs new file mode 100644 index 0000000000..7e396bb9a3 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs @@ -0,0 +1,100 @@ +using Meadow.Peripherals.Leds; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + /// + /// Utility functions to provide blinking and pulsing for RgbLed + /// + public static class RgbLedExtensions + { + private static object syncRoot = new object(); + + private static Task? animationTask = null; + private static CancellationTokenSource? cancellationTokenSource = null; + + /// + /// Stops the current LED animation + /// + /// The LED + public static async Task StopAnimation(this RgbLed led) + { + if (animationTask != null) + { + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; + } + } + + /// + /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) + /// + /// The LED + public static Task StartBlink(this RgbLed led) + { + return led.StartBlink(led.Color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) + /// + /// The LED + /// The LED color + public static Task StartBlink(this RgbLed led, RgbLedColors color) + { + return led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + /// Start the Blink animation which sets turns the LED on and off with the especified durations and color + /// + /// The LED + /// The LED color + /// The duration the LED stays on + /// The duration the LED stays off + public static async Task StartBlink(this RgbLed led, RgbLedColors color, + TimeSpan onDuration, TimeSpan offDuration) + { + await StopAnimation(led); + + led.SetColor(color); + + await StartBlink(led, onDuration, offDuration); + } + + /// + /// Start the Blink animation which sets turns the LED on and off with the especified durations and current color + /// + /// The LED + /// The duration the LED stays on + /// The duration the LED stays off + public static async Task StartBlink(this RgbLed led, + TimeSpan onDuration, TimeSpan offDuration) + { + await StopAnimation(led); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + led.IsOn = true; + Thread.Sleep(onDuration); + + led.IsOn = false; + Thread.Sleep(offDuration); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + } +} diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs index a3b34b559d..d5189741c4 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs @@ -5,7 +5,7 @@ namespace Meadow.Foundation.Leds { /// - /// Utility functions to provide blinking and pulsing for RgbPwmLeds + /// Utility functions to provide blinking and pulsing for RgbPwmLed /// public static class RgbPwmLedExtensions { From 54b3e98b0c5b9cd38d3ba026f4f65c0a071e9124 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 09:49:00 -0700 Subject: [PATCH 121/141] Minor cleanup (Add RgbLedColors enum) --- .../Meadow.Foundation.Core/Leds/RgbColors.cs | 45 ++++++++ Source/Meadow.Foundation.Core/Leds/RgbLed.cs | 109 ++++++++++-------- 2 files changed, 104 insertions(+), 50 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/RgbColors.cs diff --git a/Source/Meadow.Foundation.Core/Leds/RgbColors.cs b/Source/Meadow.Foundation.Core/Leds/RgbColors.cs new file mode 100644 index 0000000000..78fee0c2d7 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/RgbColors.cs @@ -0,0 +1,45 @@ +namespace Meadow.Foundation.Leds +{ + /// + /// Colors for RGB Led + /// + public enum RgbLedColors + { + /// + /// Red (red LED only) + /// + Red, + /// + /// Green (green LED only) + /// + Green, + /// + /// Blue (blue LED only) + /// + Blue, + /// + /// Yellow (red and green LEDs) + /// + Yellow, + /// + /// Magenta (blue and red LEDs) + /// + Magenta, + /// + /// Cyan (blue and green LEDs) + /// + Cyan, + /// + /// White (red, green and blue LEDs) + /// + White, + /// + /// Black (all LEDs off) + /// + Black, + /// + /// Count of colors + /// + count, + } +} diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs index e372866741..7e30755d75 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs @@ -1,5 +1,6 @@ using Meadow.Hardware; using Meadow.Peripherals.Leds; +using Meadow.Units; namespace Meadow.Foundation.Leds { @@ -41,56 +42,7 @@ public bool IsOn get => isOn; set { - bool onState = (Common == CommonType.CommonCathode); - - if (value) - { - switch (Color) - { - case RgbLedColors.Red: - RedPort.State = onState; - GreenPort.State = !onState; - BluePort.State = !onState; - break; - case RgbLedColors.Green: - RedPort.State = !onState; - GreenPort.State = onState; - BluePort.State = !onState; - break; - case RgbLedColors.Blue: - RedPort.State = !onState; - GreenPort.State = !onState; - BluePort.State = onState; - break; - case RgbLedColors.Yellow: - RedPort.State = onState; - GreenPort.State = onState; - BluePort.State = !onState; - break; - case RgbLedColors.Magenta: - RedPort.State = onState; - GreenPort.State = !onState; - BluePort.State = onState; - break; - case RgbLedColors.Cyan: - RedPort.State = !onState; - GreenPort.State = onState; - BluePort.State = onState; - break; - case RgbLedColors.White: - RedPort.State = onState; - GreenPort.State = onState; - BluePort.State = onState; - break; - } - } - else - { - RedPort.State = !onState; - GreenPort.State = !onState; - BluePort.State = !onState; - } - + UpdateLed(value); isOn = value; } } @@ -144,5 +96,62 @@ public void SetColor(RgbLedColors color) IsOn = true; } + + /// + /// Turns on LED with current color or LED off + /// + /// Is the LED on + protected void UpdateLed(bool isOn) + { + bool onState = (Common == CommonType.CommonCathode); + + if (isOn) + { + switch (Color) + { + case RgbLedColors.Red: + RedPort.State = onState; + GreenPort.State = !onState; + BluePort.State = !onState; + break; + case RgbLedColors.Green: + RedPort.State = !onState; + GreenPort.State = onState; + BluePort.State = !onState; + break; + case RgbLedColors.Blue: + RedPort.State = !onState; + GreenPort.State = !onState; + BluePort.State = onState; + break; + case RgbLedColors.Yellow: + RedPort.State = onState; + GreenPort.State = onState; + BluePort.State = !onState; + break; + case RgbLedColors.Magenta: + RedPort.State = onState; + GreenPort.State = !onState; + BluePort.State = onState; + break; + case RgbLedColors.Cyan: + RedPort.State = !onState; + GreenPort.State = onState; + BluePort.State = onState; + break; + case RgbLedColors.White: + RedPort.State = onState; + GreenPort.State = onState; + BluePort.State = onState; + break; + } + } + else + { + RedPort.State = !onState; + GreenPort.State = !onState; + BluePort.State = !onState; + } + } } } \ No newline at end of file From 78d6f4ff962d837e4a4739fcf2bb89354fc2fec9 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 10:35:59 -0700 Subject: [PATCH 122/141] Update Led --- Source/Meadow.Foundation.Core/Leds/Led.cs | 87 ++----------------- .../Leds/LedExtensions.cs | 73 ++++++++++++++++ .../Leds/{RgbColors.cs => RgbLedColors.cs} | 6 +- 3 files changed, 79 insertions(+), 87 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/LedExtensions.cs rename Source/Meadow.Foundation.Core/Leds/{RgbColors.cs => RgbLedColors.cs} (90%) diff --git a/Source/Meadow.Foundation.Core/Leds/Led.cs b/Source/Meadow.Foundation.Core/Leds/Led.cs index 5da6a0d833..9cbe4dc54e 100644 --- a/Source/Meadow.Foundation.Core/Leds/Led.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.cs @@ -1,8 +1,5 @@ using Meadow.Hardware; using Meadow.Peripherals.Leds; -using System; -using System.Threading; -using System.Threading.Tasks; namespace Meadow.Foundation.Leds { @@ -11,19 +8,14 @@ namespace Meadow.Foundation.Leds /// public class Led : ILed { - private Task? animationTask; - private CancellationTokenSource? cancellationTokenSource; - /// /// Gets the port that is driving the LED /// - /// The port protected IDigitalOutputPort Port { get; set; } /// - /// Gets or sets a value indicating whether this is on. + /// Turns on LED with current color or turns it off /// - /// true if is on; otherwise, false. public bool IsOn { get => isOn; @@ -36,89 +28,20 @@ public bool IsOn bool isOn; /// - /// Creates a LED through a pin directly from the Digital IO of the board + /// Create instance of Led /// - /// + /// The Output Pin public Led(IPin pin) : this(pin.CreateDigitalOutputPort(false)) { } /// - /// Creates a LED through a DigitalOutPutPort from an IO Expander + /// Create instance of Led /// - /// + /// The Output Port public Led(IDigitalOutputPort port) { Port = port; } - - /// - /// Stops the LED when its blinking and/or turns it off. - /// - public void Stop() - { - cancellationTokenSource?.Cancel(); - IsOn = false; - } - - /// - /// Blink animation that turns the LED on (500ms) and off (500ms) - /// - public void StartBlink() - { - var onDuration = TimeSpan.FromMilliseconds(500); - var offDuration = TimeSpan.FromMilliseconds(500); - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Blink animation that turns the LED on and off based on the OnDuration and offDuration values in ms - /// - /// - /// - public void StartBlink(TimeSpan onDuration, TimeSpan offDuration) - { - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Set LED to blink - /// - /// on duration in ms - /// off duration in ms - /// cancellation token used to cancel blink - /// - protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - Port.State = true; - await Task.Delay(onDuration); - Port.State = false; - await Task.Delay(offDuration); - } - - Port.State = IsOn; - } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/LedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/LedExtensions.cs new file mode 100644 index 0000000000..9ca113add6 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/LedExtensions.cs @@ -0,0 +1,73 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + /// + /// Utility functions to provide blinking for Led + /// + public static class LedExtensions + { + private static object syncRoot = new object(); + + private static Task? animationTask = null; + private static CancellationTokenSource? cancellationTokenSource = null; + + + /// + /// Stops the current LED animation + /// + /// The LED + public static async Task StopAnimation(this Led led) + { + if (animationTask != null) + { + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; + } + } + + /// + /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) + /// + /// The LED + public static Task StartBlink(this Led led) + { + return led.StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + /// Start the Blink animation which sets turns the LED on and off with the especified durations + /// + /// The LED + /// The duration the LED stays on + /// The duration the LED stays off + public static async Task StartBlink(this Led led, + TimeSpan onDuration, TimeSpan offDuration) + { + await StopAnimation(led); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + led.IsOn = true; + Thread.Sleep(onDuration); + + led.IsOn = false; + Thread.Sleep(offDuration); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/RgbColors.cs b/Source/Meadow.Foundation.Core/Leds/RgbLedColors.cs similarity index 90% rename from Source/Meadow.Foundation.Core/Leds/RgbColors.cs rename to Source/Meadow.Foundation.Core/Leds/RgbLedColors.cs index 78fee0c2d7..fa731d899f 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbColors.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLedColors.cs @@ -34,12 +34,8 @@ public enum RgbLedColors /// White, /// - /// Black (all LEDs off) - /// - Black, - /// /// Count of colors /// count, } -} +} \ No newline at end of file From a11993af7f2c699313aabbd47ee870de2fa241ba Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 12:47:24 -0700 Subject: [PATCH 123/141] Update RgbPwmLed to partial class --- .../MeadowApp.cs | 24 ++-- .../Leds/LedBarGraph.cs | 6 +- ...dExtensions.cs => RgbPwmLed.Extensions.cs} | 104 ++++++++++-------- .../Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 3 +- 4 files changed, 74 insertions(+), 63 deletions(-) rename Source/Meadow.Foundation.Core/Leds/{RgbPwmLedExtensions.cs => RgbPwmLed.Extensions.cs} (71%) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs index b44f20e9cf..07cae64d2d 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs @@ -1,7 +1,7 @@ using Meadow; using Meadow.Devices; +using Meadow.Foundation; using Meadow.Foundation.Leds; -using Meadow.Peripherals.Leds; using System; using System.Threading; using System.Threading.Tasks; @@ -12,13 +12,13 @@ public class MeadowApp : App { // - RgbLed onboardLed; + RgbPwmLed onboardLed; public override Task Initialize() { Resolver.Log.Info("Creating peripherals..."); - onboardLed = new RgbLed( + onboardLed = new RgbPwmLed( Device.Pins.OnboardLedRed, Device.Pins.OnboardLedGreen, Device.Pins.OnboardLedBlue); @@ -28,7 +28,7 @@ public override Task Initialize() public override Task Run() { - TestColors(); + _ = TestColors(); return Task.CompletedTask; } @@ -38,23 +38,23 @@ public async Task TestColors() while (true) { Console.WriteLine("SetColor(RgbLedColors.Red);"); - onboardLed.SetColor(RgbLedColors.Red); + onboardLed.SetColor(Color.Red); Thread.Sleep(3000); - Console.WriteLine("StartBlink();"); - await onboardLed.StartBlink(); + Console.WriteLine("StartPulse();"); + await onboardLed.StartPulse(); Thread.Sleep(3000); - Console.WriteLine("StartBlink(RgbLedColors.Green);"); - await onboardLed.StartBlink(RgbLedColors.Green); + Console.WriteLine("StartPulse(RgbLedColors.Green);"); + await onboardLed.StartPulse(Color.Green); Thread.Sleep(3000); Console.WriteLine("SetColor(RgbLedColors.Yellow);"); - onboardLed.SetColor(RgbLedColors.Yellow); + onboardLed.SetColor(Color.Yellow); Thread.Sleep(3000); - Console.WriteLine("StartBlink(RgbLedColors.Cyan, 200, 200);"); - await onboardLed.StartBlink(RgbLedColors.Cyan, TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200)); + Console.WriteLine("StartPulse(RgbLedColors.Cyan, 200, 200);"); + await onboardLed.StartPulse(Color.Cyan, TimeSpan.FromMilliseconds(400)); Thread.Sleep(3000); await onboardLed.StopAnimation(); diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs index 674c353d69..14921ea752 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs @@ -73,7 +73,7 @@ public void SetLed(int index, bool isOn) throw new ArgumentOutOfRangeException(); } - leds[index].Stop(); + leds[index].StopAnimation(); leds[index].IsOn = isOn; } @@ -222,7 +222,7 @@ public void Stop() foreach (var led in leds) { - led.Stop(); + led.StopAnimation(); } } @@ -236,7 +236,7 @@ public void Stop(int index) throw new ArgumentOutOfRangeException(); } - leds[index].Stop(); + leds[index].StopAnimation(); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs similarity index 71% rename from Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs rename to Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs index d5189741c4..d016aeb97f 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs @@ -7,18 +7,17 @@ namespace Meadow.Foundation.Leds /// /// Utility functions to provide blinking and pulsing for RgbPwmLed /// - public static class RgbPwmLedExtensions + public partial class RgbPwmLed { - private static object syncRoot = new object(); + private object syncRoot = new object(); - private static Task? animationTask = null; - private static CancellationTokenSource? cancellationTokenSource = null; + private Task? animationTask = null; + private CancellationTokenSource? cancellationTokenSource = null; /// /// Stops the current LED animation /// - /// The LED - public static async Task StopAnimation(this RgbPwmLed led) + public async Task StopAnimation() { if (animationTask != null) { @@ -33,68 +32,70 @@ public static async Task StopAnimation(this RgbPwmLed led) /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness /// On an interval of 1 second (500ms on, 500ms off) /// - /// The LED - /// The LED color /// The maximum brightness of the animation /// The minimum brightness of the animation - public static Task StartBlink(this RgbPwmLed led, Color color, - float highBrightness = 1f, float lowBrightness = 0f) + public Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f) { - return led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); } /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness /// On an interval of 1 second (500ms on, 500ms off) /// - /// The LED + /// The LED color /// The maximum brightness of the animation /// The minimum brightness of the animation - public static Task StartBlink(this RgbPwmLed led, - float highBrightness = 1f, float lowBrightness = 0f) + public Task StartBlink( + Color color, + float highBrightness = 1f, + float lowBrightness = 0f) { - return led.StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + return StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); } /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// - /// The LED /// The LED color /// The duration the LED stays on /// The duration the LED stays off /// The maximum brightness of the animation /// The minimum brightness of the animation - public static async Task StartBlink(this RgbPwmLed led, Color color, - TimeSpan onDuration, TimeSpan offDuration, - float highBrightness = 1f, float lowBrightness = 0f) + public async Task StartBlink( + Color color, + TimeSpan onDuration, + TimeSpan offDuration, + float highBrightness = 1f, + float lowBrightness = 0f) { ValidateBrightness(highBrightness, lowBrightness); - await StopAnimation(led); + await StopAnimation(); - led.SetColor(color); + SetColor(color); - await StartBlink(led, onDuration, offDuration, highBrightness, lowBrightness); + await StartBlink(onDuration, offDuration, highBrightness, lowBrightness); } /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// - /// The LED /// The duration the LED stays on /// The duration the LED stays off /// The maximum brightness of the animation /// The minimum brightness of the animation - public static async Task StartBlink(this RgbPwmLed led, - TimeSpan onDuration, TimeSpan offDuration, - float highBrightness = 1f, float lowBrightness = 0f) + public async Task StartBlink( + TimeSpan onDuration, + TimeSpan offDuration, + float highBrightness = 1f, + float lowBrightness = 0f) { ValidateBrightness(highBrightness, lowBrightness); - await StopAnimation(led); + await StopAnimation(); lock (syncRoot) { @@ -104,10 +105,10 @@ public static async Task StartBlink(this RgbPwmLed led, { while (cancellationTokenSource.Token.IsCancellationRequested == false) { - led.SetBrightness(highBrightness); + SetBrightness(highBrightness); Thread.Sleep(onDuration); - led.SetBrightness(lowBrightness); + SetBrightness(lowBrightness); Thread.Sleep(offDuration); } }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); @@ -120,58 +121,64 @@ public static async Task StartBlink(this RgbPwmLed led, /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting /// with a cycle time of 600ms /// - /// The LED - /// The LED color /// The maximum brightness of the animation /// The minimum brightness of the animation - public static Task StartPulse(this RgbPwmLed led, Color color, float highBrightness = 1, float lowBrightness = 0.15F) + public Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) { - return led.StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + return StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); } /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting /// with a cycle time of 600ms /// - /// The LED + /// The LED color /// The maximum brightness of the animation /// The minimum brightness of the animation - public static Task StartPulse(this RgbPwmLed led, float highBrightness = 1, float lowBrightness = 0.15F) + public Task StartPulse( + Color color, + float highBrightness = 1, + float lowBrightness = 0.15F) { - return led.StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + return StartPulse(color, TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); } /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// - /// The LED /// The LED color /// The pulse animation duration /// The maximum brightness of the animation /// The minimum brightness of the animation - public static async Task StartPulse(this RgbPwmLed led, Color color, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + public async Task StartPulse( + Color color, + TimeSpan pulseDuration, + float highBrightness = 1, + float lowBrightness = 0.15F) { ValidateBrightness(highBrightness, lowBrightness); - await StopAnimation(led); + await StopAnimation(); - led.SetColor(color); + SetColor(color); - await StartPulse(led, pulseDuration, highBrightness, lowBrightness); + await StartPulse(pulseDuration, highBrightness, lowBrightness); } /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// - /// The LED /// The pulse animation duration /// The maximum brightness of the animation /// The minimum brightness of the animation - public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + public async Task StartPulse( + TimeSpan pulseDuration, + float highBrightness = 1, + float lowBrightness = 0.15F) { ValidateBrightness(highBrightness, lowBrightness); - await StopAnimation(led); + await StopAnimation(); lock (syncRoot) { @@ -207,7 +214,7 @@ public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, brightness = highBrightness; } - led.SetBrightness(brightness); + SetBrightness(brightness); Thread.Sleep(intervalTime); } @@ -217,7 +224,12 @@ public static async Task StartPulse(this RgbPwmLed led, TimeSpan pulseDuration, } } - private static void ValidateBrightness(float highBrightness, float lowBrightness) + /// + /// Validates LED brightness to ensure they're within the range 0 (off) - 1 (full brighness) + /// + /// + /// + protected void ValidateBrightness(float highBrightness, float lowBrightness) { if (highBrightness > 1 || highBrightness <= 0) { diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 54ae30afbb..573a30d8e9 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -8,7 +8,7 @@ namespace Meadow.Foundation.Leds /// /// Represents a Pulse-Width-Modulation (PWM) controlled RGB LED /// - public class RgbPwmLed + public partial class RgbPwmLed { static readonly Frequency DefaultFrequency = new Frequency(200, Frequency.UnitType.Hertz); @@ -208,7 +208,6 @@ public RgbPwmLed( /// The forward voltage for the red LED /// The forward voltage for the green LED /// The forward voltage for the blue LED - /// protected void ValidateForwardVoltages(Voltage redLedForwardVoltage, Voltage greenLedForwardVoltage, Voltage blueLedForwardVoltage) From 073839d37a22c69ca86549ba6be4add9da8a903d Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 13:02:15 -0700 Subject: [PATCH 124/141] Updates on Led and RgbLed --- .../{LedExtensions.cs => Led.Extensions.cs} | 26 +++++----- Source/Meadow.Foundation.Core/Leds/Led.cs | 2 +- ...bLedExtensions.cs => RgbLed.Extensions.cs} | 47 +++++++++---------- 3 files changed, 33 insertions(+), 42 deletions(-) rename Source/Meadow.Foundation.Core/Leds/{LedExtensions.cs => Led.Extensions.cs} (66%) rename Source/Meadow.Foundation.Core/Leds/{RgbLedExtensions.cs => RgbLed.Extensions.cs} (61%) diff --git a/Source/Meadow.Foundation.Core/Leds/LedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/Led.Extensions.cs similarity index 66% rename from Source/Meadow.Foundation.Core/Leds/LedExtensions.cs rename to Source/Meadow.Foundation.Core/Leds/Led.Extensions.cs index 9ca113add6..4383f184a9 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.Extensions.cs @@ -7,19 +7,18 @@ namespace Meadow.Foundation.Leds /// /// Utility functions to provide blinking for Led /// - public static class LedExtensions + public partial class Led { - private static object syncRoot = new object(); + private object syncRoot = new object(); - private static Task? animationTask = null; - private static CancellationTokenSource? cancellationTokenSource = null; + private Task? animationTask = null; + private CancellationTokenSource? cancellationTokenSource = null; /// /// Stops the current LED animation /// - /// The LED - public static async Task StopAnimation(this Led led) + public async Task StopAnimation() { if (animationTask != null) { @@ -33,22 +32,19 @@ public static async Task StopAnimation(this Led led) /// /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) /// - /// The LED - public static Task StartBlink(this Led led) + public Task StartBlink() { - return led.StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } /// /// Start the Blink animation which sets turns the LED on and off with the especified durations /// - /// The LED /// The duration the LED stays on /// The duration the LED stays off - public static async Task StartBlink(this Led led, - TimeSpan onDuration, TimeSpan offDuration) + public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) { - await StopAnimation(led); + await StopAnimation(); lock (syncRoot) { @@ -58,10 +54,10 @@ public static async Task StartBlink(this Led led, { while (cancellationTokenSource.Token.IsCancellationRequested == false) { - led.IsOn = true; + IsOn = true; Thread.Sleep(onDuration); - led.IsOn = false; + IsOn = false; Thread.Sleep(offDuration); } }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); diff --git a/Source/Meadow.Foundation.Core/Leds/Led.cs b/Source/Meadow.Foundation.Core/Leds/Led.cs index 9cbe4dc54e..e8e0f3c50c 100644 --- a/Source/Meadow.Foundation.Core/Leds/Led.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.cs @@ -6,7 +6,7 @@ namespace Meadow.Foundation.Leds /// /// Represents a simple LED /// - public class Led : ILed + public partial class Led : ILed { /// /// Gets the port that is driving the LED diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.Extensions.cs similarity index 61% rename from Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs rename to Source/Meadow.Foundation.Core/Leds/RgbLed.Extensions.cs index 7e396bb9a3..14bc482610 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbLedExtensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLed.Extensions.cs @@ -1,5 +1,4 @@ -using Meadow.Peripherals.Leds; -using System; +using System; using System.Threading; using System.Threading.Tasks; @@ -8,18 +7,17 @@ namespace Meadow.Foundation.Leds /// /// Utility functions to provide blinking and pulsing for RgbLed /// - public static class RgbLedExtensions + public partial class RgbLed { - private static object syncRoot = new object(); + private object syncRoot = new object(); - private static Task? animationTask = null; - private static CancellationTokenSource? cancellationTokenSource = null; + private Task? animationTask = null; + private CancellationTokenSource? cancellationTokenSource = null; /// /// Stops the current LED animation /// - /// The LED - public static async Task StopAnimation(this RgbLed led) + public async Task StopAnimation() { if (animationTask != null) { @@ -33,49 +31,46 @@ public static async Task StopAnimation(this RgbLed led) /// /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) /// - /// The LED - public static Task StartBlink(this RgbLed led) + public Task StartBlink() { - return led.StartBlink(led.Color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } /// /// Start the Blink animation which sets turns the LED on and off on an interval of 1 second (500ms on, 500ms off) /// - /// The LED /// The LED color - public static Task StartBlink(this RgbLed led, RgbLedColors color) + public Task StartBlink(RgbLedColors color) { - return led.StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + return StartBlink(color, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } /// /// Start the Blink animation which sets turns the LED on and off with the especified durations and color /// - /// The LED /// The LED color /// The duration the LED stays on /// The duration the LED stays off - public static async Task StartBlink(this RgbLed led, RgbLedColors color, - TimeSpan onDuration, TimeSpan offDuration) + public async Task StartBlink( + RgbLedColors color, + TimeSpan onDuration, + TimeSpan offDuration) { - await StopAnimation(led); + await StopAnimation(); - led.SetColor(color); + SetColor(color); - await StartBlink(led, onDuration, offDuration); + await StartBlink(onDuration, offDuration); } /// /// Start the Blink animation which sets turns the LED on and off with the especified durations and current color /// - /// The LED /// The duration the LED stays on /// The duration the LED stays off - public static async Task StartBlink(this RgbLed led, - TimeSpan onDuration, TimeSpan offDuration) + public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) { - await StopAnimation(led); + await StopAnimation(); lock (syncRoot) { @@ -85,10 +80,10 @@ public static async Task StartBlink(this RgbLed led, { while (cancellationTokenSource.Token.IsCancellationRequested == false) { - led.IsOn = true; + IsOn = true; Thread.Sleep(onDuration); - led.IsOn = false; + IsOn = false; Thread.Sleep(offDuration); } }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); From 338e3a2e9adc77f24f9decc5aa7334be15a40976 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 2 May 2023 13:47:24 -0700 Subject: [PATCH 125/141] Pin controller fix, xml comments, minor bank optimization --- .../Drivers/Extras/Mcp23x0x.PinDefinitions.cs | 21 ++++++----- .../Drivers/Extras/Mcp23x1x.PinDefinitions.cs | 35 ++++++++++--------- .../Driver/Mcp23xxx.cs | 2 +- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.PinDefinitions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.PinDefinitions.cs index 5812cda889..8d26e13828 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.PinDefinitions.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x0x.PinDefinitions.cs @@ -11,6 +11,9 @@ public abstract partial class Mcp23x0x /// public class PinDefinitions : IPinDefinitions { + /// + /// The controller for the pins + /// public IPinController Controller { get; set; } /// @@ -19,7 +22,7 @@ public class PinDefinitions : IPinDefinitions public IList AllPins { get; } = new List(); /// - /// GP0 + /// Pin GP0 /// public IPin GP0 => new Pin( Controller, @@ -30,7 +33,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP1 + /// Pin GP1 /// public IPin GP1 => new Pin( Controller, @@ -41,7 +44,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP2 + /// Pin GP2 /// public IPin GP2 => new Pin( Controller, @@ -52,7 +55,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP3 + /// Pin GP3 /// public IPin GP3 => new Pin( Controller, @@ -63,7 +66,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP4 + /// Pin GP4 /// public IPin GP4 => new Pin( Controller, @@ -74,7 +77,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP5 + /// Pin GP5 /// public IPin GP5 => new Pin( Controller, @@ -85,7 +88,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP6 + /// Pin GP6 /// public IPin GP6 => new Pin( Controller, @@ -96,7 +99,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GP7 + /// Pin GP7 /// public IPin GP7 => new Pin( Controller, @@ -111,7 +114,7 @@ public class PinDefinitions : IPinDefinitions /// public PinDefinitions(Mcp23x0x controller) { - controller = controller; + Controller = controller; InitAllPins(); } diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x1x.PinDefinitions.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x1x.PinDefinitions.cs index 8288113e33..95464f6d03 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x1x.PinDefinitions.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Drivers/Extras/Mcp23x1x.PinDefinitions.cs @@ -11,6 +11,9 @@ public abstract partial class Mcp23x1x /// public class PinDefinitions : IPinDefinitions { + /// + /// The controller for the pins + /// public IPinController Controller { get; set; } /// @@ -19,7 +22,7 @@ public class PinDefinitions : IPinDefinitions public IList AllPins { get; } = new List(); /// - /// GPA0 + /// Pin GPA0 /// public IPin GPA0 => new Pin( Controller, @@ -30,7 +33,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA1 + /// Pin GPA1 /// public IPin GPA1 => new Pin( Controller, @@ -41,7 +44,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA2 + /// Pin GPA2 /// public IPin GPA2 => new Pin( Controller, @@ -52,7 +55,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA3 + /// Pin GPA3 /// public IPin GPA3 => new Pin( Controller, @@ -63,7 +66,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA4 + /// Pin GPA4 /// public IPin GPA4 => new Pin( Controller, @@ -74,7 +77,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA5 + /// Pin GPA5 /// public IPin GPA5 => new Pin( Controller, @@ -85,7 +88,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA6 + /// Pin GPA6 /// public IPin GPA6 => new Pin( Controller, @@ -96,7 +99,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPA7 + /// Pin GPA7 /// public IPin GPA7 => new Pin( Controller, @@ -107,7 +110,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB0 + /// Pin GPB0 /// public IPin GPB0 => new Pin( Controller, @@ -118,7 +121,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB1 + /// Pin GPB1 /// public IPin GPB1 => new Pin( Controller, @@ -129,7 +132,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB2 + /// Pin GPB2 /// public IPin GPB2 => new Pin( Controller, @@ -140,7 +143,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB3 + /// Pin GPB3 /// public IPin GPB3 => new Pin( Controller, @@ -151,7 +154,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB4 + /// Pin GPB4 /// public IPin GPB4 => new Pin( Controller, @@ -162,7 +165,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB5 + /// Pin GPB5 /// public IPin GPB5 => new Pin( Controller, @@ -173,7 +176,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB6 + /// Pin GPB6 /// public IPin GPB6 => new Pin( Controller, @@ -184,7 +187,7 @@ public class PinDefinitions : IPinDefinitions ); /// - /// GPB7 + /// Pin GPB7 /// public IPin GPB7 => new Pin( Controller, diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs index 5b44a9b0d6..3fe3365e07 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Mcp23xxx/Driver/Mcp23xxx.cs @@ -561,7 +561,7 @@ byte MapRegister(byte address, PortBank port = PortBank.A, PortBankType bankStyl PortBank GetPortBankForPin(IPin pin) { //hard coded ... verify in Mcp23x1x.PinDefinitions.cs - if (pin.Name.StartsWith("GPB")) + if ((byte)pin.Key >= 8) { return PortBank.B; } From 7ff0a8a07c056f93d871e3d6e5801774b49b4ffa Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Tue, 2 May 2023 17:47:55 -0700 Subject: [PATCH 126/141] Updates on PwmLed --- Source/Meadow.Foundation.Core/Leds/Led.cs | 48 ++- .../Leds/PwmLed.Extensions.cs | 173 ++++++++++ Source/Meadow.Foundation.Core/Leds/PwmLed.cs | 310 +++--------------- .../Leds/PwmLedBarGraph.cs | 22 +- .../Leds/RgbPwmLed.Extensions.cs | 4 +- .../Meadow.Foundation.Core/Leds/RgbPwmLed.cs | 5 +- 6 files changed, 270 insertions(+), 292 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs diff --git a/Source/Meadow.Foundation.Core/Leds/Led.cs b/Source/Meadow.Foundation.Core/Leds/Led.cs index e8e0f3c50c..89a8c161c9 100644 --- a/Source/Meadow.Foundation.Core/Leds/Led.cs +++ b/Source/Meadow.Foundation.Core/Leds/Led.cs @@ -1,17 +1,15 @@ using Meadow.Hardware; using Meadow.Peripherals.Leds; +using System; namespace Meadow.Foundation.Leds { /// /// Represents a simple LED /// - public partial class Led : ILed + public partial class Led : ILed, IDisposable { - /// - /// Gets the port that is driving the LED - /// - protected IDigitalOutputPort Port { get; set; } + readonly bool createdPort = false; /// /// Turns on LED with current color or turns it off @@ -27,13 +25,25 @@ public bool IsOn } bool isOn; + /// + /// Gets the port that is driving the LED + /// + protected IDigitalOutputPort Port { get; set; } + + /// + /// Is the object disposed + /// + public bool IsDisposed { get; private set; } + /// /// Create instance of Led /// /// The Output Pin public Led(IPin pin) : this(pin.CreateDigitalOutputPort(false)) - { } + { + createdPort = true; + } /// /// Create instance of Led @@ -43,5 +53,31 @@ public Led(IDigitalOutputPort port) { Port = port; } + + /// + /// Dispose of the object + /// + public void Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + + /// + /// Dispose of the object + /// + /// Is disposing + protected virtual void Dispose(bool disposing) + { + if (!IsDisposed) + { + if (disposing && createdPort) + { + Port.Dispose(); + } + + IsDisposed = true; + } + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs new file mode 100644 index 0000000000..6b5827dd44 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs @@ -0,0 +1,173 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + public partial class PwmLed + { + private object syncRoot = new object(); + + private Task? animationTask = null; + private CancellationTokenSource? cancellationTokenSource = null; + + /// + /// Stops any running animations. + /// + public async Task StopAnimation() + { + if (animationTask != null) + { + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; + } + } + + /// + /// Start a Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. + /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public async Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(); + + await StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. + /// + /// The duration the LED stays on + /// The duration the LED stays off + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public async Task StartBlink( + TimeSpan onDuration, + TimeSpan offDuration, + float highBrightness = 1f, + float lowBrightness = 0f) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + SetBrightness(highBrightness); + Thread.Sleep(onDuration); + + SetBrightness(lowBrightness); + Thread.Sleep(offDuration); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. + /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public async Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(); + + await StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. + /// + /// The pulse animation duration + /// The maximum brightness of the animation + /// The minimum brightness of the animation + public async Task StartPulse( + TimeSpan pulseDuration, + float highBrightness = 1, + float lowBrightness = 0.15F) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + float brightness = lowBrightness; + bool ascending = true; + var intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); + float delta = (highBrightness - lowBrightness) / steps; + + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + if (brightness <= lowBrightness) + { + ascending = true; + } + else if (brightness >= highBrightness) + { + ascending = false; + } + + brightness += delta * (ascending ? 1 : -1); + + if (brightness < lowBrightness) + { + brightness = lowBrightness; + } + else if (brightness > highBrightness) + { + brightness = highBrightness; + } + + SetBrightness(brightness); + + Thread.Sleep(intervalTime); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + + /// + /// Validates LED brightness to ensure they're within the range 0 (off) - 1 (full brighness) + /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation + protected void ValidateBrightness(float highBrightness, float lowBrightness) + { + if (highBrightness > 1 || highBrightness <= 0) + { + throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); + } + if (lowBrightness >= 1 || lowBrightness < 0) + { + throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); + } + if (lowBrightness >= highBrightness) + { + throw new Exception("offBrightness must be less than onBrightness"); + } + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs index 2395a3e988..95788a08ba 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs @@ -2,8 +2,6 @@ using Meadow.Peripherals.Leds; using Meadow.Units; using System; -using System.Threading; -using System.Threading.Tasks; namespace Meadow.Foundation.Leds { @@ -11,47 +9,24 @@ namespace Meadow.Foundation.Leds /// Represents an LED whose voltage is limited by the duty-cycle of a PWM /// signal. /// - public class PwmLed : IPwmLed, IDisposable + public partial class PwmLed : IPwmLed, IDisposable { - Task? animationTask; - CancellationTokenSource? cancellationTokenSource; readonly bool createdPwm = false; float maximumPwmDuty = 1; - bool inverted; /// - /// Is the object disposed + /// Maximum forward voltage (3.3 Volts) /// - public bool IsDisposed { get; private set; } + public Voltage MAX_FORWARD_VOLTAGE => new Voltage(3.3); /// - /// Gets the brightness of the LED, controlled by a PWM signal, and limited by the - /// calculated maximum voltage. Valid values are from 0 to 1, inclusive. + /// Minimum forward voltage (0 Volts) /// - public float Brightness - { - get => _brightness; - set - { - if (value < 0 || value > 1) - { - throw new ArgumentOutOfRangeException("Brightness must be between 0 and 1, inclusive."); - } - - _brightness = value; - Port.DutyCycle = maximumPwmDuty * Brightness; - - if (!Port.State) - { - Port.Start(); - } - } - } - float _brightness = 0; + public Voltage MIN_FORWARD_VOLTAGE => new Voltage(0); /// - /// Gets or Sets the state of the LED + /// Turns on LED with current color or turns it off /// public bool IsOn { @@ -74,6 +49,16 @@ public bool IsOn /// public Voltage ForwardVoltage { get; protected set; } + /// + /// The brightness value assigned to the LED + /// + public float Brightness { get; protected set; } = 1f; + + /// + /// Is the object disposed + /// + public bool IsDisposed { get; private set; } + /// /// Initializes a new instance PwmLed class /// @@ -86,12 +71,10 @@ public bool IsOn public PwmLed( IPin pin, Voltage forwardVoltage, - CircuitTerminationType terminationType = CircuitTerminationType.CommonGround) + CircuitTerminationType terminationType = CircuitTerminationType.CommonGround) : + this(pin.CreatePwmPort(new Frequency(100, Frequency.UnitType.Hertz)), forwardVoltage, terminationType) { - Port = pin.CreatePwmPort(new Frequency(100, Frequency.UnitType.Hertz)); - createdPwm = true; // signal that we created it, so we should dispose of it - Port.DutyCycle = 0; - Initialize(forwardVoltage, terminationType); + createdPwm = true; } /// @@ -107,60 +90,34 @@ public PwmLed( Voltage forwardVoltage, CircuitTerminationType terminationType = CircuitTerminationType.CommonGround) { - Port = pwmPort; - Initialize(forwardVoltage, terminationType); - } + ValidateForwardVoltages(forwardVoltage); - private void Initialize( - Voltage forwardVoltage, - CircuitTerminationType terminationType = CircuitTerminationType.CommonGround) - { - if (forwardVoltage < new Voltage(0) || forwardVoltage > new Voltage(3.3)) - { - throw new ArgumentOutOfRangeException(nameof(forwardVoltage), "error, forward voltage must be between 0, and 3.3"); - } + Port = pwmPort; ForwardVoltage = forwardVoltage; - inverted = terminationType == CircuitTerminationType.High; - maximumPwmDuty = Helpers.CalculateMaximumDutyCycle(forwardVoltage); - Port.Inverted = inverted; + Port.Inverted = terminationType == CircuitTerminationType.High; Port.Start(); } /// - /// Dispose of the object + /// Validates forward voltages to ensure they're within the range MIN_FORWARD_VOLTAGE to MAX_FORWARD_VOLTAGE /// - /// Is disposing - protected virtual void Dispose(bool disposing) + /// The forward voltage for the LED + protected void ValidateForwardVoltages(Voltage forwardVoltage) { - if (!IsDisposed) + if (forwardVoltage < MIN_FORWARD_VOLTAGE || forwardVoltage > MAX_FORWARD_VOLTAGE) { - if (disposing && createdPwm) - { - Port.Dispose(); - } - - IsDisposed = true; + throw new ArgumentOutOfRangeException(nameof(forwardVoltage), "error, forward voltage must be between 0, and 3.3"); } } - /// - /// Dispose of the object - /// - public void Dispose() - { - Dispose(disposing: true); - GC.SuppressFinalize(this); - } - /// /// Sets the LED to a specific brightness. /// /// Valid values are from 0 to 1, inclusive - [Obsolete("Use Brightness property instead")] public void SetBrightness(float brightness) { if (brightness < 0 || brightness > 1) @@ -168,7 +125,7 @@ public void SetBrightness(float brightness) throw new ArgumentOutOfRangeException(nameof(brightness), "brightness must be between 0 and 1, inclusive."); } - _brightness = brightness; + Brightness = brightness; Port.DutyCycle = maximumPwmDuty * Brightness; @@ -179,218 +136,29 @@ public void SetBrightness(float brightness) } /// - /// Start a Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. - /// - /// - /// - /// - /// - public void StartBlink(float highBrightness = 1f, float lowBrightness = 0f) - { - var onDuration = TimeSpan.FromMilliseconds(500); - var offDuration = TimeSpan.FromMilliseconds(500); - - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(onDuration, offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. - /// - /// - /// - /// - /// - /// - /// - public void StartBlink(TimeSpan onDuration, TimeSpan offDuration, float highBrightness = 1f, float lowBrightness = 0f) - { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("offBrightness must be less than onBrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync((TimeSpan)onDuration, (TimeSpan)offDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start blinking the LED - /// - /// on duration in ms - /// off duration in ms - /// maximum brightness - /// minimum brightness - /// token for cancellation - protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - Brightness = highBrightness; - await Task.Delay(onDuration); - Brightness = lowBrightness; - await Task.Delay(offDuration); - } - - Port.DutyCycle = IsOn ? maximumPwmDuty : 0; - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. - /// - /// - /// - public void StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) - { - var pulseDuration = TimeSpan.FromMilliseconds(600); - - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "highBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("lowBrightness must be less than highbrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. + /// Dispose of the object /// - /// - /// - /// - public void StartPulse(TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + public void Dispose() { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "highBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("lowBrightness must be less than highbrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); + Dispose(disposing: true); + GC.SuppressFinalize(this); } /// - /// Start pulsing the led + /// Dispose of the object /// - /// duration in ms - /// maximum brightness - /// minimum brightness - /// token used to cancel pulse - protected async Task StartPulseAsync(TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) + /// Is disposing + protected virtual void Dispose(bool disposing) { - float brightness = lowBrightness; - bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. - float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); - float delta = (highBrightness - lowBrightness) / steps; - - while (true) + if (!IsDisposed) { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - if (brightness <= lowBrightness) - { - ascending = true; - } - else if (brightness >= highBrightness) - { - ascending = false; - } - - brightness += delta * (ascending ? 1 : -1); - - if (brightness < 0) - { - brightness = 0; - } - else if (brightness > 1) + if (disposing && createdPwm) { - brightness = 1; + Port.Dispose(); } - Brightness = brightness; - - await Task.Delay(intervalTime); + IsDisposed = true; } } - - /// - /// Stops any running animations. - /// - public void Stop() - { - cancellationTokenSource?.Cancel(); - IsOn = false; - } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs index b2c1176792..3824eb285b 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs @@ -145,7 +145,7 @@ public void SetLed(int index, bool isOn) throw new ArgumentOutOfRangeException(); } - pwmLeds[index].Stop(); + pwmLeds[index].StopAnimation(); pwmLeds[index].IsOn = isOn; } @@ -153,13 +153,13 @@ public void SetLed(int index, bool isOn) /// Set the brightness to the LED bar graph using PWM /// /// - public void SetLedBrightness(double brightness) + public void SetLedBrightness(float brightness) { foreach (var led in pwmLeds) { - led.Stop(); + led.StopAnimation(); led.IsOn = false; - led.Brightness = (float)brightness; + led.SetBrightness(brightness); } } @@ -175,9 +175,9 @@ public void SetLedBrightness(int index, float brightness) throw new ArgumentOutOfRangeException(); } - pwmLeds[index].Stop(); + pwmLeds[index].StopAnimation(); pwmLeds[index].IsOn = false; - pwmLeds[index].Brightness = brightness; + pwmLeds[index].SetBrightness(brightness); } /// @@ -273,7 +273,7 @@ protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, foreach (var led in pwmLeds) { - led.Brightness = highBrightness; + led.SetBrightness(highBrightness); } await Task.Delay(onDuration); @@ -284,7 +284,7 @@ protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, foreach (var led in pwmLeds) { - led.Brightness = lowBrightness; + led.SetBrightness(lowBrightness); } await Task.Delay(offDuration); } @@ -420,7 +420,7 @@ protected async Task StartPulseAsync(TimeSpan pulseDuration, float highBrightnes foreach (var led in pwmLeds) { - led.Brightness = Math.Clamp(brightness, 0, 1); + led.SetBrightness(Math.Clamp(brightness, 0, 1)); } await Task.Delay(intervalTime); @@ -436,7 +436,7 @@ public void Stop() foreach (var led in pwmLeds) { - led.Stop(); + led.StopAnimation(); } } @@ -450,7 +450,7 @@ public void Stop(int index) throw new ArgumentOutOfRangeException(); } - pwmLeds[index].Stop(); + pwmLeds[index].StopAnimation(); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs index d016aeb97f..f45cc7cd22 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs @@ -227,8 +227,8 @@ public async Task StartPulse( /// /// Validates LED brightness to ensure they're within the range 0 (off) - 1 (full brighness) /// - /// - /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation protected void ValidateBrightness(float highBrightness, float lowBrightness) { if (highBrightness > 1 || highBrightness <= 0) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs index 573a30d8e9..31dbf78b77 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.cs @@ -247,13 +247,14 @@ protected void ResetPwmPorts() /// /// Set the led brightness /// - /// The LED brightness + /// Valid values are from 0 to 1, inclusive public void SetBrightness(float brightness) { if (brightness < 0 || brightness > 1) { throw new ArgumentOutOfRangeException(nameof(brightness), "error, brightness must be between 0, and 1"); } + SetColor(Color, brightness); } @@ -261,7 +262,7 @@ public void SetBrightness(float brightness) /// Sets the current color of the LED /// /// The LED color - /// The LED brightness + /// Valid values are from 0 to 1, inclusive public void SetColor(Color color, float brightness = 1) { if (color == Color && brightness == Brightness) From afbd00cb8f20af150abc2e5d0ef090aa7c55a3b3 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 00:40:06 -0700 Subject: [PATCH 127/141] Update LedBarGraph --- .../Leds.LedBarGraph_Sample/MeadowApp.cs | 24 +-- .../Leds/LedBarGraph.Extensions.cs | 124 ++++++++++++++ .../Leds/LedBarGraph.cs | 160 +----------------- 3 files changed, 145 insertions(+), 163 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs index 988f075e79..fd67c49694 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs @@ -48,9 +48,9 @@ public override async Task Run() Resolver.Log.Info("Turning them on and off for 200ms using SetLed..."); for (int i = 0; i < ledBarGraph.Count; i++) { - ledBarGraph.SetLed(i, true); + await ledBarGraph.SetLed(i, true); await Task.Delay(100); - ledBarGraph.SetLed(i, false); + await ledBarGraph.SetLed(i, false); } await Task.Delay(1000); @@ -60,7 +60,7 @@ public override async Task Run() { percentage += 0.10f; Resolver.Log.Info($"{percentage}"); - ledBarGraph.Percentage = Math.Min(1.0f, percentage); + await ledBarGraph.SetPercentage(Math.Min(1.0f, percentage)); await Task.Delay(100); } @@ -71,7 +71,7 @@ public override async Task Run() { percentage -= 0.10f; Resolver.Log.Info($"{percentage}"); - ledBarGraph.Percentage = Math.Max(0.0f, percentage); + await ledBarGraph.SetPercentage(Math.Max(0.0f, percentage)); await Task.Delay(100); } @@ -82,8 +82,8 @@ public override async Task Run() { percentage += 0.10f; Resolver.Log.Info($"{percentage}"); - ledBarGraph.Percentage = Math.Min(1.0f, percentage); - ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); + await ledBarGraph.SetPercentage(Math.Min(1.0f, percentage)); + await ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); await Task.Delay(2000); } @@ -94,24 +94,24 @@ public override async Task Run() { percentage -= 0.10f; Resolver.Log.Info($"{percentage}"); - ledBarGraph.Percentage = Math.Max(0.0f, percentage); - ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); + await ledBarGraph.SetPercentage(Math.Max(0.0f, percentage)); + await ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); await Task.Delay(2000); } await Task.Delay(1000); Resolver.Log.Info("Blinking for 5 seconds at 500ms on/off..."); - ledBarGraph.StartBlink(); + await ledBarGraph.StartBlink(); await Task.Delay(5000); - ledBarGraph.Stop(); + ledBarGraph.StopAnimation(); await Task.Delay(1000); Resolver.Log.Info("Blinking for 5 seconds at 200ms on/off..."); - ledBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200)); + await ledBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200)); await Task.Delay(5000); - ledBarGraph.Stop(); + await ledBarGraph.StopAnimation(); await Task.Delay(1000); } diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs new file mode 100644 index 0000000000..855aa6fd03 --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs @@ -0,0 +1,124 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + public partial class LedBarGraph + { + private object syncRoot = new object(); + + private Task? animationTask; + private CancellationTokenSource? cancellationTokenSource; + + /// + /// Stops the LED bar graph when its blinking + /// + public async Task StopAnimation() + { + if (animationTask != null) + { + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; + } + } + + /// + /// Stops the blinking animation on an individual LED + /// + public async Task StopAnimation(int index) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + await leds[index].StopAnimation(); + } + + /// + /// Blink animation that turns the LED bar graph on (500ms) and off (500ms) + /// + public async Task StartBlink() + { + await StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + } + + /// + /// Blink animation that turns the LED bar graph on and off based on the OnDuration and offDuration values + /// + /// On Duration + /// Off Duration + /// + public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) + { + await StopAnimation(); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + foreach (var led in leds) + { + led.IsOn = true; + } + Thread.Sleep(onDuration); + + foreach (var led in leds) + { + led.IsOn = false; + } + Thread.Sleep(offDuration); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + + /// + /// Starts a blink animation on an individual LED on (500ms) and off (500ms) + /// + /// + public Task StartBlink(int index) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return leds[index].StartBlink(); + } + + /// + /// Starts a blink animation on an individual LED + /// + /// + /// + /// + public Task StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return leds[index].StartBlink(onDuration, offDuration); + } + + /// + /// Returns the index of the last LED turned on + /// + /// + public int GetTopLedForPercentage() + { + return (int)Math.Max(0, Percentage * Count - 0.5); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs index 14921ea752..1bba66f5be 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs @@ -1,6 +1,5 @@ using Meadow.Hardware; using System; -using System.Threading; using System.Threading.Tasks; namespace Meadow.Foundation.Leds @@ -8,11 +7,8 @@ namespace Meadow.Foundation.Leds /// /// Represents an LED bar graph composed on multiple LEDs /// - public class LedBarGraph + public partial class LedBarGraph { - private Task? animationTask; - private CancellationTokenSource? cancellationTokenSource; - /// /// Array to hold LED objects for bar /// @@ -26,12 +22,7 @@ public class LedBarGraph /// /// A value between 0 and 1 that controls the number of LEDs that are activated /// - public float Percentage - { - get => percentage; - set => SetPercentage(percentage = value); - } - float percentage; + public float Percentage { get; protected set; } /// /// Create an LedBarGraph instance from an array of IPins @@ -66,14 +57,14 @@ public LedBarGraph(IDigitalOutputPort[] ports) /// /// index of the LED /// - public void SetLed(int index, bool isOn) + public async Task SetLed(int index, bool isOn) { if (index >= Count) { throw new ArgumentOutOfRangeException(); } - leds[index].StopAnimation(); + await leds[index].StopAnimation(); leds[index].IsOn = isOn; } @@ -81,13 +72,15 @@ public void SetLed(int index, bool isOn) /// Set the percentage of LEDs that are on starting from index 0 /// /// Percentage (Range from 0 - 1) - protected void SetPercentage(float percentage) + public async Task SetPercentage(float percentage) { if (percentage < 0 || percentage > 1) { throw new ArgumentOutOfRangeException(); } + Percentage = percentage; + var value = percentage * Count; value += 0.5f; @@ -95,148 +88,13 @@ protected void SetPercentage(float percentage) { if (i <= value) { - SetLed(i - 1, true); + await SetLed(i - 1, true); } else { - SetLed(i - 1, false); + await SetLed(i - 1, false); } } } - - /// - /// Returns the index of the last LED turned on - /// - /// - public int GetTopLedForPercentage() - { - return (int)Math.Max(0, percentage * Count - 0.5); - } - - /// - /// Starts a blink animation on an individual LED on (500ms) and off (500ms) - /// - /// - public void StartBlink(int index) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - leds[index].StartBlink(); - } - - /// - /// Starts a blink animation on an individual LED - /// - /// - /// - /// - public void StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - leds[index].StartBlink(onDuration, offDuration); - } - - /// - /// Blink animation that turns the LED bar graph on (500ms) and off (500ms) - /// - public void StartBlink() - { - var onDuration = TimeSpan.FromMilliseconds(500); - var offDuration = TimeSpan.FromMilliseconds(500); - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Blink animation that turns the LED bar graph on and off based on the OnDuration and offDuration values in ms - /// - /// - /// - public void StartBlink(TimeSpan onDuration, TimeSpan offDuration) - { - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(onDuration, offDuration, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Set LED to blink - /// - /// on duration in ms - /// off duration in ms - /// cancellation token used to cancel blink - /// - protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - foreach (var led in leds) - { - led.IsOn = true; - } - await Task.Delay(onDuration); - - if (cancellationToken.IsCancellationRequested) - { - break; - } - - foreach (var led in leds) - { - led.IsOn = false; - } - await Task.Delay(offDuration); - } - } - - /// - /// Stops the LED bar graph when its blinking and/or turns it off. - /// - public void Stop() - { - cancellationTokenSource?.Cancel(); - - foreach (var led in leds) - { - led.StopAnimation(); - } - } - - /// - /// Stops the blinking animation on an individual LED and/or turns it off - /// - public void Stop(int index) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - leds[index].StopAnimation(); - } } } \ No newline at end of file From 01b4442581e1cb243dc984d0cd84a92666fabe14 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 09:49:09 -0700 Subject: [PATCH 128/141] Update PwmLedBarGraph --- .../Leds/LedBarGraph.Extensions.cs | 8 +- .../Leds/PwmLedBarGraph.Extensions.cs | 266 ++++++++++++++ .../Leds/PwmLedBarGraph.cs | 339 ++---------------- 3 files changed, 293 insertions(+), 320 deletions(-) create mode 100644 Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs index 855aa6fd03..86f1f24f31 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs @@ -28,22 +28,22 @@ public async Task StopAnimation() /// /// Stops the blinking animation on an individual LED /// - public async Task StopAnimation(int index) + public Task StopAnimation(int index) { if (index < 0 || index >= Count) { throw new ArgumentOutOfRangeException(); } - await leds[index].StopAnimation(); + return leds[index].StopAnimation(); } /// /// Blink animation that turns the LED bar graph on (500ms) and off (500ms) /// - public async Task StartBlink() + public Task StartBlink() { - await StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); } /// diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs new file mode 100644 index 0000000000..ac3088c07d --- /dev/null +++ b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs @@ -0,0 +1,266 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Leds +{ + public partial class PwmLedBarGraph + { + private object syncRoot = new object(); + + private Task? animationTask; + private CancellationTokenSource? cancellationTokenSource; + + /// + /// Stops the LED bar graph when its blinking + /// + public async Task StopAnimation() + { + if (animationTask != null) + { + cancellationTokenSource?.Cancel(); + await animationTask; + animationTask = null; + cancellationTokenSource = null; + } + } + + /// + /// Stops the blinking animation on an individual LED + /// + public Task StopAnimation(int index) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return pwmLeds[index].StopAnimation(); + } + + /// + /// Starts a blink animation on an individual LED + /// + /// + /// + /// + public Task StartBlink( + int index, + float highBrightness = 1, + float lowBrightness = 0) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return pwmLeds[index].StartBlink(highBrightness, lowBrightness); + } + + /// + /// Starts a blink animation on an individual LED + /// + /// + /// + /// + /// + /// + public Task StartBlink( + int index, + TimeSpan highBrightnessDuration, + TimeSpan lowBrightnessDuration, + float highBrightness = 1, + float lowBrightness = 0) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return pwmLeds[index].StartBlink(highBrightnessDuration, lowBrightnessDuration, highBrightness, lowBrightness); + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. + /// + /// High brigtness. + /// Low brightness. + public Task StartBlink(float highBrightness = 1, float lowBrightness = 0) + { + return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); + } + + /// + /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. + /// + /// On duration. + /// Off duration. + /// High brigtness. + /// Low brightness. + public async Task StartBlink( + TimeSpan highBrightnessDuration, + TimeSpan lowBrightnessDuration, + float highBrightness = 1, + float lowBrightness = 0) + { + await StopAnimation(); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + foreach (var led in pwmLeds) + { + led.SetBrightness(highBrightness); + } + Thread.Sleep(highBrightnessDuration); + + foreach (var led in pwmLeds) + { + led.SetBrightness(lowBrightness); + } + Thread.Sleep(lowBrightnessDuration); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + + /// + /// Starts a pulse animation on an individual LED + /// + /// + /// + /// + public Task StartPulse(int index, float highBrightness = 1, float lowBrightness = 0.15F) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return pwmLeds[index].StartPulse(highBrightness, lowBrightness); + } + + /// + /// Starts a pulse animation on an individual LED with the specified pulse cycle + /// + /// + /// + /// + /// + public Task StartPulse(int index, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException(); + } + + return pwmLeds[index].StartPulse(pulseDuration, highBrightness, lowBrightness); + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. + /// + /// + /// + public Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) + { + return StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); + } + + /// + /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. + /// + /// + /// + /// + public async Task StartPulse( + TimeSpan pulseDuration, + float highBrightness = 1, + float lowBrightness = 0.15F) + { + ValidateBrightness(highBrightness, lowBrightness); + + await StopAnimation(); + + lock (syncRoot) + { + cancellationTokenSource = new CancellationTokenSource(); + + animationTask = new Task(() => + { + float brightness = lowBrightness; + bool ascending = true; + var intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. + float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); + float delta = (highBrightness - lowBrightness) / steps; + + while (cancellationTokenSource.Token.IsCancellationRequested == false) + { + if (brightness <= lowBrightness) + { + ascending = true; + } + else if (brightness >= highBrightness) + { + ascending = false; + } + + brightness += delta * (ascending ? 1 : -1); + + if (brightness < lowBrightness) + { + brightness = lowBrightness; + } + else if (brightness > highBrightness) + { + brightness = highBrightness; + } + + SetBrightness(brightness); + + Thread.Sleep(intervalTime); + } + }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); + + animationTask.Start(); + } + } + + /// + /// Validates LED brightness to ensure they're within the range 0 (off) - 1 (full brighness) + /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation + protected void ValidateBrightness(float highBrightness, float lowBrightness) + { + if (highBrightness > 1 || highBrightness <= 0) + { + throw new ArgumentOutOfRangeException(nameof(highBrightness), "onBrightness must be > 0 and <= 1"); + } + if (lowBrightness >= 1 || lowBrightness < 0) + { + throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); + } + if (lowBrightness >= highBrightness) + { + throw new Exception("offBrightness must be less than onBrightness"); + } + } + + /// + /// Returns the index of the last LED turned on + /// + /// + public int GetTopLedForPercentage() + { + return (int)Math.Max(0, Percentage * Count - 1); + } + } +} diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs index 3824eb285b..1ceac795bf 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs @@ -1,7 +1,6 @@ using Meadow.Hardware; using Meadow.Units; using System; -using System.Threading; using System.Threading.Tasks; namespace Meadow.Foundation.Leds @@ -9,11 +8,8 @@ namespace Meadow.Foundation.Leds /// /// Represents an LED bar graph composed on multiple PWM LEDs /// - public class PwmLedBarGraph + public partial class PwmLedBarGraph { - private Task? animationTask; - private CancellationTokenSource? cancellationTokenSource; - /// /// Array to hold pwm leds for bar graph /// @@ -27,12 +23,7 @@ public class PwmLedBarGraph /// /// A value between 0 and 1 that controls the number of LEDs that are activated /// - public float Percentage - { - get => percentage; - set => SetPercentage(percentage = value); - } - float percentage; + public float Percentage { get; protected set; } /// /// Create an LedBarGraph instance for single color LED bar graphs @@ -94,363 +85,79 @@ public PwmLedBarGraph(IPwmPort[] ports, Voltage[] forwardVoltage) } } - /// - /// Set the percentage of LEDs that are on starting from index 0 - /// - /// Percentage (Range from 0 - 1) - protected void SetPercentage(float percentage) - { - if (percentage < 0 || percentage > 1) - { - throw new ArgumentOutOfRangeException(); - } - - var value = percentage * Count; - - for (int i = 1; i <= Count; i++) - { - if (i <= value) - { - SetLed(i - 1, true); - } - else if (i <= value + 1) - { - SetLedBrightness(i - 1, value + 1 - i); - } - else - { - SetLed(i - 1, false); - } - } - } - - /// - /// Returns the index of the last LED turned on - /// - /// - public int GetTopLedForPercentage() - { - return (int)Math.Max(0, percentage * Count - 1); - } - /// /// Set the LED state /// /// index of the LED /// - public void SetLed(int index, bool isOn) + public async Task SetLed(int index, bool isOn) { if (index < 0 || index >= Count) { throw new ArgumentOutOfRangeException(); } - pwmLeds[index].StopAnimation(); + await pwmLeds[index].StopAnimation(); pwmLeds[index].IsOn = isOn; } - /// - /// Set the brightness to the LED bar graph using PWM - /// - /// - public void SetLedBrightness(float brightness) - { - foreach (var led in pwmLeds) - { - led.StopAnimation(); - led.IsOn = false; - led.SetBrightness(brightness); - } - } - /// /// Set the brightness of an individual LED when using PWM /// /// /// - public void SetLedBrightness(int index, float brightness) + public async Task SetLedBrightness(int index, float brightness) { if (index < 0 || index >= Count) { throw new ArgumentOutOfRangeException(); } - pwmLeds[index].StopAnimation(); - pwmLeds[index].IsOn = false; + await pwmLeds[index].StopAnimation(); pwmLeds[index].SetBrightness(brightness); } /// - /// Starts a blink animation on an individual LED - /// - /// - /// - /// - public void StartBlink(int index, float highBrightness = 1, float lowBrightness = 0) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - pwmLeds[index].StartBlink(highBrightness, lowBrightness); - } - - /// - /// Starts a blink animation on an individual LED - /// - /// - /// - /// - /// - /// - public void StartBlink(int index, TimeSpan highBrightnessDuration, TimeSpan lowBrightnessDuration, float highBrightness = 1, float lowBrightness = 0) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - pwmLeds[index].StartBlink(highBrightnessDuration, lowBrightnessDuration, highBrightness, lowBrightness); - } - - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. - /// - /// High brigtness. - /// Low brightness. - public void StartBlink(float highBrightness = 1, float lowBrightness = 0) - { - var highBrightnessDuration = TimeSpan.FromMilliseconds(500); - var lowBrightnessDuration = TimeSpan.FromMilliseconds(500); - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(highBrightnessDuration, lowBrightnessDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. - /// - /// On duration. - /// Off duration. - /// High brigtness. - /// Low brightness. - public void StartBlink(TimeSpan highBrightnessDuration, TimeSpan lowBrightnessDuration, float highBrightness = 1, float lowBrightness = 0) - { - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartBlinkAsync(highBrightnessDuration, lowBrightnessDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Set LED to blink - /// - /// - /// - /// - /// - /// - /// - protected async Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - while (true) - { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - foreach (var led in pwmLeds) - { - led.SetBrightness(highBrightness); - } - await Task.Delay(onDuration); - - if (cancellationToken.IsCancellationRequested) - { - break; - } - - foreach (var led in pwmLeds) - { - led.SetBrightness(lowBrightness); - } - await Task.Delay(offDuration); - } - } - - /// - /// Starts a pulse animation on an individual LED - /// - /// - /// - /// - public void StartPulse(int index, float highBrightness = 1, float lowBrightness = 0.15F) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); - } - - pwmLeds[index].StartPulse(highBrightness, lowBrightness); - } - - /// - /// Starts a pulse animation on an individual LED with the specified pulse cycle + /// Set the percentage of LEDs that are on starting from index 0 /// - /// - /// - /// - /// - public void StartPulse(int index, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) + /// Percentage (Range from 0 - 1) + public async Task SetPercentage(float percentage) { - if (index < 0 || index >= Count) + if (percentage < 0 || percentage > 1) { throw new ArgumentOutOfRangeException(); } - pwmLeds[index].StartPulse(pulseDuration, highBrightness, lowBrightness); - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. - /// - /// - /// - public void StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) - { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "highBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("lowBrightness must be less than highbrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(TimeSpan.FromSeconds(1), highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. - /// - /// - /// - /// - public void StartPulse(TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) - { - if (highBrightness > 1 || highBrightness <= 0) - { - throw new ArgumentOutOfRangeException(nameof(highBrightness), "highBrightness must be > 0 and <= 1"); - } - if (lowBrightness >= 1 || lowBrightness < 0) - { - throw new ArgumentOutOfRangeException(nameof(lowBrightness), "lowBrightness must be >= 0 and < 1"); - } - if (lowBrightness >= highBrightness) - { - throw new Exception("lowBrightness must be less than highbrightness"); - } - - Stop(); - - animationTask = new Task(async () => - { - cancellationTokenSource = new CancellationTokenSource(); - await StartPulseAsync(pulseDuration, highBrightness, lowBrightness, cancellationTokenSource.Token); - }); - animationTask.Start(); - } - - /// - /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. - /// - /// - /// - /// - /// - /// - protected async Task StartPulseAsync(TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken) - { - float brightness = lowBrightness; - bool ascending = true; - TimeSpan intervalTime = TimeSpan.FromMilliseconds(60); // 60 miliseconds is probably the fastest update we want to do, given that threads are given 20 miliseconds by default. - float steps = (float)(pulseDuration.TotalMilliseconds / intervalTime.TotalMilliseconds); - float delta = (highBrightness - lowBrightness) / steps; + var value = percentage * Count; - while (true) + for (int i = 1; i <= Count; i++) { - if (cancellationToken.IsCancellationRequested) - { - break; - } - - if (brightness <= lowBrightness) + if (i <= value) { - ascending = true; + await SetLed(i - 1, true); } - else if (brightness >= highBrightness) + else if (i <= value + 1) { - ascending = false; + await SetLedBrightness(i - 1, value + 1 - i); } - - brightness += delta * (ascending ? 1 : -1); - - foreach (var led in pwmLeds) + else { - led.SetBrightness(Math.Clamp(brightness, 0, 1)); + await SetLed(i - 1, false); } - - await Task.Delay(intervalTime); } } /// - /// Stops any running animations. + /// Set the brightness to the LED bar graph using PWM /// - public void Stop() + /// + public async Task SetBrightness(float brightness) { - cancellationTokenSource?.Cancel(); - foreach (var led in pwmLeds) { - led.StopAnimation(); - } - } - - /// - /// Stops any animation on an individual LED and/or turns it off - /// - public void Stop(int index) - { - if (index < 0 || index >= Count) - { - throw new ArgumentOutOfRangeException(); + await led.StopAnimation(); + led.SetBrightness(brightness); } - - pwmLeds[index].StopAnimation(); } } } \ No newline at end of file From 4f6775fbd15bd8cc7527ac76ff9469a5c79dc6eb Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 09:49:24 -0700 Subject: [PATCH 129/141] Update samples to new API --- .../Leds.Led_Sample/MeadowApp.cs | 9 +++---- .../Leds.PwmLedBarGraph_Sample/MeadowApp.cs | 21 +++++++-------- .../Leds.PwmLed_Onboard_Sample/MeadowApp.cs | 23 ++++++++-------- .../Leds.PwmLed_Sample/MeadowApp.cs | 27 +++++++++---------- 4 files changed, 38 insertions(+), 42 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/MeadowApp.cs index bf4f9a81b9..a1303f7ee4 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.Led_Sample/MeadowApp.cs @@ -1,7 +1,6 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Leds; -using Meadow.Peripherals.Leds; using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -74,17 +73,17 @@ public override async Task Run() Resolver.Log.Info("Blinking the LEDs for a second each"); foreach (var led in leds) { - led.StartBlink(); + await led.StartBlink(); await Task.Delay(3000); - led.Stop(); + await led.StopAnimation(); } Resolver.Log.Info("Blinking the LEDs for a second each with on (1s) and off (1s)"); foreach (var led in leds) { - led.StartBlink(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); + await led.StartBlink(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); await Task.Delay(3000); - led.Stop(); + await led.StopAnimation(); } await Task.Delay(3000); diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs index aad8f9dce8..12190dbed8 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs @@ -2,7 +2,6 @@ using Meadow.Devices; using Meadow.Foundation.Leds; using Meadow.Hardware; -using Meadow.Peripherals.Leds; using Meadow.Units; using System; using System.Threading.Tasks; @@ -50,9 +49,9 @@ public override async Task Run() Resolver.Log.Info("Turning them on and off for 200ms using SetLed..."); for (int i = 0; i < pwmLedBarGraph.Count; i++) { - pwmLedBarGraph.SetLed(i, true); + await pwmLedBarGraph.SetLed(i, true); await Task.Delay(100); - pwmLedBarGraph.SetLed(i, false); + await pwmLedBarGraph.SetLed(i, false); } await Task.Delay(1000); @@ -61,7 +60,7 @@ public override async Task Run() while (percentage < 1) { percentage += 0.01f; - pwmLedBarGraph.Percentage = Math.Min(1.0f, percentage); + await pwmLedBarGraph.SetPercentage(Math.Min(1.0f, percentage)); await Task.Delay(100); } @@ -71,30 +70,30 @@ public override async Task Run() while (percentage > 0) { percentage -= 0.01f; - pwmLedBarGraph.Percentage = Math.Max(0.0f, percentage); + await pwmLedBarGraph.SetPercentage(Math.Max(0.0f, percentage)); await Task.Delay(100); } await Task.Delay(1000); Resolver.Log.Info("Blinking for 5 seconds at 500ms on/off..."); - pwmLedBarGraph.StartBlink(); + await pwmLedBarGraph.StartBlink(); await Task.Delay(5000); - pwmLedBarGraph.Stop(); + await pwmLedBarGraph.StopAnimation(); await Task.Delay(1000); Resolver.Log.Info("Bar blinking with high and low brightness for 5 seconds..."); - pwmLedBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200), 0.75f, 0.25f); + await pwmLedBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200), 0.75f, 0.25f); await Task.Delay(5000); - pwmLedBarGraph.Stop(); + await pwmLedBarGraph.StopAnimation(); await Task.Delay(1000); Resolver.Log.Info("Bar pulsing for 5 seconds..."); - pwmLedBarGraph.StartPulse(); + await pwmLedBarGraph.StartPulse(); await Task.Delay(5000); - pwmLedBarGraph.Stop(); + await pwmLedBarGraph.StopAnimation(); await Task.Delay(1000); } diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs index 358870c6d4..34b36e656a 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Onboard_Sample/MeadowApp.cs @@ -35,21 +35,21 @@ public async Task BrightnessTest(int loopCount) for (int i = 0; i < loopCount; i++) { Resolver.Log.Info("Blue On @ 1.0"); - bluePwmLed.Brightness = 1; + bluePwmLed.SetBrightness(1); await Task.Delay(1000); Resolver.Log.Info("Blue at 98.5%"); - bluePwmLed.Brightness = 0.985f; + bluePwmLed.SetBrightness(0.985f); await Task.Delay(1000); Resolver.Log.Info("Blue Off"); - bluePwmLed.Brightness = 0; + bluePwmLed.SetBrightness(0); await Task.Delay(1000); Resolver.Log.Info("Blue 50%"); - bluePwmLed.Brightness = 0.5f; + bluePwmLed.SetBrightness(0.5f); await Task.Delay(1000); - bluePwmLed.Stop(); + await bluePwmLed.StopAnimation(); } } @@ -58,23 +58,22 @@ public async Task PulseLeds() while (true) { Resolver.Log.Info("Pulse Red."); - redPwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.05f); + await redPwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.05f); await Task.Delay(1000); Resolver.Log.Info("Stop Red."); - redPwmLed.Stop(); + await redPwmLed.StopAnimation(); Resolver.Log.Info("Pulse Blue."); - bluePwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.05f); + await bluePwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.05f); await Task.Delay(2000); Resolver.Log.Info("Stop Blue."); - bluePwmLed.Stop(); + await bluePwmLed.StopAnimation(); Resolver.Log.Info("Pulse Green."); - greenPwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.0f); + await greenPwmLed.StartPulse(TimeSpan.FromMilliseconds(500), lowBrightness: 0.0f); await Task.Delay(2000); Resolver.Log.Info("Stop Green."); - greenPwmLed.Stop(); - + await greenPwmLed.StopAnimation(); } } diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs index 0778b2a917..55c3deefdc 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs @@ -1,7 +1,6 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Leds; -using Meadow.Peripherals.Leds; using Meadow.Units; using System; using System.Collections.Generic; @@ -65,9 +64,9 @@ public override async Task Run() Resolver.Log.Info("Blinking the LED for a bit."); foreach (var pwmLed in pwmLeds) { - pwmLed.StartBlink(); + await pwmLed.StartBlink(); await Task.Delay(3000); - pwmLed.Stop(); + await pwmLed.StopAnimation(); } await Task.Delay(1000); @@ -75,9 +74,9 @@ public override async Task Run() Resolver.Log.Info("Blinking the LED for a bit."); foreach (var pwmLed in pwmLeds) { - pwmLed.StartBlink(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); + await pwmLed.StartBlink(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); await Task.Delay(3000); - pwmLed.Stop(); + await pwmLed.StopAnimation(); } await Task.Delay(1000); @@ -85,9 +84,9 @@ public override async Task Run() Resolver.Log.Info("Pulsing the LED for a bit."); foreach (var pwmLed in pwmLeds) { - pwmLed.StartPulse(); + await pwmLed.StartPulse(); await Task.Delay(1000); - pwmLed.Stop(); + await pwmLed.StopAnimation(); } await Task.Delay(1000); @@ -95,9 +94,9 @@ public override async Task Run() Resolver.Log.Info("Pulsing the LED for a bit."); foreach (var pwmLed in pwmLeds) { - pwmLed.StartPulse(); + await pwmLed.StartPulse(); await Task.Delay(1000); - pwmLed.Stop(); + await pwmLed.StopAnimation(); } await Task.Delay(1000); @@ -105,15 +104,15 @@ public override async Task Run() Resolver.Log.Info("Set brightness the LED for a bit."); foreach (var pwmLed in pwmLeds) { - pwmLed.Brightness = 0.25f; + pwmLed.SetBrightness(0.25f); await Task.Delay(250); - pwmLed.Brightness = 0.5f; + pwmLed.SetBrightness(0.5f); await Task.Delay(250); - pwmLed.Brightness = 0.75f; + pwmLed.SetBrightness(0.75f); await Task.Delay(250); - pwmLed.Brightness = 1.0f; + pwmLed.SetBrightness(1.0f); await Task.Delay(250); - pwmLed.Stop(); + await pwmLed.StopAnimation(); } await Task.Delay(1000); From cfca395731378f9c364dba3e2c549e83a8f42a22 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 11:26:31 -0700 Subject: [PATCH 130/141] Update Led samples --- .../Leds.LedBarGraph_Sample/MeadowApp.cs | 8 +--- .../Leds.PwmLedBarGraph_Sample/MeadowApp.cs | 6 ++- .../Leds.PwmLed_Sample/MeadowApp.cs | 19 +++----- .../Leds.RgbLed_Sample/MeadowApp.cs | 29 +++++------- .../Leds.RgbPwmLed_Sample/MeadowApp.cs | 44 ++++++------------- Source/Meadow.Foundation.Core/Leds/PwmLed.cs | 1 + 6 files changed, 39 insertions(+), 68 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs index fd67c49694..3d42768ca9 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs @@ -7,7 +7,7 @@ namespace Leds.LedBarGraph_Sample { - public class MeadowApp : App + public class MeadowApp : App { // @@ -59,7 +59,6 @@ public override async Task Run() while (percentage < 1) { percentage += 0.10f; - Resolver.Log.Info($"{percentage}"); await ledBarGraph.SetPercentage(Math.Min(1.0f, percentage)); await Task.Delay(100); } @@ -70,7 +69,6 @@ public override async Task Run() while (percentage > 0) { percentage -= 0.10f; - Resolver.Log.Info($"{percentage}"); await ledBarGraph.SetPercentage(Math.Max(0.0f, percentage)); await Task.Delay(100); } @@ -81,7 +79,6 @@ public override async Task Run() while (percentage < 1) { percentage += 0.10f; - Resolver.Log.Info($"{percentage}"); await ledBarGraph.SetPercentage(Math.Min(1.0f, percentage)); await ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); await Task.Delay(2000); @@ -93,7 +90,6 @@ public override async Task Run() while (percentage > 0) { percentage -= 0.10f; - Resolver.Log.Info($"{percentage}"); await ledBarGraph.SetPercentage(Math.Max(0.0f, percentage)); await ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage()); await Task.Delay(2000); @@ -104,7 +100,7 @@ public override async Task Run() Resolver.Log.Info("Blinking for 5 seconds at 500ms on/off..."); await ledBarGraph.StartBlink(); await Task.Delay(5000); - ledBarGraph.StopAnimation(); + await ledBarGraph.StopAnimation(); await Task.Delay(1000); diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs index 12190dbed8..b80acc10db 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs @@ -8,7 +8,7 @@ namespace Leds.PwmLedBarGraph_Sample { - public class MeadowApp : App + public class MeadowApp : App { // @@ -96,6 +96,10 @@ public override async Task Run() await pwmLedBarGraph.StopAnimation(); await Task.Delay(1000); + + await pwmLedBarGraph.SetBrightness(0); + + await Task.Delay(1000); } } diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs index 55c3deefdc..c1e511c8a9 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLed_Sample/MeadowApp.cs @@ -61,7 +61,7 @@ public override async Task Run() await Task.Delay(1000); - Resolver.Log.Info("Blinking the LED for a bit."); + Resolver.Log.Info("Blinking each LED (on 500ms / off 500ms)"); foreach (var pwmLed in pwmLeds) { await pwmLed.StartBlink(); @@ -71,7 +71,7 @@ public override async Task Run() await Task.Delay(1000); - Resolver.Log.Info("Blinking the LED for a bit."); + Resolver.Log.Info("Blinking each LED (on 1s / off 1s)"); foreach (var pwmLed in pwmLeds) { await pwmLed.StartBlink(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); @@ -81,22 +81,13 @@ public override async Task Run() await Task.Delay(1000); - Resolver.Log.Info("Pulsing the LED for a bit."); - foreach (var pwmLed in pwmLeds) - { - await pwmLed.StartPulse(); - await Task.Delay(1000); - await pwmLed.StopAnimation(); - } - - await Task.Delay(1000); - - Resolver.Log.Info("Pulsing the LED for a bit."); + Resolver.Log.Info("Pulsing each LED (600ms pulse duration)"); foreach (var pwmLed in pwmLeds) { await pwmLed.StartPulse(); await Task.Delay(1000); await pwmLed.StopAnimation(); + pwmLed.IsOn = false; } await Task.Delay(1000); @@ -112,7 +103,7 @@ public override async Task Run() await Task.Delay(250); pwmLed.SetBrightness(1.0f); await Task.Delay(250); - await pwmLed.StopAnimation(); + pwmLed.IsOn = false; } await Task.Delay(1000); diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/MeadowApp.cs index 4db222ffd5..e5ecbdae97 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbLed_Sample/MeadowApp.cs @@ -1,10 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Meadow; +using Meadow; using Meadow.Devices; using Meadow.Foundation.Leds; -using Meadow.Peripherals.Leds; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; namespace Leds.RgbLed_Sample { @@ -18,12 +17,6 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var onRgbLed = new RgbLed( - redPin: Device.Pins.OnboardLedRed, - greenPin: Device.Pins.OnboardLedGreen, - bluePin: Device.Pins.OnboardLedBlue); - onRgbLed.SetColor(RgbLedColors.Red); - rgbLeds = new List { new RgbLed( @@ -44,8 +37,6 @@ public override Task Initialize() Device.CreateDigitalOutputPort(Device.Pins.D13)) }; - onRgbLed.SetColor(RgbLedColors.Green); - return Task.CompletedTask; } @@ -67,25 +58,29 @@ public override async Task Run() await Task.Delay(1000); - Resolver.Log.Info("Blinking through each color on each RGB LED..."); + Resolver.Log.Info("Blinking through each color on each RGB LED (on 500ms / off 500ms)..."); foreach (var rgbLed in rgbLeds) { for (int i = 0; i < (int)RgbLedColors.count; i++) { - rgbLed.StartBlink((RgbLedColors)i); + await rgbLed.StartBlink((RgbLedColors)i); await Task.Delay(3000); + await rgbLed.StopAnimation(); + rgbLed.IsOn = false; } } await Task.Delay(1000); - Resolver.Log.Info("Blinking through each color on each RGB LED..."); + Resolver.Log.Info("Blinking through each color on each RGB LED (on 1s / off 1s)..."); foreach (var rgbLed in rgbLeds) { for (int i = 0; i < (int)RgbLedColors.count; i++) { - rgbLed.StartBlink((RgbLedColors)i, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); + await rgbLed.StartBlink((RgbLedColors)i, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); await Task.Delay(3000); + await rgbLed.StopAnimation(); + rgbLed.IsOn = false; } } diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs index f22d987a93..d544f220f6 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Sample/MeadowApp.cs @@ -2,8 +2,6 @@ using Meadow.Devices; using Meadow.Foundation; using Meadow.Foundation.Leds; -using Meadow.Peripherals.Leds; -using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -20,22 +18,16 @@ public override Task Initialize() { Resolver.Log.Info("Initializing..."); - var onRgbLed = new RgbLed( - redPin: Device.Pins.OnboardLedRed, - greenPin: Device.Pins.OnboardLedGreen, - bluePin: Device.Pins.OnboardLedBlue); - onRgbLed.SetColor(RgbLedColors.Red); - rgbPwmLeds = new List() { new RgbPwmLed( Device.Pins.D02, Device.Pins.D03, Device.Pins.D04), - new RgbPwmLed( - Device.Pins.D05, - Device.Pins.D06, - Device.Pins.D07), + //new RgbPwmLed( + // Device.Pins.D05, + // Device.Pins.D06, + // Device.Pins.D07), new RgbPwmLed( Device.Pins.D08, Device.Pins.D09, @@ -46,12 +38,10 @@ public override Task Initialize() Device.Pins.D13) }; - onRgbLed.SetColor(RgbLedColors.Green); - return Task.CompletedTask; } - public override Task Run() + public override async Task Run() { Resolver.Log.Info("TestRgbPwmLed..."); @@ -77,7 +67,7 @@ public override Task Run() Resolver.Log.Info($"Red brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.StopAnimation(); + await rgbPwmLed.StopAnimation(); for (int i = 0; i < 10; i++) { @@ -85,7 +75,7 @@ public override Task Run() Resolver.Log.Info($"Green brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.StopAnimation(); + await rgbPwmLed.StopAnimation(); for (int i = 0; i < 10; i++) { @@ -93,39 +83,33 @@ public override Task Run() Resolver.Log.Info($"Blue brightness: {i * 0.1f}"); Thread.Sleep(500); } - rgbPwmLed.StopAnimation(); + await rgbPwmLed.StopAnimation(); // Blink - rgbPwmLed.StartBlink(Color.Red, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); + await rgbPwmLed.StartBlink(Color.Red); Resolver.Log.Info("Blinking Red"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); - rgbPwmLed.StartBlink(Color.Green, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); + await rgbPwmLed.StartBlink(Color.Green); Resolver.Log.Info("Blinking Green"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); - rgbPwmLed.StartBlink(Color.Blue, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), 1f, 0f); + await rgbPwmLed.StartBlink(Color.Blue); Resolver.Log.Info("Blinking Blue"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); // Pulse - rgbPwmLed.StartPulse(Color.Red); + await rgbPwmLed.StartPulse(Color.Red); Resolver.Log.Info("Pulsing Red"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); - rgbPwmLed.StartPulse(Color.Green); + await rgbPwmLed.StartPulse(Color.Green); Resolver.Log.Info("Pulsing Green"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); - rgbPwmLed.StartPulse(Color.Blue); + await rgbPwmLed.StartPulse(Color.Blue); Resolver.Log.Info("Pulsing Blue"); Thread.Sleep(3000); - rgbPwmLed.StopAnimation(); } } } diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs index 95788a08ba..5487ec2594 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.cs @@ -97,6 +97,7 @@ public PwmLed( ForwardVoltage = forwardVoltage; maximumPwmDuty = Helpers.CalculateMaximumDutyCycle(forwardVoltage); + IsOn = false; Port.Inverted = terminationType == CircuitTerminationType.High; Port.Start(); From 0a336f2151afc551a6a6b2964d8f1aeed45b4509 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 11:37:29 -0700 Subject: [PATCH 131/141] LedBarGraph samples switched to Feather v2 --- .../Leds.LedBarGraph_Sample/MeadowApp.cs | 2 +- .../Leds.PwmLedBarGraph_Sample/MeadowApp.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs index 3d42768ca9..12e4e052b7 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.LedBarGraph_Sample/MeadowApp.cs @@ -7,7 +7,7 @@ namespace Leds.LedBarGraph_Sample { - public class MeadowApp : App + public class MeadowApp : App { // diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs index b80acc10db..9432f55a9f 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.PwmLedBarGraph_Sample/MeadowApp.cs @@ -8,7 +8,7 @@ namespace Leds.PwmLedBarGraph_Sample { - public class MeadowApp : App + public class MeadowApp : App { // From 43e2cb5952e03e732cedffab7c92ff640a78b0c1 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 12:06:50 -0700 Subject: [PATCH 132/141] PR change requests --- .../MeadowApp.cs | 15 +++--- .../{Led.Extensions.cs => Led.Animations.cs} | 0 ...xtensions.cs => LedBarGraph.Animations.cs} | 14 +++--- .../Leds/LedBarGraph.cs | 17 ++----- ...Led.Extensions.cs => PwmLed.Animations.cs} | 12 ++--- ...nsions.cs => PwmLedBarGraph.Animations.cs} | 46 +++++++++---------- .../Leds/PwmLedBarGraph.cs | 10 ++-- ...Led.Extensions.cs => RgbLed.Animations.cs} | 0 Source/Meadow.Foundation.Core/Leds/RgbLed.cs | 13 ++---- ....Extensions.cs => RgbPwmLed.Animations.cs} | 0 10 files changed, 55 insertions(+), 72 deletions(-) rename Source/Meadow.Foundation.Core/Leds/{Led.Extensions.cs => Led.Animations.cs} (100%) rename Source/Meadow.Foundation.Core/Leds/{LedBarGraph.Extensions.cs => LedBarGraph.Animations.cs} (88%) rename Source/Meadow.Foundation.Core/Leds/{PwmLed.Extensions.cs => PwmLed.Animations.cs} (94%) rename Source/Meadow.Foundation.Core/Leds/{PwmLedBarGraph.Extensions.cs => PwmLedBarGraph.Animations.cs} (82%) rename Source/Meadow.Foundation.Core/Leds/{RgbLed.Extensions.cs => RgbLed.Animations.cs} (100%) rename Source/Meadow.Foundation.Core/Leds/{RgbPwmLed.Extensions.cs => RgbPwmLed.Animations.cs} (100%) diff --git a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs index 07cae64d2d..3ba32b9303 100644 --- a/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Leds.RgbPwmLed_Onboard_Sample/MeadowApp.cs @@ -3,7 +3,6 @@ using Meadow.Foundation; using Meadow.Foundation.Leds; using System; -using System.Threading; using System.Threading.Tasks; namespace Leds.RgbPwmLed_Onboard_Sample @@ -28,9 +27,7 @@ public override Task Initialize() public override Task Run() { - _ = TestColors(); - - return Task.CompletedTask; + return TestColors(); } public async Task TestColors() @@ -39,23 +36,23 @@ public async Task TestColors() { Console.WriteLine("SetColor(RgbLedColors.Red);"); onboardLed.SetColor(Color.Red); - Thread.Sleep(3000); + await Task.Delay(3000); Console.WriteLine("StartPulse();"); await onboardLed.StartPulse(); - Thread.Sleep(3000); + await Task.Delay(3000); Console.WriteLine("StartPulse(RgbLedColors.Green);"); await onboardLed.StartPulse(Color.Green); - Thread.Sleep(3000); + await Task.Delay(3000); Console.WriteLine("SetColor(RgbLedColors.Yellow);"); onboardLed.SetColor(Color.Yellow); - Thread.Sleep(3000); + await Task.Delay(3000); Console.WriteLine("StartPulse(RgbLedColors.Cyan, 200, 200);"); await onboardLed.StartPulse(Color.Cyan, TimeSpan.FromMilliseconds(400)); - Thread.Sleep(3000); + await Task.Delay(3000); await onboardLed.StopAnimation(); } diff --git a/Source/Meadow.Foundation.Core/Leds/Led.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/Led.Animations.cs similarity index 100% rename from Source/Meadow.Foundation.Core/Leds/Led.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/Led.Animations.cs diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs similarity index 88% rename from Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs index 86f1f24f31..16825bb87e 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Extensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs @@ -49,9 +49,8 @@ public Task StartBlink() /// /// Blink animation that turns the LED bar graph on and off based on the OnDuration and offDuration values /// - /// On Duration - /// Off Duration - /// + /// The duration the LED bar graph stays on + /// The duration the LED bar graph stays off public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) { await StopAnimation(); @@ -85,7 +84,7 @@ public async Task StartBlink(TimeSpan onDuration, TimeSpan offDuration) /// /// Starts a blink animation on an individual LED on (500ms) and off (500ms) /// - /// + /// Index of the LED public Task StartBlink(int index) { if (index < 0 || index >= Count) @@ -99,9 +98,9 @@ public Task StartBlink(int index) /// /// Starts a blink animation on an individual LED /// - /// - /// - /// + /// Index of the LED + /// The duration the LED bar graph stays on + /// The duration the LED bar graph stays off public Task StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration) { if (index < 0 || index >= Count) @@ -115,7 +114,6 @@ public Task StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration) /// /// Returns the index of the last LED turned on /// - /// public int GetTopLedForPercentage() { return (int)Math.Max(0, Percentage * Count - 0.5); diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs index 1bba66f5be..07b73b3c50 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs @@ -27,7 +27,7 @@ public partial class LedBarGraph /// /// Create an LedBarGraph instance from an array of IPins /// - /// + /// The Digital Output Pins public LedBarGraph(IPin[] pins) { leds = new Led[pins.Length]; @@ -41,7 +41,7 @@ public LedBarGraph(IPin[] pins) /// /// Create an LedBarGraph instance from an array of IDigitalOutputPort /// - /// + /// The Digital Output Ports public LedBarGraph(IDigitalOutputPort[] ports) { leds = new Led[ports.Length]; @@ -55,8 +55,8 @@ public LedBarGraph(IDigitalOutputPort[] ports) /// /// Set the LED state /// - /// index of the LED - /// + /// The index of the LED + /// True for on, False for off public async Task SetLed(int index, bool isOn) { if (index >= Count) @@ -86,14 +86,7 @@ public async Task SetPercentage(float percentage) for (int i = 1; i <= Count; i++) { - if (i <= value) - { - await SetLed(i - 1, true); - } - else - { - await SetLed(i - 1, false); - } + await SetLed(i - 1, i <= value); } } } diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs similarity index 94% rename from Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs index 6b5827dd44..f44e9912fc 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLed.Extensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLed.Animations.cs @@ -42,13 +42,13 @@ public async Task StartBlink(float highBrightness = 1f, float lowBrightness = 0f /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided. /// - /// The duration the LED stays on - /// The duration the LED stays off + /// The duration the LED stays in high brightness + /// The duration the LED stays in low brightness /// The maximum brightness of the animation /// The minimum brightness of the animation public async Task StartBlink( - TimeSpan onDuration, - TimeSpan offDuration, + TimeSpan highBrightnessDuration, + TimeSpan lowBrightnessDuration, float highBrightness = 1f, float lowBrightness = 0f) { @@ -65,10 +65,10 @@ public async Task StartBlink( while (cancellationTokenSource.Token.IsCancellationRequested == false) { SetBrightness(highBrightness); - Thread.Sleep(onDuration); + Thread.Sleep(highBrightnessDuration); SetBrightness(lowBrightness); - Thread.Sleep(offDuration); + Thread.Sleep(lowBrightnessDuration); } }, cancellationTokenSource.Token, TaskCreationOptions.LongRunning); diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Animations.cs similarity index 82% rename from Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Animations.cs index ac3088c07d..1fbd86cc9f 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Extensions.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.Animations.cs @@ -28,6 +28,7 @@ public async Task StopAnimation() /// /// Stops the blinking animation on an individual LED /// + /// Index of the LED public Task StopAnimation(int index) { if (index < 0 || index >= Count) @@ -41,9 +42,9 @@ public Task StopAnimation(int index) /// /// Starts a blink animation on an individual LED /// - /// - /// - /// + /// Index of the LED + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartBlink( int index, float highBrightness = 1, @@ -60,11 +61,11 @@ public Task StartBlink( /// /// Starts a blink animation on an individual LED /// - /// - /// - /// - /// - /// + /// Index of the LED + /// The duration the LED stays in high brightness + /// The duration the LED stays in low brightness + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartBlink( int index, TimeSpan highBrightnessDuration, @@ -83,8 +84,8 @@ public Task StartBlink( /// /// Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting. /// - /// High brigtness. - /// Low brightness. + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartBlink(float highBrightness = 1, float lowBrightness = 0) { return StartBlink(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500), highBrightness, lowBrightness); @@ -134,9 +135,9 @@ public async Task StartBlink( /// /// Starts a pulse animation on an individual LED /// - /// - /// - /// + /// Index of the LED + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartPulse(int index, float highBrightness = 1, float lowBrightness = 0.15F) { if (index < 0 || index >= Count) @@ -150,10 +151,10 @@ public Task StartPulse(int index, float highBrightness = 1, float lowBrightness /// /// Starts a pulse animation on an individual LED with the specified pulse cycle /// - /// - /// - /// - /// + /// Index of the LED + /// The pulse animation duration + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartPulse(int index, TimeSpan pulseDuration, float highBrightness = 1, float lowBrightness = 0.15F) { if (index < 0 || index >= Count) @@ -167,8 +168,8 @@ public Task StartPulse(int index, TimeSpan pulseDuration, float highBrightness = /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting. /// - /// - /// + /// The maximum brightness of the animation + /// The minimum brightness of the animation public Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) { return StartPulse(TimeSpan.FromMilliseconds(600), highBrightness, lowBrightness); @@ -177,9 +178,9 @@ public Task StartPulse(float highBrightness = 1, float lowBrightness = 0.15F) /// /// Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided. /// - /// - /// - /// + /// The pulse animation duration + /// The maximum brightness of the animation + /// The minimum brightness of the animation public async Task StartPulse( TimeSpan pulseDuration, float highBrightness = 1, @@ -257,7 +258,6 @@ protected void ValidateBrightness(float highBrightness, float lowBrightness) /// /// Returns the index of the last LED turned on /// - /// public int GetTopLedForPercentage() { return (int)Math.Max(0, Percentage * Count - 1); diff --git a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs index 1ceac795bf..bb2bcd9f77 100644 --- a/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/PwmLedBarGraph.cs @@ -88,8 +88,8 @@ public PwmLedBarGraph(IPwmPort[] ports, Voltage[] forwardVoltage) /// /// Set the LED state /// - /// index of the LED - /// + /// Index of the LED + /// True for on, False for off public async Task SetLed(int index, bool isOn) { if (index < 0 || index >= Count) @@ -104,8 +104,8 @@ public async Task SetLed(int index, bool isOn) /// /// Set the brightness of an individual LED when using PWM /// - /// - /// + /// Index of the LED + /// Valid values are from 0 to 1, inclusive public async Task SetLedBrightness(int index, float brightness) { if (index < 0 || index >= Count) @@ -150,7 +150,7 @@ public async Task SetPercentage(float percentage) /// /// Set the brightness to the LED bar graph using PWM /// - /// + /// Valid values are from 0 to 1, inclusive public async Task SetBrightness(float brightness) { foreach (var led in pwmLeds) diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLed.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.Animations.cs similarity index 100% rename from Source/Meadow.Foundation.Core/Leds/RgbLed.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/RgbLed.Animations.cs diff --git a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs index 7e30755d75..16aaf32ab3 100644 --- a/Source/Meadow.Foundation.Core/Leds/RgbLed.cs +++ b/Source/Meadow.Foundation.Core/Leds/RgbLed.cs @@ -1,6 +1,5 @@ using Meadow.Hardware; using Meadow.Peripherals.Leds; -using Meadow.Units; namespace Meadow.Foundation.Leds { @@ -40,11 +39,7 @@ public partial class RgbLed : IRgbLed public bool IsOn { get => isOn; - set - { - UpdateLed(value); - isOn = value; - } + set => UpdateLed(isOn = value); } bool isOn; @@ -89,7 +84,7 @@ public RgbLed( /// /// Sets the current color of the LED. /// - /// + /// The color value public void SetColor(RgbLedColors color) { Color = color; @@ -100,8 +95,8 @@ public void SetColor(RgbLedColors color) /// /// Turns on LED with current color or LED off /// - /// Is the LED on - protected void UpdateLed(bool isOn) + /// True for on, False for off + protected void UpdateLed(bool isOn) { bool onState = (Common == CommonType.CommonCathode); diff --git a/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs b/Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs similarity index 100% rename from Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Extensions.cs rename to Source/Meadow.Foundation.Core/Leds/RgbPwmLed.Animations.cs From df520a755679af356a8c50b3a126dc9a65983128 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Wed, 3 May 2023 12:16:46 -0700 Subject: [PATCH 133/141] Minor comment fixes --- Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs | 4 ++-- Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs index 16825bb87e..12c8c3e57f 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.Animations.cs @@ -99,8 +99,8 @@ public Task StartBlink(int index) /// Starts a blink animation on an individual LED /// /// Index of the LED - /// The duration the LED bar graph stays on - /// The duration the LED bar graph stays off + /// The duration the LED stays on + /// The duration the LED stays off public Task StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration) { if (index < 0 || index >= Count) diff --git a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs index 07b73b3c50..c30c507ccb 100644 --- a/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs +++ b/Source/Meadow.Foundation.Core/Leds/LedBarGraph.cs @@ -55,7 +55,7 @@ public LedBarGraph(IDigitalOutputPort[] ports) /// /// Set the LED state /// - /// The index of the LED + /// Index of the LED /// True for on, False for off public async Task SetLed(int index, bool isOn) { From 3bf8699e19e9fad5de6700740c24edcefd03fc84 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 3 May 2023 20:49:53 -0700 Subject: [PATCH 134/141] Fix SetAddressWindow call in TftSpiBase and remove unneeded calls in drivers --- .../Displays.TftSpi/Driver/Drivers/Ili9163.cs | 4 +--- .../Displays.TftSpi/Driver/Drivers/S6D02A1.cs | 4 +--- .../Displays.TftSpi/Driver/Drivers/Ssd1331.cs | 5 +---- .../Displays.TftSpi/Driver/Drivers/Ssd1351.cs | 2 -- .../Displays.TftSpi/Driver/Drivers/St7735.cs | 5 +---- .../Displays.TftSpi/Driver/TftSpiBase.cs | 2 +- 6 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs index 782bf4a627..4395f73cd1 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ili9163.cs @@ -186,9 +186,7 @@ protected override void Initialize() Write(0x29); // Set display on DelayMs(10); - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); - - dataCommandPort.State = (Data); + dataCommandPort.State = Data; } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs index f78ddb2d87..219ca463ca 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/S6D02A1.cs @@ -118,9 +118,7 @@ protected override void Initialize() SendCommand(0x29, null); // Display on SendCommand(0x2c, null); // Memory write - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); - - dataCommandPort.State = (Data); + dataCommandPort.State = Data; } /// diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs index 5d2763cb47..c4f7e20db6 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1331.cs @@ -1,5 +1,4 @@ -using System; -using Meadow.Foundation.Graphics; +using Meadow.Foundation.Graphics; using Meadow.Hardware; namespace Meadow.Foundation.Displays @@ -121,8 +120,6 @@ protected override void Initialize() SendCommand(CMD_DISPLAYON); //--turn on oled panel - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); - dataCommandPort.State = Data; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs index 45626dd419..3db1c56e2c 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/Ssd1351.cs @@ -127,8 +127,6 @@ protected override void Initialize() SendCommand(CMD_DISPLAYON); - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); - dataCommandPort.State = Data; } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs index 4f1d9bcf06..f72f21109d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/Drivers/St7735.cs @@ -147,7 +147,6 @@ protected override void Initialize() if (displayType == DisplayType.ST7735B) { Init7735B(); - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); return; } @@ -171,8 +170,6 @@ protected override void Initialize() SendCommand(Register.INVOFF); } - SetAddressWindow(0, 0, (Width - 1), (Height - 1)); - dataCommandPort.State = Data; } @@ -382,7 +379,7 @@ protected override void SetAddressWindow(int x0, int y0, int x1, int y1) x1 += xOffset; y1 += yOffset; - + base.SetAddressWindow(x0, y0, x1, y1); } } diff --git a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs index ba35347856..df89f9dc9d 100644 --- a/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs +++ b/Source/Meadow.Foundation.Peripherals/Displays.TftSpi/Driver/TftSpiBase.cs @@ -383,7 +383,7 @@ public void Fill(int x, int y, int width, int height, Color color) /// public void Show() { - SetAddressWindow(0, 0, Width - 1, Height); + SetAddressWindow(0, 0, Width - 1, Height - 1); dataCommandPort.State = Data; From c9a1083c2e411b94ab8e79adb395df6a39a7488c Mon Sep 17 00:00:00 2001 From: Chris Tacke Date: Thu, 4 May 2023 10:19:47 -0500 Subject: [PATCH 135/141] fix to apply auto-speed and auto-mode to all communications, not just Exchange --- .../Communications/SpiCommunications.cs | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs index 4c5cfe9174..f943895430 100644 --- a/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs +++ b/Source/Meadow.Foundation.Core/Communications/SpiCommunications.cs @@ -82,6 +82,8 @@ public SpiCommunications( /// public virtual void Read(Span readBuffer) { + AutoSetBusSpeedAndMode(); + Bus.Read(ChipSelect, readBuffer, chipSelectMode); } @@ -92,6 +94,8 @@ public virtual void Read(Span readBuffer) /// The buffer to hold the data public virtual void ReadRegister(byte address, Span readBuffer) { + AutoSetBusSpeedAndMode(); + WriteBuffer.Span[0] = address; Bus.Exchange(ChipSelect, WriteBuffer.Span[0..readBuffer.Length], readBuffer, chipSelectMode); } @@ -103,6 +107,8 @@ public virtual void ReadRegister(byte address, Span readBuffer) /// The byte read public virtual byte ReadRegister(byte address) { + AutoSetBusSpeedAndMode(); + WriteBuffer.Span[0] = address; Bus.Exchange(ChipSelect, WriteBuffer.Span[0..1], ReadBuffer.Span[0..1], chipSelectMode); return ReadBuffer.Span[0]; @@ -133,6 +139,8 @@ public virtual ushort ReadRegisterAsUShort(byte address, ByteOrder order = ByteO /// Value to write public void Write(byte value) { + AutoSetBusSpeedAndMode(); + WriteBuffer.Span[0] = value; Bus.Write(ChipSelect, WriteBuffer.Span[0..1], chipSelectMode); } @@ -143,6 +151,8 @@ public void Write(byte value) /// Data to be written. public virtual void Write(Span data) { + AutoSetBusSpeedAndMode(); + Bus.Write(ChipSelect, data, chipSelectMode); } @@ -153,6 +163,8 @@ public virtual void Write(Span data) /// Value to write public virtual void WriteRegister(byte address, byte value) { + AutoSetBusSpeedAndMode(); + WriteBuffer.Span[0] = address; WriteBuffer.Span[1] = value; Bus.Write(ChipSelect, WriteBuffer.Span[0..2], chipSelectMode); @@ -211,6 +223,8 @@ public virtual void WriteRegister(byte address, Span writeBuffer, ByteOrde "amount of data to fix."); } + AutoSetBusSpeedAndMode(); + WriteBuffer.Span[0] = address; switch (order) @@ -231,13 +245,7 @@ public virtual void WriteRegister(byte address, Span writeBuffer, ByteOrde Bus.Write(ChipSelect, WriteBuffer.Span[0..(writeBuffer.Length + 1)], chipSelectMode); } - /// - /// Exchange data over the SPI bus - /// - /// The buffer holding the data to write - /// The buffer to receieve data - /// The duplex mode - half or full - public virtual void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) + private void AutoSetBusSpeedAndMode() { if (Bus.Configuration.SpiMode != BusMode) { @@ -248,6 +256,17 @@ public virtual void Exchange(Span writeBuffer, Span readBuffer, Dupl { Bus.Configuration.Speed = BusSpeed; } + } + + /// + /// Exchange data over the SPI bus + /// + /// The buffer holding the data to write + /// The buffer to receieve data + /// The duplex mode - half or full + public virtual void Exchange(Span writeBuffer, Span readBuffer, DuplexType duplex = DuplexType.Half) + { + AutoSetBusSpeedAndMode(); if (duplex == DuplexType.Half) { From 8015b6e635ae522ad3700ca628b413d251676da6 Mon Sep 17 00:00:00 2001 From: Jorge Ramirez Date: Thu, 4 May 2023 14:26:28 -0700 Subject: [PATCH 136/141] MicroGraphics Buffer1bppV fix --- .../Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs index d99d5543ad..9a3928d51b 100644 --- a/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs +++ b/Source/Meadow.Foundation.Libraries_and_Frameworks/Graphics.MicroGraphics/Driver/Buffers/Buffer1bppV.cs @@ -71,7 +71,7 @@ public override bool GetPixelIsEnabled(int x, int y) /// is pixel enabled (on) public override void SetPixel(int x, int y, bool enabled) { - int index = (x >> 3) + (y * Width) >> 3; + int index = (x + y * Width) >> 3; byte bitMask = (byte)(0x80 >> (x % 8)); Buffer[index] = enabled ? (byte)(Buffer[index] | bitMask) : (byte)(Buffer[index] & ~bitMask); From 09669cc436b5ebfeeb6663e7778665177cde442b Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 4 May 2023 22:59:47 -0700 Subject: [PATCH 137/141] Formatting cleanup --- .../Driver/SwitchingAnemometer.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs index 41237f3fc3..d5cb42cd1c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Weather.SwitchingAnemometer/Driver/SwitchingAnemometer.cs @@ -67,8 +67,8 @@ public int SampleCount /// public SwitchingAnemometer(IPin digitalInputPin) : this(digitalInputPin.CreateDigitalInputPort(InterruptMode.EdgeFalling, - ResistorMode.InternalPullUp, - TimeSpan.FromMilliseconds(2), + ResistorMode.InternalPullUp, + TimeSpan.FromMilliseconds(2), TimeSpan.FromMilliseconds(0))) { } @@ -93,8 +93,8 @@ void HandleInputPortChange(object sender, DigitalPortResult result) samples?.Enqueue(result); - if(samples?.Count > sampleCount) - { + if (samples?.Count > sampleCount) + { samples.Dequeue(); } } @@ -133,12 +133,12 @@ public override void StartUpdating(TimeSpan? updateInterval = null) public override void StopUpdating() { base.StopUpdating(); - + if (running) { UnsubscribeToInputPortEvents(); } - + running = false; } @@ -148,14 +148,14 @@ public override void StopUpdating() /// The latest sensor reading protected override async Task ReadSensor() { - if(IsSampling == false) + if (IsSampling == false) { StartUpdating(); await Task.Delay(OneTimeReadDuration); StopUpdating(); } - if(samples?.Count > 0 && (DateTime.Now - samples?.Peek().New.Time > NoWindTimeout)) + if (samples?.Count > 0 && (DateTime.Now - samples?.Peek().New.Time > NoWindTimeout)) { //we've exceeded the no wind interval time samples?.Clear(); //will force a zero reading } @@ -174,7 +174,7 @@ protected override async Task ReadSensor() } // average the speeds - float oversampledSpeed = speedSum / (samples.Count -1); + float oversampledSpeed = speedSum / (samples.Count - 1); return new Speed(oversampledSpeed, SU.KilometersPerHour); } From b1b04e9f4b7c247fb52bafbf13f6fc2ff17f7fa2 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 4 May 2023 23:02:18 -0700 Subject: [PATCH 138/141] Check for null pins in serial ctor --- .../Sensors.Gnss.NeoM8/Driver/NeoM8.Serial.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Serial.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Serial.cs index 401e075517..e2f9659008 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Serial.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Gnss.NeoM8/Driver/NeoM8.Serial.cs @@ -34,8 +34,8 @@ public NeoM8(IMeadowDevice device, SerialPortName serialPortName, IPin resetPin, suffixDelimiter: Encoding.ASCII.GetBytes("\r\n"), preserveDelimiter: true, readBufferSize: 512), - device.CreateDigitalOutputPort(resetPin, true), - device.CreateDigitalInputPort(ppsPin, InterruptMode.EdgeRising, ResistorMode.InternalPullDown)) + (resetPin != null) ? device.CreateDigitalOutputPort(resetPin, true) : null, + (ppsPin != null) ? device.CreateDigitalInputPort(ppsPin, InterruptMode.EdgeRising, ResistorMode.InternalPullDown) : null) { } void InitializeSerial() From 639258480ebdce6dd32fde48ab41bf3bd2e535dd Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 5 May 2023 16:21:13 -0700 Subject: [PATCH 139/141] Delete develop-ci.yml since it doesn't work we can put it back if someone wants to invest it making it work correctly --- .github/workflows/develop-ci.yml | 67 -------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 .github/workflows/develop-ci.yml diff --git a/.github/workflows/develop-ci.yml b/.github/workflows/develop-ci.yml deleted file mode 100644 index 963d6437d2..0000000000 --- a/.github/workflows/develop-ci.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Develop Build - -on: - workflow_dispatch: - push: - branches: [ develop ] - -jobs: - build: - - runs-on: windows-latest - - steps: - - name: Checkout Meadow.Contracts - uses: actions/checkout@v3 - with: - repository: WildernessLabs/Meadow.Contracts - path: Meadow.Contracts - ref: develop - - - name: Checkout Meadow.Logging - uses: actions/checkout@v3 - with: - repository: WildernessLabs/Meadow.Logging - path: Meadow.Logging - ref: develop - - - name: Checkout Meadow.Units - uses: actions/checkout@v3 - with: - repository: WildernessLabs/Meadow.Units - path: Meadow.Units - ref: develop - - - name: Checkout Meadow.Core - uses: actions/checkout@v3 - with: - repository: WildernessLabs/Meadow.Core - path: Meadow.Core - ref: develop - - - name: Checkout MQTTnet - uses: actions/checkout@v3 - with: - repository: WildernessLabs/MQTTnet - path: MQTTnet - - - name: Checkout Meadow.Modbus - uses: actions/checkout@v3 - with: - repository: WildernessLabs/Meadow.Modbus - path: Meadow.Modbus - - - name: Checkout Meadow.Foundation - uses: actions/checkout@v3 - with: - path: Meadow.Foundation - ref: develop - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v1 - with: - dotnet-version: - 7.0.x - - - name: Build Meadow Foundation - run: dotnet build -c Release Meadow.Foundation/Source/Meadow.Foundation.sln From 17d0ce8224c5c06e2e72996486a66637915e1952 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Fri, 5 May 2023 18:55:46 -0700 Subject: [PATCH 140/141] Start polling task for PushButton --- Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs index 16d9936665..9d4177cc0f 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Buttons/PushButton.cs @@ -153,6 +153,7 @@ public PushButton(IDigitalInputPort inputPort) await Task.Delay(ButtonPollingInterval); } }, ctsPolling.Token, TaskCreationOptions.LongRunning); + t.Start(); } } From 4fa1da076c4db1d4ecaaca24873706d38001890b Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Sat, 6 May 2023 11:29:48 -0700 Subject: [PATCH 141/141] Nugetize Meadow.Foundation.Core for RC3-1 --- Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj index c426d65ed7..8010d4d2ef 100644 --- a/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj +++ b/Source/Meadow.Foundation.Core/Meadow.Foundation.Core.csproj @@ -24,6 +24,6 @@ - +
      /// Create a new PMSA003I sensor object @@ -116,22 +76,76 @@ public partial class Pmsa003I : /// /// The I2C bus public Pmsa003I(II2cBus i2cBus) - : base(i2cBus, 0x12) + : base(i2cBus, (byte)Addresses.Address_0x12) + { } + + /// + /// Starts updating the sensor on the updateInterval frequency specified + /// + public override void StartUpdating(TimeSpan? updateInterval = null) { + base.StartUpdating(updateInterval); + } + /// + /// Stop updating the sensor + /// The sensor will not respond to commands for 500ms + /// The call will delay the calling thread for 500ms + /// + public override void StopUpdating() + { + base.StopUpdating(); } - protected async Task Initialize() + protected override Task<(Density? PM1_0Std, + Density? PM2_5Std, + Density? PM10_0Std, + Density? PM1_0Env, + Density? PM2_5Env, + Density? PM10_0Env, + Concentration? particles_0_3microns, + Concentration? particles_0_5microns, + Concentration? particles_10microns, + Concentration? particles_25microns, + Concentration? particles_50microns, + Concentration? particles_100microns)> ReadSensor() { + var buffer = new byte[32]; + Peripheral.Read(buffer); + var span = buffer.AsSpan(); + span.Reverse(); + if (buffer[30..32].SequenceEqual(Preamble) == false) + { + throw new Exception("Preamble mismatch!"); + } + var messageLength = BitConverter.ToUInt16(span[28..30]); + if (messageLength != 28) + { + throw new Exception("Message is corrupt or has invalid length"); + } - } + var checksum = BitConverter.ToUInt16(buffer[2..4]); + // this is in big-endian format, so we need to reverse things... + var pm10Standard = new Density(BitConverter.ToUInt16(span[26..28]), Density.UnitType.MicroGramsPerMetersCubed); + var pm25Standard = new Density(BitConverter.ToUInt16(span[24..26]), Density.UnitType.MicroGramsPerMetersCubed); + var pm100Standard = new Density(BitConverter.ToUInt16(span[22..24]), Density.UnitType.MicroGramsPerMetersCubed); + var pm10Environmental = new Density(BitConverter.ToUInt16(span[20..22]), Density.UnitType.MicroGramsPerMetersCubed); + var pm25Environmental = new Density(BitConverter.ToUInt16(span[18..20]), Density.UnitType.MicroGramsPerMetersCubed); + var pm100Environmental = new Density(BitConverter.ToUInt16(span[16..18]), Density.UnitType.MicroGramsPerMetersCubed); + var p03um = new Concentration(BitConverter.ToUInt16(span[14..16]), Units.Concentration.UnitType.PartsPerMillion); + var p05um = new Concentration(BitConverter.ToUInt16(span[12..14]), Units.Concentration.UnitType.PartsPerMillion); + var p10um = new Concentration(BitConverter.ToUInt16(span[10..12]), Units.Concentration.UnitType.PartsPerMillion); + var p25um = new Concentration(BitConverter.ToUInt16(span[8..10]), Units.Concentration.UnitType.PartsPerMillion); + var p50um = new Concentration(BitConverter.ToUInt16(span[6..8]), Units.Concentration.UnitType.PartsPerMillion); + var p100um = new Concentration(BitConverter.ToUInt16(span[4..6]), Units.Concentration.UnitType.PartsPerMillion); + + Conditions = (pm10Standard, pm25Standard, pm100Standard, pm10Environmental, pm25Environmental, + pm100Environmental, p03um, p05um, p10um, p25um, p50um, p100um); - public Task Read() => throw new NotImplementedException(); + return Task.FromResult(Conditions); + } - public Task<(Concentration? PM1_0Std, Concentration? PM2_5Std, Concentration? PM10_0Std, - Concentration? PM1_0Env, Concentration? PM2_5Env, Concentration? PM10_0Env, Concentration? P03um, - Concentration? P05um, Concentration? P10um, Concentration? P25um, Concentration? P50um, Concentration? - P100um)> ReadSensor2() => - ReadSensor(); + async Task ISensor.Read() + => (await Read()).particles_0_3microns.Value; } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index 33fe78df21..a0dbb14b0c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -1,43 +1,39 @@ using Meadow; using Meadow.Devices; -using Meadow.Foundation; -using Meadow.Foundation.Leds; - -using System; -using System.Threading; -using System.Threading.Tasks; using Meadow.Foundation.Sensors.Environmental; using Meadow.Hardware; +using System; +using System.Threading.Tasks; namespace Pma003I_Sample { // Change F7FeatherV2 to F7FeatherV1 for V1.x boards - public class MeadowApp : App + public class MeadowApp : App { - private Pmsa003I _pmsa003I; + private Pmsa003I pmsa003I; - public override async Task Run() + public override Task Run() { Console.WriteLine("Run..."); - while (true) - { - var (pm10Std, pm25Std, pm100Std, pm10Env, pm25Env, pm100Env, p03Um, p05Um, p10Um, p25Um, p50Um, p100Um) = await _pmsa003I.ReadSensor2() - .ConfigureAwait(false); + pmsa003I.StartUpdating(TimeSpan.FromSeconds(2)); - Console.WriteLine( - $"{pm10Std}, {pm25Std}, {pm100Std}, {pm10Env}, {pm25Env}, {pm100Env}, {p03Um}, {p05Um}, {p10Um}, {p25Um}, {p50Um}, {p100Um}"); - } - - await base.Run(); + return base.Run(); } public override Task Initialize() { var bus = Device.CreateI2cBus(I2cBusSpeed.Standard); - _pmsa003I = new Pmsa003I(bus); + pmsa003I = new Pmsa003I(bus); + + pmsa003I.Updated += Pmsa003I_Updated; return base.Initialize(); } + + private void Pmsa003I_Updated(object sender, IChangeResult<(Meadow.Units.Density? PM1_0Std, Meadow.Units.Density? PM2_5Std, Meadow.Units.Density? PM10_0Std, Meadow.Units.Density? PM1_0Env, Meadow.Units.Density? PM2_5Env, Meadow.Units.Density? PM10_0Env, Meadow.Units.Concentration? particles_0_3microns, Meadow.Units.Concentration? particles_0_5microns, Meadow.Units.Concentration? particles_10microns, Meadow.Units.Concentration? particles_25microns, Meadow.Units.Concentration? particles_50microns, Meadow.Units.Concentration? particles_100microns)> e) + { + Console.WriteLine($"{e.New}"); + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj index 76de1c00a5..ed3619892f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj @@ -6,10 +6,7 @@ App - - - - + From 96bbbadeca1bca557df22f7452495b07b3244474 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Tue, 4 Apr 2023 08:50:54 -0700 Subject: [PATCH 011/141] Update property names --- .../Driver/Pmsa003I/Pmsa003I.cs | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs index 81b5c50779..82d007c68f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -8,14 +8,17 @@ namespace Meadow.Foundation.Sensors.Environmental { + /// + /// Represents a Pmsa003I + /// public partial class Pmsa003I : ByteCommsSensorBase<( - Density? PM1_0Std, //Particulate Matter 1 micro or less - Density? PM2_5Std, //Particulate Matter 2.5 micro or less - Density? PM10_0Std, //Particulate Matter 10 micro or less - Density? PM1_0Env, - Density? PM2_5Env, - Density? PM10_0Env, + Density? StandardParticulateMatter_1micron, //Particulate Matter 1 micro or less + Density? StandardParticulateMatter_2_5micron, //Particulate Matter 2.5 micro or less + Density? StandardParticulateMatter_10micron, //Particulate Matter 10 micro or less + Density? EnvironmentalParticulateMatter_1micron, + Density? EnvironmentalParticulateMatter_2_5micron, + Density? EnvironmentalParticulateMatter_10micron, Concentration? particles_0_3microns,//P03um, Concentration? particles_0_5microns, Concentration? particles_10microns, @@ -30,39 +33,39 @@ public partial class Pmsa003I : /// /// Raised when the Standard PM1.0 concentration changes /// - public event EventHandler> PM1_0StdConcentrationUpdated = delegate { }; + public event EventHandler> StandardParticulateMatter_1micronUpdated = delegate { }; /// /// Raised when the Standard PM2.5 concentration changes /// - public event EventHandler> PM2_5StdConcentrationUpdated = delegate { }; + public event EventHandler> StandardParticulateMatter_2_5micronUpdated = delegate { }; /// /// Raised when the Standard PM10.0 concentration changes /// - public event EventHandler> PM10_0StdConcentrationUpdated = delegate { }; + public event EventHandler> StandardParticulateMatter_10micron = delegate { }; /// /// Raised when the Environment PM1.0 concentration changes /// - public event EventHandler> PM1_0EnvConcentrationUpdated = delegate { }; + public event EventHandler> EnvironmentalParticulateMatter_1micron = delegate { }; /// /// Raised when the Environment PM2.5 concentration changes /// - public event EventHandler> PM2_5EnvConcentrationUpdated = delegate { }; + public event EventHandler> EnvironmentalParticulateMatter_2_5micron = delegate { }; /// /// Raised when the Environment PM10.0 concentration changes /// - public event EventHandler> PM10_0EnvConcentrationUpdated = delegate { }; - - public Density? PM1_0Std => Conditions.PM1_0Std; - public Density? PM2_5Std => Conditions.PM2_5Std; - public Density? PM10_0Std => Conditions.PM10_0Std; - public Density? PM1_0Env => Conditions.PM1_0Env; - public Density? PM2_5Env => Conditions.PM2_5Env; - public Density? PM10_0Env => Conditions.PM10_0Env; + public event EventHandler> EnvironmentalParticulateMatter_10micron = delegate { }; + + public Density? PM1_0Std => Conditions.StandardParticulateMatter_1micron; + public Density? PM2_5Std => Conditions.StandardParticulateMatter_2_5micron; + public Density? PM10_0Std => Conditions.StandardParticulateMatter_10micron; + public Density? PM1_0Env => Conditions.EnvironmentalParticulateMatter_1micron; + public Density? PM2_5Env => Conditions.EnvironmentalParticulateMatter_2_5micron; + public Density? PM10_0Env => Conditions.EnvironmentalParticulateMatter_10micron; public Concentration? ConcentrationOf0_3micronParticles => Conditions.particles_0_3microns; public Concentration? ConcentrationOf0_5micronParticles => Conditions.particles_0_5microns; public Concentration? ConcentrationOf10micronParticles => Conditions.particles_10microns; @@ -97,12 +100,13 @@ public override void StopUpdating() base.StopUpdating(); } - protected override Task<(Density? PM1_0Std, - Density? PM2_5Std, - Density? PM10_0Std, - Density? PM1_0Env, - Density? PM2_5Env, - Density? PM10_0Env, + protected override Task<( + Density? StandardParticulateMatter_1micron, + Density? StandardParticulateMatter_2_5micron, + Density? StandardParticulateMatter_10micron, + Density? EnvironmentalParticulateMatter_1micron, + Density? EnvironmentalParticulateMatter_2_5micron, + Density? EnvironmentalParticulateMatter_10micron, Concentration? particles_0_3microns, Concentration? particles_0_5microns, Concentration? particles_10microns, From 7e48de1e0ec520517540e26e33aaf285787ed686 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 09:11:15 -0700 Subject: [PATCH 012/141] Event handler progress for PMSA003I --- .../Driver/Pmsa003I/Pmsa003I.cs | 112 +++++++++++++++--- 1 file changed, 94 insertions(+), 18 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs index 82d007c68f..1cddadca1a 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -9,17 +9,17 @@ namespace Meadow.Foundation.Sensors.Environmental { /// - /// Represents a Pmsa003I + /// Represents a Pmsa003I AQI particulate matter sensor /// public partial class Pmsa003I : ByteCommsSensorBase<( - Density? StandardParticulateMatter_1micron, //Particulate Matter 1 micro or less - Density? StandardParticulateMatter_2_5micron, //Particulate Matter 2.5 micro or less - Density? StandardParticulateMatter_10micron, //Particulate Matter 10 micro or less + Density? StandardParticulateMatter_1micron, //Particulate Matter 1 micron or less + Density? StandardParticulateMatter_2_5micron, //Particulate Matter 2.5 micron or less + Density? StandardParticulateMatter_10micron, //Particulate Matter 10 micron or less Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - Concentration? particles_0_3microns,//P03um, + Concentration? particles_0_3microns, Concentration? particles_0_5microns, Concentration? particles_10microns, Concentration? particles_25microns, @@ -28,49 +28,125 @@ public partial class Pmsa003I : IConcentrationSensor { public Concentration? Concentration { get; } + + /// + /// Raised when the Standard particulate matter PM2.5 density changes + /// public event EventHandler> ConcentrationUpdated; /// - /// Raised when the Standard PM1.0 concentration changes + /// Raised when the Standard particulate matter PM1.0 density changes + /// + public event EventHandler> StandardPM_1micronUpdated = delegate { }; + + /// + /// Raised when the Standard particulate matter PM2.5 density changes + /// + public event EventHandler> StandardPM_2_5micronUpdated = delegate { }; + + /// + /// Raised when the Standard particulate matter PM10.0 density changes + /// + public event EventHandler> StandardPM_10micronUpdated = delegate { }; + + /// + /// Raised when the Environment particulate matter PM1.0 density changes + /// + public event EventHandler> EnvironmentalPM_1micronUpdated = delegate { }; + + /// + /// Raised when the Environment particulate matter PM2.5 density changes /// - public event EventHandler> StandardParticulateMatter_1micronUpdated = delegate { }; + public event EventHandler> EnvironmentalPM_2_5micronUpdated = delegate { }; /// - /// Raised when the Standard PM2.5 concentration changes + /// Raised when the Environment particulate matter PM10.0 density changes /// - public event EventHandler> StandardParticulateMatter_2_5micronUpdated = delegate { }; + public event EventHandler> EnvironmentalPM_10micronUpdated = delegate { }; /// - /// Raised when the Standard PM10.0 concentration changes + /// Raised when the concentration of 0-0.3 micron particles changes /// - public event EventHandler> StandardParticulateMatter_10micron = delegate { }; + public event EventHandler> ConcentrationOf0_3micronParticlesUpdated = delegate { }; /// - /// Raised when the Environment PM1.0 concentration changes + /// Raised when the concentration of 0.3-0.5 micron particles changes /// - public event EventHandler> EnvironmentalParticulateMatter_1micron = delegate { }; + public event EventHandler> ConcentrationOf0_5micronParticlesUpdated = delegate { }; /// - /// Raised when the Environment PM2.5 concentration changes + /// Raised when the concentration of 0.5-10 micron particles changes /// - public event EventHandler> EnvironmentalParticulateMatter_2_5micron = delegate { }; + public event EventHandler> ConcentrationOf10micronParticlesUpdated = delegate { }; /// - /// Raised when the Environment PM10.0 concentration changes + /// Raised when the concentration of 10-25 micron particles changes /// - public event EventHandler> EnvironmentalParticulateMatter_10micron = delegate { }; + public event EventHandler> ConcentrationOf25micronParticlesUpdated = delegate { }; + /// + /// Raised when the concentration of 25-50 micron particles changes + /// + public event EventHandler> ConcentrationOf50micronParticlesUpdated = delegate { }; + + /// + /// Raised when the concentration of 50-100 micron particles changes + /// + public event EventHandler> ConcentrationOf100micronParticlesUpdated = delegate { }; + + /// + /// Standard particulate matter PM1.0 density + /// public Density? PM1_0Std => Conditions.StandardParticulateMatter_1micron; + + /// + /// Standard particulate matter PM2.5 density + /// public Density? PM2_5Std => Conditions.StandardParticulateMatter_2_5micron; + + /// + /// Standard particulate matter PM10 density + /// public Density? PM10_0Std => Conditions.StandardParticulateMatter_10micron; + + /// + /// Standard particulate matter PM1.0 density + /// public Density? PM1_0Env => Conditions.EnvironmentalParticulateMatter_1micron; + + /// + /// Standard particulate matter PM2.5 density + /// public Density? PM2_5Env => Conditions.EnvironmentalParticulateMatter_2_5micron; + + /// + /// Standard particulate matter PM10 density + /// public Density? PM10_0Env => Conditions.EnvironmentalParticulateMatter_10micron; + + /// + /// Concentration of 0 - 0.3 micron particles + /// public Concentration? ConcentrationOf0_3micronParticles => Conditions.particles_0_3microns; + /// + /// Concentration of 0.3 - 0.5 micron particles + /// public Concentration? ConcentrationOf0_5micronParticles => Conditions.particles_0_5microns; + /// + /// Concentration of 0.5 - 10 micron particles + /// public Concentration? ConcentrationOf10micronParticles => Conditions.particles_10microns; + /// + /// Concentration of 0.5 - 10 micron particles + /// public Concentration? ConcentrationOf25micronParticles => Conditions.particles_25microns; + /// + /// Concentration of 10 - 50 micron particles + /// public Concentration? ConcentrationOf50micronParticles => Conditions.particles_50microns; + /// + /// Concentration of 50 - 100 micron particles + /// public Concentration? ConcentrationOf100micronParticles => Conditions.particles_100microns; /// @@ -150,6 +226,6 @@ public override void StopUpdating() } async Task ISensor.Read() - => (await Read()).particles_0_3microns.Value; + => (await Read()).particles_25microns.Value; } } \ No newline at end of file From cf68862a11ac4ba0dd10ca234f594964826b1fcd Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 11:49:02 -0700 Subject: [PATCH 013/141] Add RaiseChangeAndNotify method to Pmsa003i --- .../Driver/Pmsa003I/Pmsa003I.cs | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs index 1cddadca1a..c26a1c54ab 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -225,6 +225,73 @@ public override void StopUpdating() return Task.FromResult(Conditions); } + protected override void RaiseEventsAndNotify( + IChangeResult<(Density? StandardParticulateMatter_1micron, + Density? StandardParticulateMatter_2_5micron, + Density? StandardParticulateMatter_10micron, + Density? EnvironmentalParticulateMatter_1micron, + Density? EnvironmentalParticulateMatter_2_5micron, + Density? EnvironmentalParticulateMatter_10micron, + Concentration? particles_0_3microns, + Concentration? particles_0_5microns, + Concentration? particles_10microns, + Concentration? particles_25microns, + Concentration? particles_50microns, + Concentration? particles_100microns)> changeResult) + { + if (changeResult.New.StandardParticulateMatter_1micron is { } SPM0_1) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(SPM0_1, changeResult.Old.Value.StandardParticulateMatter_1micron)); + } + if (changeResult.New.StandardParticulateMatter_2_5micron is { } SPM0_2_5) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(SPM0_2_5, changeResult.Old.Value.StandardParticulateMatter_2_5micron)); + } + if (changeResult.New.StandardParticulateMatter_10micron is { } SPM0_10) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(SPM0_10, changeResult.Old.Value.StandardParticulateMatter_10micron)); + } + if (changeResult.New.EnvironmentalParticulateMatter_1micron is { } EM0_1) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(EM0_1, changeResult.Old.Value.EnvironmentalParticulateMatter_1micron)); + } + if (changeResult.New.EnvironmentalParticulateMatter_2_5micron is { } EM0_2_5) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(EM0_2_5, changeResult.Old.Value.EnvironmentalParticulateMatter_2_5micron)); + } + if (changeResult.New.EnvironmentalParticulateMatter_10micron is { } EM0_10) + { + StandardPM_1micronUpdated?.Invoke(this, new ChangeResult(EM0_10, changeResult.Old.Value.EnvironmentalParticulateMatter_10micron)); + } + + if (changeResult.New.particles_0_3microns is { } P_0_3) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_3, changeResult.Old.Value.particles_0_3microns)); + } + if (changeResult.New.particles_0_5microns is { } P_0_5) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); + } + if (changeResult.New.particles_10microns is { } P_10) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); + } + if (changeResult.New.particles_0_3microns is { } P_25) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); + } + if (changeResult.New.particles_0_3microns is { } P_50) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); + } + if (changeResult.New.particles_0_3microns is { } P_100) + { + ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); + } + + base.RaiseEventsAndNotify(changeResult); + } + async Task ISensor.Read() => (await Read()).particles_25microns.Value; } From ba93d2677d52b19f18777aa8b8b109cb00af8818 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 12:36:38 -0700 Subject: [PATCH 014/141] MPSA300I cleanup events and sample --- .../Driver/Pmsa003I/Pmsa003I.cs | 21 +++++++++----- .../Samples/Pma003I_Sample/MeadowApp.cs | 29 +++++++++++++++++-- 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs index c26a1c54ab..5836ec90b7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs @@ -225,6 +225,10 @@ public override void StopUpdating() return Task.FromResult(Conditions); } + /// + /// Raise change events for subscribers + /// + /// The change result with the current sensor data protected override void RaiseEventsAndNotify( IChangeResult<(Density? StandardParticulateMatter_1micron, Density? StandardParticulateMatter_2_5micron, @@ -270,23 +274,24 @@ protected override void RaiseEventsAndNotify( } if (changeResult.New.particles_0_5microns is { } P_0_5) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); + ConcentrationOf0_5micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); } if (changeResult.New.particles_10microns is { } P_10) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); + ConcentrationOf10micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); + ConcentrationUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); } - if (changeResult.New.particles_0_3microns is { } P_25) + if (changeResult.New.particles_25microns is { } P_25) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); + ConcentrationOf25micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); } - if (changeResult.New.particles_0_3microns is { } P_50) + if (changeResult.New.particles_50microns is { } P_50) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); + ConcentrationOf50micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); } - if (changeResult.New.particles_0_3microns is { } P_100) + if (changeResult.New.particles_100microns is { } P_100) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); + ConcentrationOf100micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); } base.RaiseEventsAndNotify(changeResult); diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index a0dbb14b0c..d5ca90cd0b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -2,6 +2,7 @@ using Meadow.Devices; using Meadow.Foundation.Sensors.Environmental; using Meadow.Hardware; +using Meadow.Units; using System; using System.Threading.Tasks; @@ -31,9 +32,33 @@ public override Task Initialize() return base.Initialize(); } - private void Pmsa003I_Updated(object sender, IChangeResult<(Meadow.Units.Density? PM1_0Std, Meadow.Units.Density? PM2_5Std, Meadow.Units.Density? PM10_0Std, Meadow.Units.Density? PM1_0Env, Meadow.Units.Density? PM2_5Env, Meadow.Units.Density? PM10_0Env, Meadow.Units.Concentration? particles_0_3microns, Meadow.Units.Concentration? particles_0_5microns, Meadow.Units.Concentration? particles_10microns, Meadow.Units.Concentration? particles_25microns, Meadow.Units.Concentration? particles_50microns, Meadow.Units.Concentration? particles_100microns)> e) + private void Pmsa003I_Updated(object sender, IChangeResult<( + Density? StandardParticulateMatter_1micron, + Density? StandardParticulateMatter_2_5micron, + Density? StandardParticulateMatter_10micron, + Density? EnvironmentalParticulateMatter_1micron, + Density? EnvironmentalParticulateMatter_2_5micron, + Density? EnvironmentalParticulateMatter_10micron, + Concentration? particles_0_3microns, + Concentration? particles_0_5microns, + Concentration? particles_10microns, + Concentration? particles_25microns, + Concentration? particles_50microns, + Concentration? particles_100microns)> e) { - Console.WriteLine($"{e.New}"); + Console.WriteLine($"Standard Particulate Matter 1 micron: {e.New.StandardParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Console.WriteLine($"Standard Particulate Matter 2_5micron: {e.New.StandardParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Console.WriteLine($"Standard Particulate Matter 10 micron: {e.New.StandardParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Console.WriteLine($"Environmental Particulate Matter 1 micron: {e.New.EnvironmentalParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Console.WriteLine($"Environmental Particulate Matter 2.5 micron: {e.New.EnvironmentalParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Console.WriteLine($"Environmental Particulate Matter 10 micron: {e.New.EnvironmentalParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); ; + + Console.WriteLine($"Concentration of particles - 0.3 microns: {e.New.particles_0_3microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Concentration of particles - 0.5 microns: {e.New.particles_0_5microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Concentration of particles - 10 microns: {e.New.particles_10microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Concentration of particles - 25 microns: {e.New.particles_25microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Concentration of particles - 50 microns: {e.New.particles_50microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Concentration of particles - 100 microns: {e.New.particles_100microns.Value.PartsPerBillion} ppb"); } } } \ No newline at end of file From 770c1542c4443c9e61ba8c066990a7d96519fab4 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 13:16:09 -0700 Subject: [PATCH 015/141] PMSA300I cleanup --- .../Sensors.Environmental.Pmsa003I.csproj | 10 -- ...03I.Constants.cs => Pmsa003i.Constants.cs} | 2 +- .../Pmsa003I.Enums.cs => Pmsa003i.Enums.cs} | 2 +- .../{Pmsa003I/Pmsa003I.cs => Pmsa003i.cs} | 121 +++++++++--------- .../Sensors.Environmental.Pmsa003i.csproj | 22 ++++ .../Samples/Pma003I_Sample/MeadowApp.cs | 38 +++--- .../Pma003I_Sample/Pma003I_Sample.csproj | 2 +- Source/Meadow.Foundation.sln | 22 ++-- 8 files changed, 112 insertions(+), 107 deletions(-) delete mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/{Pmsa003I/Pmsa003I.Constants.cs => Pmsa003i.Constants.cs} (88%) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/{Pmsa003I/Pmsa003I.Enums.cs => Pmsa003i.Enums.cs} (93%) rename Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/{Pmsa003I/Pmsa003I.cs => Pmsa003i.cs} (65%) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj deleted file mode 100644 index 06ab4dce1b..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Sensors.Environmental.Pmsa003I.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netstandard2.1 - Library - Pmsa003I - - - - - \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Constants.cs similarity index 88% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Constants.cs index e5504ccba7..53aaead995 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Constants.cs @@ -1,6 +1,6 @@ namespace Meadow.Foundation.Sensors.Environmental { - public partial class Pmsa003I + public partial class Pmsa003i { // This is reversed because we reverse the whole message because it is big-endian and it makes converting values easier private static readonly byte[] Preamble = { 0x4d, 0x42 }; } diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs similarity index 93% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs index b6fdd9dded..82cb2a69cb 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.Enums.cs @@ -1,6 +1,6 @@ namespace Meadow.Foundation.Sensors.Environmental { - public partial class Pmsa003I + public partial class Pmsa003i { /// /// Valid I2C addresses for the sensor diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs similarity index 65% rename from Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs index 5836ec90b7..ab04ac91e3 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003i.cs @@ -1,6 +1,4 @@ using Meadow.Hardware; -using Meadow.Peripherals.Sensors; -using Meadow.Peripherals.Sensors.Environmental; using Meadow.Units; using System; using System.Linq; @@ -9,9 +7,9 @@ namespace Meadow.Foundation.Sensors.Environmental { /// - /// Represents a Pmsa003I AQI particulate matter sensor + /// Represents a Pmsa003i AQI particulate matter sensor /// - public partial class Pmsa003I : + public partial class Pmsa003i : ByteCommsSensorBase<( Density? StandardParticulateMatter_1micron, //Particulate Matter 1 micron or less Density? StandardParticulateMatter_2_5micron, //Particulate Matter 2.5 micron or less @@ -19,13 +17,12 @@ public partial class Pmsa003I : Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - Concentration? particles_0_3microns, - Concentration? particles_0_5microns, - Concentration? particles_10microns, - Concentration? particles_25microns, - Concentration? particles_50microns, - Concentration? particles_100microns)>, - IConcentrationSensor + int? particles_0_3microns, + int? particles_0_5microns, + int? particles_10microns, + int? particles_25microns, + int? particles_50microns, + int? particles_100microns)> { public Concentration? Concentration { get; } @@ -65,34 +62,34 @@ public partial class Pmsa003I : public event EventHandler> EnvironmentalPM_10micronUpdated = delegate { }; /// - /// Raised when the concentration of 0-0.3 micron particles changes + /// Raised when the number of of 0-0.3 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> ConcentrationOf0_3micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf0_3micronParticlesUpdated = delegate { }; /// - /// Raised when the concentration of 0.3-0.5 micron particles changes + /// Raised when the number of of 0.3-0.5 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> ConcentrationOf0_5micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf0_5micronParticlesUpdated = delegate { }; /// - /// Raised when the concentration of 0.5-10 micron particles changes + /// Raised when the number of of 0.5-10 micron particles changes /// - public event EventHandler> ConcentrationOf10micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf10micronParticlesUpdated = delegate { }; /// - /// Raised when the concentration of 10-25 micron particles changes + /// Raised when the number of of 10-25 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> ConcentrationOf25micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf25micronParticlesUpdated = delegate { }; /// - /// Raised when the concentration of 25-50 micron particles changes + /// Raised when the number of of 25-50 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> ConcentrationOf50micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf50micronParticlesUpdated = delegate { }; /// - /// Raised when the concentration of 50-100 micron particles changes + /// Raised when the number of 50-100 micron particles (in 0.1 liters of air) changes /// - public event EventHandler> ConcentrationOf100micronParticlesUpdated = delegate { }; + public event EventHandler> CountOf100micronParticlesUpdated = delegate { }; /// /// Standard particulate matter PM1.0 density @@ -125,36 +122,36 @@ public partial class Pmsa003I : public Density? PM10_0Env => Conditions.EnvironmentalParticulateMatter_10micron; /// - /// Concentration of 0 - 0.3 micron particles + /// Number of 0 - 0.3 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf0_3micronParticles => Conditions.particles_0_3microns; + public int? CountOf0_3micronParticles => Conditions.particles_0_3microns; /// - /// Concentration of 0.3 - 0.5 micron particles + /// Number of of 0.3 - 0.5 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf0_5micronParticles => Conditions.particles_0_5microns; + public int? CountOf0_5micronParticles => Conditions.particles_0_5microns; /// - /// Concentration of 0.5 - 10 micron particles + /// Number of of 0.5 - 10 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf10micronParticles => Conditions.particles_10microns; + public int? CountOf10micronParticles => Conditions.particles_10microns; /// - /// Concentration of 0.5 - 10 micron particles + /// Number of of 0.5 - 10 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf25micronParticles => Conditions.particles_25microns; + public int? CountOf25micronParticles => Conditions.particles_25microns; /// - /// Concentration of 10 - 50 micron particles + /// Number of of 10 - 50 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf50micronParticles => Conditions.particles_50microns; + public int? CountOf50micronParticles => Conditions.particles_50microns; /// - /// Concentration of 50 - 100 micron particles + /// Number of of 50 - 100 micron particles in 0.1 liters of air /// - public Concentration? ConcentrationOf100micronParticles => Conditions.particles_100microns; + public int? CountOf100micronParticles => Conditions.particles_100microns; /// /// Create a new PMSA003I sensor object /// /// /// The I2C bus - public Pmsa003I(II2cBus i2cBus) + public Pmsa003i(II2cBus i2cBus) : base(i2cBus, (byte)Addresses.Address_0x12) { } @@ -183,12 +180,12 @@ public override void StopUpdating() Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - Concentration? particles_0_3microns, - Concentration? particles_0_5microns, - Concentration? particles_10microns, - Concentration? particles_25microns, - Concentration? particles_50microns, - Concentration? particles_100microns)> ReadSensor() + int? particles_0_3microns, + int? particles_0_5microns, + int? particles_10microns, + int? particles_25microns, + int? particles_50microns, + int? particles_100microns)> ReadSensor() { var buffer = new byte[32]; Peripheral.Read(buffer); @@ -212,12 +209,12 @@ public override void StopUpdating() var pm10Environmental = new Density(BitConverter.ToUInt16(span[20..22]), Density.UnitType.MicroGramsPerMetersCubed); var pm25Environmental = new Density(BitConverter.ToUInt16(span[18..20]), Density.UnitType.MicroGramsPerMetersCubed); var pm100Environmental = new Density(BitConverter.ToUInt16(span[16..18]), Density.UnitType.MicroGramsPerMetersCubed); - var p03um = new Concentration(BitConverter.ToUInt16(span[14..16]), Units.Concentration.UnitType.PartsPerMillion); - var p05um = new Concentration(BitConverter.ToUInt16(span[12..14]), Units.Concentration.UnitType.PartsPerMillion); - var p10um = new Concentration(BitConverter.ToUInt16(span[10..12]), Units.Concentration.UnitType.PartsPerMillion); - var p25um = new Concentration(BitConverter.ToUInt16(span[8..10]), Units.Concentration.UnitType.PartsPerMillion); - var p50um = new Concentration(BitConverter.ToUInt16(span[6..8]), Units.Concentration.UnitType.PartsPerMillion); - var p100um = new Concentration(BitConverter.ToUInt16(span[4..6]), Units.Concentration.UnitType.PartsPerMillion); + var p03um = BitConverter.ToUInt16(span[14..16]); + var p05um = BitConverter.ToUInt16(span[12..14]); + var p10um = BitConverter.ToUInt16(span[10..12]); + var p25um = BitConverter.ToUInt16(span[8..10]); + var p50um = BitConverter.ToUInt16(span[6..8]); + var p100um = BitConverter.ToUInt16(span[4..6]); Conditions = (pm10Standard, pm25Standard, pm100Standard, pm10Environmental, pm25Environmental, pm100Environmental, p03um, p05um, p10um, p25um, p50um, p100um); @@ -236,12 +233,12 @@ protected override void RaiseEventsAndNotify( Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - Concentration? particles_0_3microns, - Concentration? particles_0_5microns, - Concentration? particles_10microns, - Concentration? particles_25microns, - Concentration? particles_50microns, - Concentration? particles_100microns)> changeResult) + int? particles_0_3microns, + int? particles_0_5microns, + int? particles_10microns, + int? particles_25microns, + int? particles_50microns, + int? particles_100microns)> changeResult) { if (changeResult.New.StandardParticulateMatter_1micron is { } SPM0_1) { @@ -270,34 +267,30 @@ protected override void RaiseEventsAndNotify( if (changeResult.New.particles_0_3microns is { } P_0_3) { - ConcentrationOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_3, changeResult.Old.Value.particles_0_3microns)); + CountOf0_3micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_3, changeResult.Old.Value.particles_0_3microns)); } if (changeResult.New.particles_0_5microns is { } P_0_5) { - ConcentrationOf0_5micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); + CountOf0_5micronParticlesUpdated?.Invoke(this, new ChangeResult(P_0_5, changeResult.Old.Value.particles_0_5microns)); } if (changeResult.New.particles_10microns is { } P_10) { - ConcentrationOf10micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); - ConcentrationUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); + CountOf10micronParticlesUpdated?.Invoke(this, new ChangeResult(P_10, changeResult.Old.Value.particles_10microns)); } if (changeResult.New.particles_25microns is { } P_25) { - ConcentrationOf25micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); + CountOf25micronParticlesUpdated?.Invoke(this, new ChangeResult(P_25, changeResult.Old.Value.particles_25microns)); } if (changeResult.New.particles_50microns is { } P_50) { - ConcentrationOf50micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); + CountOf50micronParticlesUpdated?.Invoke(this, new ChangeResult(P_50, changeResult.Old.Value.particles_50microns)); } if (changeResult.New.particles_100microns is { } P_100) { - ConcentrationOf100micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); + CountOf100micronParticlesUpdated?.Invoke(this, new ChangeResult(P_100, changeResult.Old.Value.particles_100microns)); } base.RaiseEventsAndNotify(changeResult); } - - async Task ISensor.Read() - => (await Read()).particles_25microns.Value; } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj new file mode 100644 index 0000000000..338879f461 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Sensors.Environmental.Pmsa003i.csproj @@ -0,0 +1,22 @@ + + + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + Pmsa300i + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Sensors.Environmental.Pmsa300i + https://github.com/WildernessLabs/Meadow.Foundation + Meadow,Meadow.Foundation,Environmental,Pmsa300i,gas,particle,particulate,matter,AQI,air,quality + 0.1.0 + true + PMSA300I I2C particulate matter AQI sensor + + + + + + \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index d5ca90cd0b..ab99d70c74 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -6,18 +6,18 @@ using System; using System.Threading.Tasks; -namespace Pma003I_Sample +namespace Pmsa003i_Sample { // Change F7FeatherV2 to F7FeatherV1 for V1.x boards - public class MeadowApp : App + public class MeadowApp : App { - private Pmsa003I pmsa003I; + private Pmsa003i pmsa003i; public override Task Run() { Console.WriteLine("Run..."); - pmsa003I.StartUpdating(TimeSpan.FromSeconds(2)); + pmsa003i.StartUpdating(TimeSpan.FromSeconds(2)); return base.Run(); } @@ -25,26 +25,26 @@ public override Task Run() public override Task Initialize() { var bus = Device.CreateI2cBus(I2cBusSpeed.Standard); - pmsa003I = new Pmsa003I(bus); + pmsa003i = new Pmsa003i(bus); - pmsa003I.Updated += Pmsa003I_Updated; + pmsa003i.Updated += Pmsa003i_Updated; return base.Initialize(); } - private void Pmsa003I_Updated(object sender, IChangeResult<( + private void Pmsa003i_Updated(object sender, IChangeResult<( Density? StandardParticulateMatter_1micron, Density? StandardParticulateMatter_2_5micron, Density? StandardParticulateMatter_10micron, Density? EnvironmentalParticulateMatter_1micron, Density? EnvironmentalParticulateMatter_2_5micron, Density? EnvironmentalParticulateMatter_10micron, - Concentration? particles_0_3microns, - Concentration? particles_0_5microns, - Concentration? particles_10microns, - Concentration? particles_25microns, - Concentration? particles_50microns, - Concentration? particles_100microns)> e) + int? particles_0_3microns, + int? particles_0_5microns, + int? particles_10microns, + int? particles_25microns, + int? particles_50microns, + int? particles_100microns)> e) { Console.WriteLine($"Standard Particulate Matter 1 micron: {e.New.StandardParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); Console.WriteLine($"Standard Particulate Matter 2_5micron: {e.New.StandardParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); @@ -53,12 +53,12 @@ private void Pmsa003I_Updated(object sender, IChangeResult<( Console.WriteLine($"Environmental Particulate Matter 2.5 micron: {e.New.EnvironmentalParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); Console.WriteLine($"Environmental Particulate Matter 10 micron: {e.New.EnvironmentalParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); ; - Console.WriteLine($"Concentration of particles - 0.3 microns: {e.New.particles_0_3microns.Value.PartsPerBillion} ppb"); - Console.WriteLine($"Concentration of particles - 0.5 microns: {e.New.particles_0_5microns.Value.PartsPerBillion} ppb"); - Console.WriteLine($"Concentration of particles - 10 microns: {e.New.particles_10microns.Value.PartsPerBillion} ppb"); - Console.WriteLine($"Concentration of particles - 25 microns: {e.New.particles_25microns.Value.PartsPerBillion} ppb"); - Console.WriteLine($"Concentration of particles - 50 microns: {e.New.particles_50microns.Value.PartsPerBillion} ppb"); - Console.WriteLine($"Concentration of particles - 100 microns: {e.New.particles_100microns.Value.PartsPerBillion} ppb"); + Console.WriteLine($"Count of particles - 0.3 microns: {e.New.particles_0_3microns.Value} in 0.1 liters of air"); + Console.WriteLine($"Count of particles - 0.5 microns: {e.New.particles_0_5microns.Value} in 0.1 liters of air"); + Console.WriteLine($"Count of particles - 10 microns: {e.New.particles_10microns.Value} in 0.1 liters of air"); + Console.WriteLine($"Count of particles - 25 microns: {e.New.particles_25microns.Value} in 0.1 liters of air"); + Console.WriteLine($"Count of particles - 50 microns: {e.New.particles_50microns.Value} in 0.1 liters of air"); + Console.WriteLine($"Count of particles - 100 microns: {e.New.particles_100microns.Value} in 0.1 liters of air"); } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj index ed3619892f..a5797baf3f 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/Pma003I_Sample.csproj @@ -7,7 +7,7 @@ - + diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index 4acdcb9f65..bfc4ce2dab 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1139,13 +1139,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Gtk", "Meadow.Foun EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Epd5in65f_Sample", "Meadow.Foundation.Peripherals\Displays.ePaperWaveShare\Samples\Epd5in65f_Sample\Epd5in65f_Sample.csproj", "{16A387A9-80AA-4080-85F6-10F53D6EC99E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003I", "Pmsa003I", "{AD6DD7B6-B896-44B9-904E-9330C2C842C7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensors.Environmental.Pmsa003I", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Pmsa003I\Sensors.Environmental.Pmsa003I.csproj", "{AE3BDF20-5078-49A7-AFDE-47A249418394}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Pmsa003i", "Pmsa003i", "{AD6DD7B6-B896-44B9-904E-9330C2C842C7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{A3F37EFB-9686-4074-9962-5F731C52D919}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pma003I_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Samples\Pma003I_Sample\Pma003I_Sample.csproj", "{B2910299-B232-4CAB-AA13-591ABDDC0ED4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ArducamMini", "ArducamMini", "{C9DEB9C4-050B-4C5D-8893-AF7041F89867}" EndProject @@ -1183,6 +1181,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Displays.Led.SixteenSegment EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixteenSegment_Sample", "Meadow.Foundation.Peripherals\Displays.Led.SixteenSegment\Samples\SixteenSegment_Sample\SixteenSegment_Sample.csproj", "{A470E563-7ADD-4A76-91AE-C1190134D3FA}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Pmsa003i", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Sensors.Environmental.Pmsa003i.csproj", "{B935965C-0FFC-4D7B-BDBC-B17C46C785F0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2735,12 +2735,6 @@ Global {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.ActiveCfg = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Build.0 = Release|Any CPU {16A387A9-80AA-4080-85F6-10F53D6EC99E}.Release|Any CPU.Deploy.0 = Release|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.Build.0 = Release|Any CPU - {AE3BDF20-5078-49A7-AFDE-47A249418394}.Release|Any CPU.Deploy.0 = Release|Any CPU {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU {B2910299-B232-4CAB-AA13-591ABDDC0ED4}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -2801,6 +2795,12 @@ Global {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Build.0 = Release|Any CPU {A470E563-7ADD-4A76-91AE-C1190134D3FA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Build.0 = Release|Any CPU + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3370,7 +3370,6 @@ Global {768E2B04-FBE8-4464-B5DE-F5AA010E9D33} = {14ACE12B-5B23-4FF3-B3C2-BFECB21064A6} {16A387A9-80AA-4080-85F6-10F53D6EC99E} = {7311794D-7D2F-47E8-A5B0-C216CBD64A13} {AD6DD7B6-B896-44B9-904E-9330C2C842C7} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} - {AE3BDF20-5078-49A7-AFDE-47A249418394} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} {A3F37EFB-9686-4074-9962-5F731C52D919} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} {B2910299-B232-4CAB-AA13-591ABDDC0ED4} = {A3F37EFB-9686-4074-9962-5F731C52D919} {C9DEB9C4-050B-4C5D-8893-AF7041F89867} = {91DE515A-DFF9-4B75-809C-F56C51222310} @@ -3391,6 +3390,7 @@ Global {13D97CCB-2CFF-4AB8-A170-701525DA740B} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} {70A3BC90-AB6A-4498-BFDE-07AA25823036} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} {A470E563-7ADD-4A76-91AE-C1190134D3FA} = {13D97CCB-2CFF-4AB8-A170-701525DA740B} + {B935965C-0FFC-4D7B-BDBC-B17C46C785F0} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From 586c548a2d58abd2cd574c30cf93eedc417a8b98 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 13:18:49 -0700 Subject: [PATCH 016/141] Add snip/snop --- .../Samples/Pma003I_Sample/MeadowApp.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index ab99d70c74..cac0239af1 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -11,7 +11,9 @@ namespace Pmsa003i_Sample // Change F7FeatherV2 to F7FeatherV1 for V1.x boards public class MeadowApp : App { - private Pmsa003i pmsa003i; + // + + Pmsa003i pmsa003i; public override Task Run() { @@ -60,5 +62,7 @@ private void Pmsa003i_Updated(object sender, IChangeResult<( Console.WriteLine($"Count of particles - 50 microns: {e.New.particles_50microns.Value} in 0.1 liters of air"); Console.WriteLine($"Count of particles - 100 microns: {e.New.particles_100microns.Value} in 0.1 liters of air"); } + + // } } \ No newline at end of file From fd1816f8bbdd0cfaa17a55c204dea495e940d583 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 13:21:29 -0700 Subject: [PATCH 017/141] Switch console writelines to logger --- .../Samples/Pma003I_Sample/MeadowApp.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index cac0239af1..ccdc167cc8 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -17,7 +17,7 @@ public class MeadowApp : App public override Task Run() { - Console.WriteLine("Run..."); + Resolver.Log.Info("Run..."); pmsa003i.StartUpdating(TimeSpan.FromSeconds(2)); @@ -48,19 +48,19 @@ private void Pmsa003i_Updated(object sender, IChangeResult<( int? particles_50microns, int? particles_100microns)> e) { - Console.WriteLine($"Standard Particulate Matter 1 micron: {e.New.StandardParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); - Console.WriteLine($"Standard Particulate Matter 2_5micron: {e.New.StandardParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); - Console.WriteLine($"Standard Particulate Matter 10 micron: {e.New.StandardParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); - Console.WriteLine($"Environmental Particulate Matter 1 micron: {e.New.EnvironmentalParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); - Console.WriteLine($"Environmental Particulate Matter 2.5 micron: {e.New.EnvironmentalParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); - Console.WriteLine($"Environmental Particulate Matter 10 micron: {e.New.EnvironmentalParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); ; + Resolver.Log.Info($"Standard Particulate Matter 1 micron: {e.New.StandardParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Resolver.Log.Info($"Standard Particulate Matter 2_5micron: {e.New.StandardParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Resolver.Log.Info($"Standard Particulate Matter 10 micron: {e.New.StandardParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Resolver.Log.Info($"Environmental Particulate Matter 1 micron: {e.New.EnvironmentalParticulateMatter_1micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Resolver.Log.Info($"Environmental Particulate Matter 2.5 micron: {e.New.EnvironmentalParticulateMatter_2_5micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); + Resolver.Log.Info($"Environmental Particulate Matter 10 micron: {e.New.EnvironmentalParticulateMatter_10micron.Value.MicroGramsPerMetersCubed} micrograms per m^3"); ; - Console.WriteLine($"Count of particles - 0.3 microns: {e.New.particles_0_3microns.Value} in 0.1 liters of air"); - Console.WriteLine($"Count of particles - 0.5 microns: {e.New.particles_0_5microns.Value} in 0.1 liters of air"); - Console.WriteLine($"Count of particles - 10 microns: {e.New.particles_10microns.Value} in 0.1 liters of air"); - Console.WriteLine($"Count of particles - 25 microns: {e.New.particles_25microns.Value} in 0.1 liters of air"); - Console.WriteLine($"Count of particles - 50 microns: {e.New.particles_50microns.Value} in 0.1 liters of air"); - Console.WriteLine($"Count of particles - 100 microns: {e.New.particles_100microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 0.3 microns: {e.New.particles_0_3microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 0.5 microns: {e.New.particles_0_5microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 10 microns: {e.New.particles_10microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 25 microns: {e.New.particles_25microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 50 microns: {e.New.particles_50microns.Value} in 0.1 liters of air"); + Resolver.Log.Info($"Count of particles - 100 microns: {e.New.particles_100microns.Value} in 0.1 liters of air"); } // From bf248b137797a2ef8b42ff0bfb681b96f75ac973 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Wed, 5 Apr 2023 13:24:54 -0700 Subject: [PATCH 018/141] Sample cleanup --- .../Samples/Pma003I_Sample/MeadowApp.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs index ccdc167cc8..0302beb414 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Samples/Pma003I_Sample/MeadowApp.cs @@ -15,15 +15,6 @@ public class MeadowApp : App Pmsa003i pmsa003i; - public override Task Run() - { - Resolver.Log.Info("Run..."); - - pmsa003i.StartUpdating(TimeSpan.FromSeconds(2)); - - return base.Run(); - } - public override Task Initialize() { var bus = Device.CreateI2cBus(I2cBusSpeed.Standard); @@ -34,6 +25,15 @@ public override Task Initialize() return base.Initialize(); } + public override Task Run() + { + Resolver.Log.Info("Run..."); + + pmsa003i.StartUpdating(TimeSpan.FromSeconds(2)); + + return base.Run(); + } + private void Pmsa003i_Updated(object sender, IChangeResult<( Density? StandardParticulateMatter_1micron, Density? StandardParticulateMatter_2_5micron, From 79a0911385ca640a0294f091d7c375059727a542 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 6 Apr 2023 21:45:35 -0700 Subject: [PATCH 019/141] Fix RaiseEventsAndNotify methods for Ens160 --- .../Driver/Ens160.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs index 998cfaa5db..ede5f4585c 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Ens160/Driver/Ens160.cs @@ -1,20 +1,20 @@ -using System; -using System.Threading.Tasks; using Meadow.Hardware; using Meadow.Peripherals.Sensors; using Meadow.Peripherals.Sensors.Environmental; using Meadow.Units; using Meadow.Utilities; +using System; +using System.Threading.Tasks; namespace Meadow.Foundation.Sensors.Environmental { /// /// Represents an ENS160 Digital Metal-Oxide Multi-Gas Sensor /// - public partial class Ens160 : - ByteCommsSensorBase<(Concentration? CO2Concentration, - Concentration? EthanolConcentration, - Concentration? TVOCConcentration)>, + public partial class Ens160 : + ByteCommsSensorBase<(Concentration? CO2Concentration, + Concentration? EthanolConcentration, + Concentration? TVOCConcentration)>, IConcentrationSensor { /// @@ -246,7 +246,7 @@ public override void StopUpdating() /// Get Scdx40 C02 Gas Concentration and /// Update the Concentration property /// - protected override async Task<(Concentration? CO2Concentration, + protected override async Task<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> ReadSensor() { @@ -266,7 +266,7 @@ public override void StopUpdating() /// Raise change events for subscribers /// /// The change result with the current sensor data - protected void RaiseChangedAndNotify(IChangeResult<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> changeResult) + protected override void RaiseEventsAndNotify(IChangeResult<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> changeResult) { if (changeResult.New.CO2Concentration is { } concentration) { From a7ac788a61e275cc08a4fc1ad974e3aed8644707 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 6 Apr 2023 22:15:58 -0700 Subject: [PATCH 020/141] MiniPID2 initial check in --- ...nipid2-manual-3-pin-v1.4-final-version.pdf | Bin 0 -> 1414190 bytes .../Driver/MiniPID2.Enums.cs | 7 + .../Driver/MiniPID2MiniPID2.cs | 162 ++++++++++++++++++ .../Sensors.Environmental.MiniPID2.csproj | 22 +++ .../Samples/MiniPID2_Sample/MeadowApp.cs | 60 +++++++ .../MiniPID2_Sample/MiniPID2_Sample.csproj | 20 +++ .../MiniPID2_Sample/meadow.config.yaml | 2 + Source/Meadow.Foundation.sln | 24 +++ 8 files changed, 297 insertions(+) create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Datasheet/23-minipid2-manual-3-pin-v1.4-final-version.pdf create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj create mode 100644 Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Datasheet/23-minipid2-manual-3-pin-v1.4-final-version.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Datasheet/23-minipid2-manual-3-pin-v1.4-final-version.pdf new file mode 100644 index 0000000000000000000000000000000000000000..487783c6be983dc3c44cfdb4c3630dfb14cfdeed GIT binary patch literal 1414190 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

      et!q!i8D191lgiaN&X>z*dogE&t{j0Cys=`5z* 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

      DgYKV{DmYDcpQK{E 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⁡M{mJBIConOa24I_0U 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

      #FJfWH4`PYBZ(UXp0haZs{5t37PvIq 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

      UC87%(XMUIo;DfBfrC7_GxU` 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 XXJRaVcj5~Un_hZ!D-6tEOaK1>i`sf? literal 0 HcmV?d00001 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs new file mode 100644 index 0000000000..e1fc09951b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs @@ -0,0 +1,7 @@ +namespace Meadow.Foundation.Sensors.Environmental +{ + partial class MiniPID2 + { + + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs new file mode 100644 index 0000000000..1a01cf0a80 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs @@ -0,0 +1,162 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors.Environmental; +using Meadow.Units; +using System; +using System.Threading.Tasks; + +namespace Meadow.Foundation.Sensors.Environmental +{ + ///

      + /// Represents an MiniPID2 analog photoionisation (PID) VOC sensor + /// + public partial class MiniPID2 : SamplingSensorBase, IConcentrationSensor + { + /// + /// Raised when the VOC concentration changes + /// + public event EventHandler> ConcentrationUpdated = delegate { }; + + /// + /// Raised when the VOC concentration changes + /// + public event EventHandler> VOCConcentrationUpdated = delegate { }; + + /// + /// The current VOC concentration value + /// + public Concentration? Concentration { get; protected set; } + + /// + /// AnalogInputPort connected to temperature sensor + /// + protected IAnalogInputPort AnalogInputPort { get; } + + /// + /// Create a new MiniPID2 object + /// + /// The analog data pin connected to the sensor + /// How many samples to take during a given reading. + /// These are automatically averaged to reduce noise + /// The time between sample readings + public MiniPID2(IPin analogPin, + int sampleCount = 5, + TimeSpan? sampleInterval = null) : + this(analogPin.CreateAnalogInputPort(sampleCount, + sampleInterval ?? TimeSpan.FromMilliseconds(40), + new Voltage(3.3, Voltage.UnitType.Volts))) + { + } + + /// + /// Create a new MiniPID2 object + /// + /// The analog port connected to the sensor + public MiniPID2(IAnalogInputPort analogInputPort) + { + AnalogInputPort = analogInputPort; + Initialize(); + } + + /// + /// Initialize the sensor + /// + void Initialize() + { + // wire up our observable + AnalogInputPort.Subscribe + ( + IAnalogInputPort.CreateObserver( + result => + { + ChangeResult changeResult = new ChangeResult() + { + New = VoltageToConcentration(result.New), + Old = Concentration + }; + // save state + Concentration = changeResult.New; + // notify + RaiseEventsAndNotify(changeResult); + } + ) + ); + } + + /// + /// Convenience method to get the current concentration. For frequent reads, use + /// StartSampling() and StopSampling() in conjunction with the SampleBuffer. + /// + /// The concentration averages of the given sample count + protected override async Task ReadSensor() + { + var voltage = await AnalogInputPort.Read(); + var newConcentration = VoltageToConcentration(voltage); + Concentration = newConcentration; + return newConcentration; + } + + /// + /// Set ambient temperature + /// + /// + public void SetTemperature(Units.Temperature ambientTemperature) + { + + } + + /// + /// Set relative humidity + /// + /// + public void SetHumidity(RelativeHumidity humidity) + { + + } + + /// + /// Starts updating the sensor on the updateInterval frequency specified + /// + public override void StartUpdating(TimeSpan? updateInterval = null) + { + lock (samplingLock) + { + if (IsSampling) { return; } + IsSampling = true; + AnalogInputPort.StartUpdating(updateInterval); + } + } + + /// + /// Stops sampling the concentration + /// + public override void StopUpdating() + { + lock (samplingLock) + { + if (!IsSampling) { return; } + IsSampling = false; + AnalogInputPort.StopUpdating(); + } + } + + /// + /// Method to notify subscribers to ConcentrationUpdated event handler + /// + /// + protected override void RaiseEventsAndNotify(IChangeResult changeResult) + { + ConcentrationUpdated?.Invoke(this, changeResult); + base.RaiseEventsAndNotify(changeResult); + } + + /// + /// Converts voltage to Concentration + /// + /// + /// Concentration + protected Concentration VoltageToConcentration(Voltage voltage) + { + return new Concentration(voltage.Volts); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj new file mode 100644 index 0000000000..a69b3481a4 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/Sensors.Environmental.MiniPID2.csproj @@ -0,0 +1,22 @@ + + + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + MiniPID2 + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.Sensors.Environmental.MiniPID2 + https://github.com/WildernessLabs/Meadow.Foundation + Meadow,Meadow.Foundation,Environmental,MiniPID2,VOC,photoionisation,PID,gas,AQI,air,quality + 0.1.0 + true + MiniPID2 analog photoionisation (PID) VOC sensor + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs new file mode 100644 index 0000000000..3f34254395 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MeadowApp.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Environmental; + +namespace Sensors.Environmental.Ens160_Sample +{ + public class MeadowApp : App + { + // + + Ens160 sensor; + + public override Task Initialize() + { + Resolver.Log.Info("Initializing..."); + + var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard); + + sensor = new Ens160(i2cBus, (byte)Ens160.Addresses.Address_0x53); + + + var consumer = Ens160.CreateObserver( + handler: result => + { + Resolver.Log.Info($"Observer: C02 concentration changed by threshold; new: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm"); + }, + filter: result => + { + if (result.Old?.CO2Concentration is { } oldCon && + result.New.CO2Concentration is { } newCon) + { + return Math.Abs((newCon - oldCon).PartsPerMillion) > 10; + } + return false; + } + ); + + sensor?.Subscribe(consumer); + + if (sensor != null) + { + sensor.Updated += (sender, result) => + { + Resolver.Log.Info($" CO2 Concentration: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm"); + Resolver.Log.Info($" Ethanol Concentraion: {result.New.EthanolConcentration?.PartsPerBillion:N0}ppb"); + Resolver.Log.Info($" TVOC Concentraion: {result.New.TVOCConcentration?.PartsPerBillion:N0}ppb"); + Resolver.Log.Info($" AQI: {sensor.GetAirQualityIndex()}"); + }; + } + + sensor?.StartUpdating(TimeSpan.FromSeconds(2)); + + return base.Initialize(); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj new file mode 100644 index 0000000000..a679cd628b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/MiniPID2_Sample.csproj @@ -0,0 +1,20 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Samples/MiniPID2_Sample/meadow.config.yaml @@ -0,0 +1,2 @@ +MonoControl: + Options: --jit \ No newline at end of file diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index bfc4ce2dab..93f271708a 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -1183,6 +1183,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SixteenSegment_Sample", "Me EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.Pmsa003i", "Meadow.Foundation.Peripherals\Sensors.Environmental.Pmsa003I\Driver\Sensors.Environmental.Pmsa003i.csproj", "{B935965C-0FFC-4D7B-BDBC-B17C46C785F0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MiniPID2", "MiniPID2", "{38944011-FA3C-4557-9049-B41B6168F6C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Environmental.MiniPID2", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Driver\Sensors.Environmental.MiniPID2.csproj", "{00085539-EB03-49CE-8518-13544FD480BB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{59445EBB-78B8-4E83-B05D-C597D0C9AEC0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiniPID2_Sample", "Meadow.Foundation.Peripherals\Sensors.Environmental.MiniPID2\Samples\MiniPID2_Sample\MiniPID2_Sample.csproj", "{95670172-AB31-4239-8805-346DDD57983F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2801,6 +2809,18 @@ Global {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Build.0 = Release|Any CPU {B935965C-0FFC-4D7B-BDBC-B17C46C785F0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Build.0 = Release|Any CPU + {00085539-EB03-49CE-8518-13544FD480BB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Build.0 = Release|Any CPU + {95670172-AB31-4239-8805-346DDD57983F}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3391,6 +3411,10 @@ Global {70A3BC90-AB6A-4498-BFDE-07AA25823036} = {C6AB70DF-B943-41F7-8DFC-2A89CFDD2C8D} {A470E563-7ADD-4A76-91AE-C1190134D3FA} = {13D97CCB-2CFF-4AB8-A170-701525DA740B} {B935965C-0FFC-4D7B-BDBC-B17C46C785F0} = {AD6DD7B6-B896-44B9-904E-9330C2C842C7} + {38944011-FA3C-4557-9049-B41B6168F6C0} = {78E463DA-0FA1-4AAE-A281-D3297C9388C9} + {00085539-EB03-49CE-8518-13544FD480BB} = {38944011-FA3C-4557-9049-B41B6168F6C0} + {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} = {38944011-FA3C-4557-9049-B41B6168F6C0} + {95670172-AB31-4239-8805-346DDD57983F} = {59445EBB-78B8-4E83-B05D-C597D0C9AEC0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520} From c0969aa52eefa884bd8fa03dfb9ccafc9016728f Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 6 Apr 2023 22:16:09 -0700 Subject: [PATCH 021/141] Minor analog temp sensor comments cleanup --- .../Sensors/Temperature/AnalogTemperature.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Meadow.Foundation.Core/Sensors/Temperature/AnalogTemperature.cs b/Source/Meadow.Foundation.Core/Sensors/Temperature/AnalogTemperature.cs index 78b64af733..1a257b27bb 100644 --- a/Source/Meadow.Foundation.Core/Sensors/Temperature/AnalogTemperature.cs +++ b/Source/Meadow.Foundation.Core/Sensors/Temperature/AnalogTemperature.cs @@ -203,7 +203,7 @@ public AnalogTemperature(IAnalogInputPort analogInputPort, /// Convenience method to get the current temperature. For frequent reads, use /// StartSampling() and StopSampling() in conjunction with the SampleBuffer. ///

      Hm4k_9rGK-ds9ip$JglbgF)#f*7vOzcPsZx9Noc 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%0ArZf@H!| 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 z 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

      ^+I+9>6?pjvI8s|6a!v3 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

      - /// A float value that's ann average value of all the samples taken. + /// The temperature averages of the given sample count protected override async Task ReadSensor() { var voltage = await AnalogInputPort.Read(); @@ -260,7 +260,7 @@ protected override void RaiseEventsAndNotify(IChangeResult ch /// Converts voltage to Temperature ///
      /// - /// temperature at a Temperature struct + /// Temperature protected Units.Temperature VoltageToTemperature(Voltage voltage) { return new Units.Temperature(SensorCalibration.SampleReading + From b97f85c60ea66d70d98cae6a553b479456d67e54 Mon Sep 17 00:00:00 2001 From: Adrian Stevens Date: Thu, 6 Apr 2023 22:47:57 -0700 Subject: [PATCH 022/141] MiniPID2 driver progress --- .../Driver/MiniPID2.Enums.cs | 9 +++++- .../Driver/MiniPID2MiniPID2.cs | 27 +++++++++++----- .../Samples/MiniPID2_Sample/MeadowApp.cs | 31 +++++++++---------- 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs index e1fc09951b..641013ee57 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2.Enums.cs @@ -2,6 +2,13 @@ { partial class MiniPID2 { - + public enum MiniPID2Type : byte + { + PPM, + PPB, + HS, + _10ev, + _11_7eV + } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs index 1a01cf0a80..59209713c6 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.MiniPID2/Driver/MiniPID2MiniPID2.cs @@ -7,7 +7,7 @@ namespace Meadow.Foundation.Sensors.Environmental { /// - /// Represents an MiniPID2 analog photoionisation (PID) VOC sensor + /// Represents an IonScience MiniPID2 analog photoionisation (PID) VOC sensor /// public partial class MiniPID2 : SamplingSensorBase, IConcentrationSensor { @@ -26,6 +26,11 @@ public partial class MiniPID2 : SamplingSensorBase, IConcentratio ///

      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�+VU#*E^sB#!*|(ktu-+zys`EJLf3xZTn_SM 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 literal 0 HcmV?d00001 diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs index 573885c393..e5504ccba7 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Constants.cs @@ -1,12 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Meadow.Foundation.Sensors.Environmental +namespace Meadow.Foundation.Sensors.Environmental { public partial class Pmsa003I - { - // This is reversed because we reverse the whole message because it is big-endian and it makes converting values easier - private static readonly byte[] Preamble = {0x4d, 0x42}; + { // This is reversed because we reverse the whole message because it is big-endian and it makes converting values easier + private static readonly byte[] Preamble = { 0x4d, 0x42 }; } -} +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs index 23e5eae029..b6fdd9dded 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Environmental.Pmsa003I/Driver/Pmsa003I/Pmsa003I.Enums.cs @@ -1,10 +1,21 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Meadow.Foundation.Sensors.Environmental +namespace Meadow.Foundation.Sensors.Environmental { public partial class Pmsa003I { + ///

    +ASb(m1UNXl}k7TiPEe4=@a5@Z3QDSOn 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ΠDw2={OGNTYI+<%;9qNe+gvqs-LzMVBOLdTRa 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%0AD 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 z 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Ƴ*g_uqlt_rGTKMR5E(;cjE{^ZGM30#9~nnv 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