diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Datasheet/DS3502.pdf b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Datasheet/DS3502.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Datasheet/DS3502.pdf rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Datasheet/DS3502.pdf diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.Enums.cs similarity index 93% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.Enums.cs index e2d88d4178..c16113555b 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.Enums.cs @@ -1,4 +1,4 @@ -namespace Meadow.Foundation.ICs.IOExpanders +namespace Meadow.Foundation.ICs.DigiPots { public partial class Ds3502 { @@ -30,7 +30,7 @@ public enum Addresses : byte Default = Address_0x28 } - enum Register : byte + private enum Register : byte { /// /// Wiper value register diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.cs similarity index 98% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.cs index 5e7f635095..f0ff5c6f83 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Ds3502.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/Ds3502.cs @@ -2,7 +2,7 @@ using System; using System.Threading.Tasks; -namespace Meadow.Foundation.ICs.IOExpanders +namespace Meadow.Foundation.ICs.DigiPots { /// /// Represents a DS3502 digital potentiometer diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj similarity index 78% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj index 32563f597c..dcd7bc9b80 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/ICs.IOExpanders.Ds3502.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Driver/ICs.DigiPots.Ds3502.csproj @@ -1,6 +1,5 @@ - + - Readme.md enable 10.0 Apache-2.0 @@ -12,15 +11,14 @@ Ds3502 Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.ICs.IOExpanders.Ds3502 + Meadow.Foundation.ICs.DigiPots.Ds3502 https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, IOExpanders, Ds3502 + Meadow.Foundation, DigiPots, Ds3502 0.1.5 true Ds3502 I2C digital potentiometer - diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj similarity index 90% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj index d646735cf3..6cbf529b87 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/Ds3502_Sample.csproj @@ -10,7 +10,7 @@ - + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs similarity index 90% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs index bf19114261..edcc937e6a 100644 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/MeadowApp.cs @@ -1,10 +1,10 @@ using Meadow; using Meadow.Devices; -using Meadow.Foundation.ICs.IOExpanders; +using Meadow.Foundation.ICs.DigiPots; using System.Threading; using System.Threading.Tasks; -namespace ICs.IOExpanders.Ds3502_Sample +namespace ICs.DigiPots.Ds3502_Sample { public class MeadowApp : App { diff --git a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml similarity index 100% rename from Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml rename to Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Ds3502/Samples/Ds3502_Sample/meadow.config.yaml diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Datasheet/MCHPS02708_1-2520528.pdf b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Datasheet/MCHPS02708_1-2520528.pdf new file mode 100644 index 0000000000..0a5c1fb1de Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Datasheet/MCHPS02708_1-2520528.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4131.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4131.cs new file mode 100644 index 0000000000..5e87ffbdd5 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4131.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4131 digital potentiometer. +/// +public class Mcp4131 : Mcp4xx1 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4131 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4131(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4132.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4132.cs new file mode 100644 index 0000000000..2f27e1b40f --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4132.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4132 digital rheostat. +/// +public class Mcp4132 : Mcp4xx2 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4132 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4132(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4141.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4141.cs new file mode 100644 index 0000000000..44bd229cfa --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4141.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4141 digital potentiometer. +/// +public class Mcp4141 : Mcp4xx1 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4141 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4141(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4142.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4142.cs new file mode 100644 index 0000000000..2ed0dbfab6 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4142.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4142 digital rheostat. +/// +public class Mcp4142 : Mcp4xx2 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4142 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4142(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4151.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4151.cs new file mode 100644 index 0000000000..632f7df92a --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4151.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4151 digital potentiometer. +/// +public class Mcp4151 : Mcp4xx1 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4151 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4151(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4152.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4152.cs new file mode 100644 index 0000000000..0d4be38fed --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4152.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4152 digital rheostat. +/// +public class Mcp4152 : Mcp4xx2 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4152 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4152(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4161.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4161.cs new file mode 100644 index 0000000000..c962f7b528 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4161.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4161 digital potentiometer. +/// +public class Mcp4161 : Mcp4xx1 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4161 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4161(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4162.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4162.cs new file mode 100644 index 0000000000..83c2017959 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4162.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4162 digital rheostat. +/// +public class Mcp4162 : Mcp4xx2 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4162 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4162(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 1, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4231.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4231.cs new file mode 100644 index 0000000000..76152ef6b5 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4231.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4231 digital potentiometer. +/// +public class Mcp4231 : Mcp4xx1 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4231 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4231(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4232.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4232.cs new file mode 100644 index 0000000000..47c154fe19 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4232.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4232 digital rheostat. +/// +public class Mcp4232 : Mcp4xx2 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4232 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4232(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4241.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4241.cs new file mode 100644 index 0000000000..2e39801efd --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4241.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4241 digital potentiometer. +/// +public class Mcp4241 : Mcp4xx1 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4241 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4241(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4242.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4242.cs new file mode 100644 index 0000000000..965b5bc200 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4242.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4242 digital rheostat. +/// +public class Mcp4242 : Mcp4xx2 +{ + /// + public override int MaxSteps => 129; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4242 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4242(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4251.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4251.cs new file mode 100644 index 0000000000..d76480f621 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4251.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4251 digital potentiometer. +/// +public class Mcp4251 : Mcp4xx1 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4251 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4251(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4252.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4252.cs new file mode 100644 index 0000000000..2a3b557a34 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4252.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4252 digital rheostat. +/// +public class Mcp4252 : Mcp4xx2 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4252 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4252(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4261.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4261.cs new file mode 100644 index 0000000000..9087673720 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4261.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4261 digital potentiometer. +/// +public class Mcp4261 : Mcp4xx1 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4261 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the potentiometer. + public Mcp4261(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4262.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4262.cs new file mode 100644 index 0000000000..64aa0292ed --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Drivers/Mcp4262.cs @@ -0,0 +1,24 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents an MCP4262 digital rheostat. +/// +public class Mcp4262 : Mcp4xx2 +{ + /// + public override int MaxSteps => 257; + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to which the MCP4262 is connected. + /// The digital output port for the chip select (CS) pin. + /// The maximum resistance of the rheostat. + public Mcp4262(ISpiBus spiBus, IDigitalOutputPort chipSelect, Resistance maxResistance) : + base(spiBus, chipSelect, 2, maxResistance) + { + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj new file mode 100644 index 0000000000..61f6bb0634 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/ICs.DigiPots.Mcp4xxx.csproj @@ -0,0 +1,25 @@ + + + enable + 10.0 + Apache-2.0 + true + icon.png + Wilderness Labs, Inc + netstandard2.1 + Library + Mcp4xxx + Wilderness Labs, Inc + http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ + Meadow.Foundation.ICs.DigiPots.Mcp4xxx + https://github.com/WildernessLabs/Meadow.Foundation + Meadow.Foundation, DigiPots, Mcp4101, Mcp4102, Mcp41xx, Mcp42xx, Mcp41x1, Mcp41x2, Mcp42x1, Mcp42x2 + 0.1.5 + true + Mcp4xxx SPI digital rheostats and potentiometers + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx1.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx1.cs new file mode 100644 index 0000000000..e2985e3bf6 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx1.cs @@ -0,0 +1,33 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents a Mcp4xx1 digital potentiometer +/// +public abstract class Mcp4xx1 : Mcp4xxx +{ + /// + /// Gets the array of potentiometers in this Mcp4xx1 device. + /// + public IPotentiometer[] Potentiometers { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to use for communication. + /// The digital output port for chip select. + /// The number of resistors in the device. + /// The maximum resistance of the digital potentiometer. + protected Mcp4xx1(ISpiBus spiBus, IDigitalOutputPort chipSelect, int resistorCount, Resistance maxResistance) + : base(spiBus, chipSelect, resistorCount, maxResistance) + { + Potentiometers = new IPotentiometer[resistorCount]; + + for (int i = 0; i < resistorCount; i++) + { + Potentiometers[i] = new ResistorArray(this, i, SpiComms); + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx2.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx2.cs new file mode 100644 index 0000000000..9ea08a70e1 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xx2.cs @@ -0,0 +1,33 @@ +using Meadow.Hardware; +using Meadow.Units; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents a Mcp4xx2 digital rheostat +/// +public abstract class Mcp4xx2 : Mcp4xxx +{ + /// + /// Gets the array of rheostats connected to this Mcp4xx2 device. + /// + public IRheostat[] Rheostats { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to use for communication. + /// The digital output port for chip select. + /// The number of rheostats in the device. + /// The maximum resistance of the digital rheostat. + protected Mcp4xx2(ISpiBus spiBus, IDigitalOutputPort chipSelect, int resistorCount, Resistance maxResistance) + : base(spiBus, chipSelect, resistorCount, maxResistance) + { + + Rheostats = new IRheostat[resistorCount]; + for (int i = 0; i < resistorCount; i++) + { + Rheostats[i] = new ResistorArray(this, i, SpiComms); + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.ResistorArray.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.ResistorArray.cs new file mode 100644 index 0000000000..56fc8c1201 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.ResistorArray.cs @@ -0,0 +1,76 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.ICs.DigiPots; + +public abstract partial class Mcp4xxx +{ + /// + /// Represents a resistor array in an MCP4xxx digital potentiometer or rheostat. + /// + public class ResistorArray : IPotentiometer, IRheostat + { + private const int ReadData = (0x03 << 10); + private const int WriteData = (0x00 << 10); + private const int DataMask16 = (0x01 << 9) - 1; // 9-bit data + private const int Address_Wiper0 = 0 << 12; + private const int Address_Wiper1 = 1 << 12; + + private Mcp4xxx _parent; + private int _index; + private ISpiCommunications _spiComms; + + /// + public Resistance MaxResistance => _parent.MaxResistance; + + /// + public Resistance Resistance + { + get + { + var w = GetWiper(); + return new Resistance((_parent.MaxResistance.Ohms / _parent.MaxSteps) * w, Resistance.UnitType.Ohms); + } + set + { + var w = (short)((_parent.MaxSteps / _parent.MaxResistance.Ohms) * value.Ohms); + SetWiper(w); + } + } + + internal ResistorArray(Mcp4xxx parent, int index, ISpiCommunications spiComms) + { + if (index < 0 && index > 1) throw new ArgumentException(); + + _parent = parent; + _index = index; + _spiComms = spiComms; + } + + internal void SetWiper(short value) + { + var command = (ushort)((value & DataMask16) | WriteData | (_index == 0 ? Address_Wiper0 : Address_Wiper1)); + + Span txBuffer = stackalloc byte[2]; + txBuffer[0] = (byte)(command >> 8); + txBuffer[1] = (byte)(command & 0xff); + + _spiComms.Write(txBuffer); + } + + internal short GetWiper() + { + var command = (ushort)(ReadData | (_index == 0 ? Address_Wiper0 : Address_Wiper1) | 0xff); + + Span txBuffer = stackalloc byte[2]; + txBuffer[0] = (byte)(command >> 8); + txBuffer[1] = (byte)(command & 0xff); + Span rxBuffer = stackalloc byte[2]; + + _spiComms.Exchange(txBuffer, rxBuffer, DuplexType.Full); + + return (short)((rxBuffer[1] | rxBuffer[0] << 8) & DataMask16); + } + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.cs new file mode 100644 index 0000000000..59e37c12ae --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Driver/Mcp4xxx.cs @@ -0,0 +1,60 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.ICs.DigiPots; + +/// +/// Represents a Mcp4xxx digital potentimeter or rheostat +/// +public abstract partial class Mcp4xxx : ISpiPeripheral +{ + /// + /// Gets the ISpiCommunications used to ineract with the SPI bus + /// + protected ISpiCommunications SpiComms { get; } + + /// + public SpiClockConfiguration.Mode DefaultSpiBusMode => SpiClockConfiguration.Mode.Mode0; + /// + public Frequency DefaultSpiBusSpeed => new Frequency(10, Frequency.UnitType.Megahertz); + + /// + /// Gets the maximum resistance of the digital potentiometer. + /// + public Resistance MaxResistance { get; } + /// + /// Gets the maximum number of steps or resolution. + /// + public abstract int MaxSteps { get; } + + /// + public SpiClockConfiguration.Mode SpiBusMode + { + get => SpiComms.BusMode; + set => SpiComms.BusMode = value; + } + + /// + public Frequency SpiBusSpeed + { + get => SpiComms.BusSpeed; + set => SpiComms.BusSpeed = value; + } + + /// + /// Initializes a new instance of the class. + /// + /// The SPI bus to use for communication. + /// The digital output port for chip select. + /// The resistor count. + /// The maximum resistance of the digital potentiometer. + public Mcp4xxx(ISpiBus spiBus, IDigitalOutputPort chipSelect, int resistorCount, Resistance maxResistance) + { + if (resistorCount < 0 && resistorCount > 1) throw new ArgumentException(); + + MaxResistance = maxResistance; + + SpiComms = new SpiCommunications(spiBus, chipSelect, DefaultSpiBusSpeed, DefaultSpiBusMode); + } +} diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj new file mode 100644 index 0000000000..0bb5c7eeae --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/Mcp4162_Sample.csproj @@ -0,0 +1,21 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Library + App + 10 + + + + + + + + Always + + + diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/MeadowApp.cs new file mode 100644 index 0000000000..25b6579a4d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/MeadowApp.cs @@ -0,0 +1,45 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.ICs.DigiPots; +using Meadow.Hardware; +using Meadow.Units; +using System.Threading.Tasks; + +namespace ICs.DigiPots.Mcp4162_Sample; + +public class MeadowApp : App +{ + // + + protected Mcp4162 mcp; + + public override Task Initialize() + { + Resolver.Log.Info("Initialize..."); + + mcp = new Mcp4162( + Device.CreateSpiBus(), + Device.Pins.D15.CreateDigitalOutputPort(), + new Resistance(5, Resistance.UnitType.Kiloohms) + ); + + return base.Initialize(); + } + + public override async Task Run() + { + Resolver.Log.Info("Run"); + + for (var i = 0; i <= mcp.MaxResistance.Ohms; i += 100) + { + var r = new Resistance(i, Resistance.UnitType.Ohms); + Resolver.Log.Info($"Setting resistance to {r.Ohms:0} ohms"); + mcp.Rheostats[0].Resistance = r; + await Task.Delay(1000); + } + + Resolver.Log.Info("Done"); + } + + // +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/meadow.config.yaml b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_Sample/meadow.config.yaml new file mode 100644 index 0000000000..32363cb69c --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/ICs.DigiPots.Mcp4xxx/Samples/Mcp4162_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.Ds3502/Driver/Readme.md b/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Readme.md deleted file mode 100644 index 0f3d703399..0000000000 --- a/Source/Meadow.Foundation.Peripherals/ICs.IOExpanders.Ds3502/Driver/Readme.md +++ /dev/null @@ -1,50 +0,0 @@ -# Meadow.Foundation.ICs.IOExpanders.Ds3502 - -**Ds3502 I2C digital potentiometer** - -The **Ds3502** library is designed for the [Wilderness Labs](www.wildernesslabs.co) Meadow .NET IoT platform and is part of [Meadow.Foundation](https://developer.wildernesslabs.co/Meadow/Meadow.Foundation/). - -The **Meadow.Foundation** peripherals library is an open-source repository of drivers and libraries that streamline and simplify adding hardware to your C# .NET Meadow IoT application. - -For more information on developing for Meadow, visit [developer.wildernesslabs.co](http://developer.wildernesslabs.co/). - -To view all Wilderness Labs open-source projects, including samples, visit [github.com/wildernesslabs](https://github.com/wildernesslabs/). - -## Usage - -```csharp -protected Ds3502 ds3502; - -public override Task Initialize() -{ - Resolver.Log.Info("Initialize..."); - - ds3502 = new Ds3502(Device.CreateI2cBus(Ds3502.DefaultBusSpeed)); - - return base.Initialize(); -} - -public override Task Run() -{ - for (byte i = 0; i < 127; i++) - { - ds3502.SetWiper(i); - Resolver.Log.Info($"wiper {ds3502.GetWiper()}"); - - Thread.Sleep(1000); - } - - return base.Run(); -} - -``` -## How to Contribute - -- **Found a bug?** [Report an issue](https://github.com/WildernessLabs/Meadow_Issues/issues) -- Have a **feature idea or driver request?** [Open a new feature request](https://github.com/WildernessLabs/Meadow_Issues/issues) -- Want to **contribute code?** Fork the [Meadow.Foundation](https://github.com/WildernessLabs/Meadow.Foundation) repository and submit a pull request against the `develop` branch - - -## Need Help? - -If you have questions or need assistance, please join the Wilderness Labs [community on Slack](http://slackinvite.wildernesslabs.co/). diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index 99e885dcd0..8a0cc48b29 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -897,10 +897,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ds3502", "Ds3502", "{853477 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}" @@ -1364,6 +1360,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp492x", "Mcp492x", "{CCFE1214-9C2A-4FDF-915B-7955F04BBF3D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.DAC.Mcp492x", "Meadow.Foundation.Peripherals\ICs.DAC.Mcp492x\Driver\ICs.DAC.Mcp492x.csproj", "{8FD8F65D-FC1D-44D0-9976-DB5F25DE7E98}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lis3mdl", "Lis3mdl", "{E23F06F8-9226-46AA-B1DF-B2C10F6E250E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lsm6dsox", "Lsm6dsox", "{FDAFC20B-C53A-46C6-B453-0B39D51248A9}" @@ -1380,6 +1377,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Motion.Lsm6dsox", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lsm6dsox_Sample", "Meadow.Foundation.Peripherals\Sensors.Motion.Lsm6dsox\Samples\Lsm6dsox_Sample\Lsm6dsox_Sample.csproj", "{CDBE4FD5-4432-4E8E-8E5F-A628D3D976FA}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DigiPot", "DigiPot", "{77204A90-B195-4EA4-A17B-CB74E8910FC1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mcp4xxx", "Mcp4xxx", "{CD113034-407F-4FA7-9706-8004406551D2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.DigiPots.Ds3502", "Meadow.Foundation.Peripherals\ICs.DigiPots.Ds3502\Driver\ICs.DigiPots.Ds3502.csproj", "{C9ABEEBE-341B-47C3-941F-57EE696FC9D5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ds3502_Sample", "Meadow.Foundation.Peripherals\ICs.DigiPots.Ds3502\Samples\Ds3502_Sample\Ds3502_Sample.csproj", "{3B763E8F-F57F-4FCB-A294-07251F77B40D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{91EE39A7-2A2B-4584-A341-52F5143E4ABA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICs.DigiPots.Mcp4xxx", "Meadow.Foundation.Peripherals\ICs.DigiPots.Mcp4xxx\Driver\ICs.DigiPots.Mcp4xxx.csproj", "{68AA3433-B429-4462-B4F4-7D7E163DE8EB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mcp4162_Sample", "Meadow.Foundation.Peripherals\ICs.DigiPots.Mcp4xxx\Samples\Mcp4162_Sample\Mcp4162_Sample.csproj", "{E175FDF8-103D-4920-9E46-CC180AF703E7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -2572,18 +2583,6 @@ Global {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 @@ -3334,6 +3333,30 @@ Global {CDBE4FD5-4432-4E8E-8E5F-A628D3D976FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {CDBE4FD5-4432-4E8E-8E5F-A628D3D976FA}.Release|Any CPU.Build.0 = Release|Any CPU {CDBE4FD5-4432-4E8E-8E5F-A628D3D976FA}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Release|Any CPU.Build.0 = Release|Any CPU + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Release|Any CPU.Build.0 = Release|Any CPU + {3B763E8F-F57F-4FCB-A294-07251F77B40D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Release|Any CPU.Build.0 = Release|Any CPU + {68AA3433-B429-4462-B4F4-7D7E163DE8EB}.Release|Any CPU.Deploy.0 = Release|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Release|Any CPU.Build.0 = Release|Any CPU + {E175FDF8-103D-4920-9E46-CC180AF703E7}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3779,10 +3802,8 @@ Global {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} + {853477A1-9B58-4893-AFDD-577471C62DB1} = {77204A90-B195-4EA4-A17B-CB74E8910FC1} {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} @@ -3792,7 +3813,7 @@ Global {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} + {643EF07C-36AD-4796-9748-2F630631CF16} = {E97B3C9A-7F99-4482-989D-56146C87055A} {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} @@ -4023,6 +4044,13 @@ Global {1CBD6FF1-B3AE-4DE0-91FF-A09E481629D6} = {03C07B80-FB22-4E12-84B8-6D71AC089443} {A5F7052F-B028-488C-A94D-600B784109C7} = {FDAFC20B-C53A-46C6-B453-0B39D51248A9} {CDBE4FD5-4432-4E8E-8E5F-A628D3D976FA} = {F1808C13-C604-46FA-828A-D1749762A38A} + {77204A90-B195-4EA4-A17B-CB74E8910FC1} = {A1917BD0-881F-4775-88D9-38D42D448CF5} + {CD113034-407F-4FA7-9706-8004406551D2} = {77204A90-B195-4EA4-A17B-CB74E8910FC1} + {C9ABEEBE-341B-47C3-941F-57EE696FC9D5} = {853477A1-9B58-4893-AFDD-577471C62DB1} + {3B763E8F-F57F-4FCB-A294-07251F77B40D} = {C6E0BE66-399B-449A-B3A0-3D594EFFE1A1} + {91EE39A7-2A2B-4584-A341-52F5143E4ABA} = {CD113034-407F-4FA7-9706-8004406551D2} + {68AA3433-B429-4462-B4F4-7D7E163DE8EB} = {CD113034-407F-4FA7-9706-8004406551D2} + {E175FDF8-103D-4920-9E46-CC180AF703E7} = {91EE39A7-2A2B-4584-A341-52F5143E4ABA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AF7CA16F-8C38-4546-87A2-5DAAF58A1520}