diff --git a/PepperDashEssentials.sln b/PepperDashEssentials.sln
index a9a0e6d6..af0007ba 100644
--- a/PepperDashEssentials.sln
+++ b/PepperDashEssentials.sln
@@ -1,21 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDashEssentials", ".\PepperDashEssentials\PepperDashEssentials.csproj", "{1BED5BA9-88C4-4365-9362-6F4B128071D3}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDashEssentials", "PepperDashEssentials\PepperDashEssentials.csproj", "{1BED5BA9-88C4-4365-9362-6F4B128071D3}"
ProjectSection(ProjectDependencies) = postProject
{892B761C-E479-44CE-BD74-243E9214AF13} = {892B761C-E479-44CE-BD74-243E9214AF13}
{9199CE8A-0C9F-4952-8672-3EED798B284F} = {9199CE8A-0C9F-4952-8672-3EED798B284F}
{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_Core", ".\essentials-framework\Essentials Core\PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj", "{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_Core", "essentials-framework\Essentials Core\PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj", "{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials Devices Common", ".\essentials-framework\Essentials Devices Common\Essentials Devices Common\Essentials Devices Common.csproj", "{892B761C-E479-44CE-BD74-243E9214AF13}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials Devices Common", "essentials-framework\Essentials Devices Common\Essentials Devices Common\Essentials Devices Common.csproj", "{892B761C-E479-44CE-BD74-243E9214AF13}"
ProjectSection(ProjectDependencies) = postProject
{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials_DM", ".\essentials-framework\Essentials DM\Essentials_DM\Essentials_DM.csproj", "{9199CE8A-0C9F-4952-8672-3EED798B284F}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_DM", "essentials-framework\Essentials DM\Essentials_DM\PepperDash_Essentials_DM.csproj", "{9199CE8A-0C9F-4952-8672-3EED798B284F}"
ProjectSection(ProjectDependencies) = postProject
{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
EndProjectSection
diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs
index 0c4e388b..b3f131c3 100644
--- a/PepperDashEssentials/Bridges/BridgeBase.cs
+++ b/PepperDashEssentials/Bridges/BridgeBase.cs
@@ -20,6 +20,46 @@ using PepperDash.Essentials.DM;
namespace PepperDash.Essentials.Bridges
{
+ ///
+ /// Helper methods for bridges
+ ///
+ public static class BridgeHelper
+ {
+ public static void PrintJoinMap(string command)
+ {
+ string bridgeKey = "";
+ string deviceKey = "";
+
+ var targets = command.Split(' ');
+
+ bridgeKey = targets[0].Trim();
+
+ var bridge = DeviceManager.GetDeviceForKey(bridgeKey) as EiscApi;
+
+ if (bridge == null)
+ {
+ Debug.Console(0, "Unable to find bridge with key: '{0}'", bridgeKey);
+ return;
+ }
+
+ if (targets.Length > 1)
+ {
+ deviceKey = targets[1].Trim();
+
+ if (!string.IsNullOrEmpty(deviceKey))
+ {
+ bridge.PrintJoinMapForDevice(deviceKey);
+ return;
+ }
+ }
+ else
+ {
+ bridge.PrintJoinMaps();
+ }
+ }
+ }
+
+
///
/// Base class for all bridge class variants
///
@@ -61,6 +101,8 @@ namespace PepperDash.Essentials.Bridges
public EiscApi(DeviceConfig dc) :
base(dc.Key)
{
+ JoinMaps = new Dictionary();
+
PropertiesConfig = JsonConvert.DeserializeObject(dc.Properties.ToString());
Eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(PropertiesConfig.Control.IpIdInt, PropertiesConfig.Control.TcpSshProperties.Address, Global.ControlSystem);
@@ -79,11 +121,19 @@ namespace PepperDash.Essentials.Bridges
if (device != null)
{
+ Debug.Console(1, this, "Linking Device: '{0}'", device.Key);
+
+
if (device is IBridge) // Check for this first to allow bridges in plugins to override existing bridges that apply to the same type.
{
(device as IBridge).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
continue;
}
+ else if (device is IBridgeAdvanced)
+ {
+ Debug.Console(2, this, "'{0}' is IBridgeAdvanced", device.Key);
+ (device as IBridgeAdvanced).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey, this);
+ }
else if (device is PepperDash.Essentials.Core.Monitoring.SystemMonitorController)
{
(device as PepperDash.Essentials.Core.Monitoring.SystemMonitorController).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
@@ -99,16 +149,18 @@ namespace PepperDash.Essentials.Bridges
(device as CameraBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey, this);
continue;
}
- else if (device is PepperDash.Essentials.Core.DisplayBase)
- {
- (device as DisplayBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
- continue;
- }
- else if (device is DmChassisController) {
+ else if (device is PepperDash.Essentials.Core.DisplayBase)
+ {
+ (device as DisplayBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
+ continue;
+ }
+ else if (device is DmChassisController)
+ {
(device as DmChassisController).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
continue;
}
- else if (device is DmBladeChassisController) {
+ else if (device is DmBladeChassisController)
+ {
(device as DmBladeChassisController).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
continue;
}
@@ -206,6 +258,38 @@ namespace PepperDash.Essentials.Bridges
}
}
+ ///
+ /// Prints all the join maps on this bridge
+ ///
+ public void PrintJoinMaps()
+ {
+ Debug.Console(0, this, "Join Maps for EISC IPID: {0}", Eisc.ID.ToString("X"));
+
+ foreach (var joinMap in JoinMaps)
+ {
+ Debug.Console(0, "Join map for device '{0}':", joinMap.Key);
+ joinMap.Value.PrintJoinMapInfo();
+ }
+ }
+
+ ///
+ /// Prints the join map for a device by key
+ ///
+ ///
+ public void PrintJoinMapForDevice(string deviceKey)
+ {
+ var joinMap = JoinMaps[deviceKey];
+
+ if (joinMap == null)
+ {
+ Debug.Console(0, this, "Unable to find joinMap for device with key: '{0}'", deviceKey);
+ return;
+ }
+
+ Debug.Console(0, "Join map for device '{0}' on EISC '{1}':", deviceKey, this.Key);
+ joinMap.PrintJoinMapInfo();
+ }
+
///
/// Used for debugging to trigger an action based on a join number and type
///
diff --git a/PepperDashEssentials/Bridges/IBridge.cs b/PepperDashEssentials/Bridges/IBridge.cs
index d86a1d1d..f2b959ed 100644
--- a/PepperDashEssentials/Bridges/IBridge.cs
+++ b/PepperDashEssentials/Bridges/IBridge.cs
@@ -7,8 +7,20 @@ using Crestron.SimplSharpPro.DeviceSupport;
namespace PepperDash.Essentials.Bridges
{
+ ///
+ /// Defines a device that uses the legacy JoinMapBase for its join map
+ ///
+ [Obsolete("IBridgeAdvanced should be used going forward with JoinMapBaseAdvanced")]
public interface IBridge
{
void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey);
}
+
+ ///
+ /// Defines a device that uses JoinMapBaseAdvanced for its join map
+ ///
+ public interface IBridgeAdvanced
+ {
+ void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApi bridge);
+ }
}
\ No newline at end of file
diff --git a/PepperDashEssentials/ControlSystem.cs b/PepperDashEssentials/ControlSystem.cs
index 46ac77f2..f158fc1f 100644
--- a/PepperDashEssentials/ControlSystem.cs
+++ b/PepperDashEssentials/ControlSystem.cs
@@ -47,9 +47,12 @@ namespace PepperDash.Essentials
ConsoleAccessLevelEnum.AccessOperator);
}
- CrestronConsole.AddNewConsoleCommand(PluginLoader.ReportAssemblyVersions, "reportversions", "Reports the versions of the loaded assemblies", ConsoleAccessLevelEnum.AccessOperator);
+ CrestronConsole.AddNewConsoleCommand(PluginLoader.ReportAssemblyVersions, "reportversions", "Reports the versions of the loaded assemblies", ConsoleAccessLevelEnum.AccessOperator);
+
+ CrestronConsole.AddNewConsoleCommand(PepperDash.Essentials.Core.DeviceFactory.GetDeviceFactoryTypes, "gettypes", "Gets the device types that can be built. Accepts a filter string.", ConsoleAccessLevelEnum.AccessOperator);
+
+ CrestronConsole.AddNewConsoleCommand(PepperDash.Essentials.Bridges.BridgeHelper.PrintJoinMap, "getjoinmap", "map(s) for bridge or device on bridge [brKey [devKey]]", ConsoleAccessLevelEnum.AccessOperator);
- // CrestronConsole.AddNewConsoleCommand(S => { ConfigWriter.WriteConfigFile(null); }, "writeconfig", "writes the current config to a file", ConsoleAccessLevelEnum.AccessOperator);
CrestronConsole.AddNewConsoleCommand(s =>
{
Debug.Console(0, Debug.ErrorLogLevel.Notice, "CONSOLE MESSAGE: {0}", s);
@@ -287,12 +290,13 @@ namespace PepperDash.Essentials
///
public void LoadDevices()
{
+ // Instantiate the Device Factories
+ new CoreDeviceFactory();
+
+
// Build the processor wrapper class
-
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor"));
-
-
// Add global System Monitor device
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Monitoring.SystemMonitorController("systemMonitor"));
diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index 3c4fd6b5..b2830e4e 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -7,7 +7,7 @@
{1BED5BA9-88C4-4365-9362-6F4B128071D3}
Library
Properties
- PepperDash.Essentials
+ PepperDashEssentials
PepperDashEssentials
{0B4745B0-194B-4BB6-8E21-E9057CA92230};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
WindowsCE
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
index 0b0e4d82..45657e3e 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/GenericComm.cs
@@ -13,14 +13,11 @@ using PepperDash.Essentials.Core.Config;
namespace PepperDash.Essentials.Core
{
-
-
///
/// Serves as a generic wrapper class for all styles of IBasicCommuncation ports
///
public class GenericComm : ReconfigurableDevice
{
-
EssentialsControlPropertiesConfig PropertiesConfig;
public IBasicCommunication CommPort { get; private set; }
@@ -32,7 +29,6 @@ namespace PepperDash.Essentials.Core
CommPort = CommFactory.CreateCommForDevice(config);
-
}
public static IKeyed BuildDevice(DeviceConfig dc)
@@ -61,22 +57,19 @@ namespace PepperDash.Essentials.Core
ConfigWriter.UpdateDeviceConfig(config);
}
+ }
- public class Factory : Essentials.Core.Factory
+ public class GenericCommFactory : Essentials.Core.EssentialsDeviceFactory
+ {
+ public GenericCommFactory()
{
- #region IDeviceFactory Members
-
- List TypeNames = new List() { "genericComm" };
-
- #endregion
-
- public override IKeyed BuildDevice(DeviceConfig dc)
- {
- Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
- return new GenericComm(dc);
- }
+ TypeNames = new List() { "genericComm" };
}
- }
-
+ public override EssentialsDevice BuildDevice(DeviceConfig dc)
+ {
+ Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
+ return new GenericComm(dc);
+ }
+ }
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs
index 88c62f48..18b187b7 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/EssentialsDevice.cs
@@ -19,15 +19,30 @@ namespace PepperDash.Essentials.Core
{
}
+
+ protected EssentialsDevice(string key, string name)
+ : base(key, name)
+ {
+
+ }
}
- public abstract class Factory : IDeviceFactory
+ ///
+ /// Devices the basic needs for a Device Factory
+ ///
+ public abstract class EssentialsDeviceFactory : IDeviceFactory where T:EssentialsDevice
{
#region IDeviceFactory Members
+ ///
+ /// A list of strings that can be used in the type property of a DeviceConfig object to build an instance of this device
+ ///
public List TypeNames { get; protected set; }
- public virtual void LoadTypeFactories()
+ ///
+ /// Loads an item to the DeviceFactory.FactoryMethods dictionary for each entry in the TypeNames list
+ ///
+ public void LoadTypeFactories()
{
foreach (var typeName in TypeNames)
{
@@ -35,13 +50,24 @@ namespace PepperDash.Essentials.Core
}
}
+ ///
+ /// The method that will build the device
+ ///
+ /// The device config
+ /// An instance of the device
+ public abstract EssentialsDevice BuildDevice(DeviceConfig dc);
+
#endregion
+ }
- public abstract IKeyed BuildDevice(DeviceConfig dc);
-
- protected Factory()
- {
- TypeNames = new List();
- }
+ ///
+ /// Devices the basic needs for a Device Factory
+ ///
+ public abstract class EssentialsPluginDeviceFactory : EssentialsDeviceFactory, IPluginDeviceFactory where T : EssentialsDevice
+ {
+ ///
+ /// Specifies the minimum version of Essentials required for a plugin to run. Must use the format Major.Minor.Build (ex. "1.4.33")
+ ///
+ public string MinimumEssentialsFrameworkVersion { get; protected set; }
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
index 47947691..201675d0 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/DeviceFactory.cs
@@ -48,7 +48,6 @@ namespace PepperDash.Essentials.Core
var typeName = dc.Type.ToLower();
-
// Check for types that have been added by plugin dlls.
if (FactoryMethods.ContainsKey(typeName))
{
@@ -57,11 +56,11 @@ namespace PepperDash.Essentials.Core
}
// Check "core" types
- if (typeName == "genericcomm")
- {
- Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
- return new GenericComm(dc);
- }
+ //if (typeName == "genericcomm")
+ //{
+ // Debug.Console(1, "Factory Attempting to create new Generic Comm Device");
+ // return new GenericComm(dc);
+ //}
if (typeName == "ceniodigin104")
{
var control = CommFactory.GetControlPropertiesConfig(dc);
@@ -86,6 +85,31 @@ namespace PepperDash.Essentials.Core
return null;
}
+
+ ///
+ /// Prints the type names fromt the FactoryMethods collection.
+ ///
+ ///
+ public static void GetDeviceFactoryTypes(string filter)
+ {
+ List typeNames = new List();
+
+ if (!string.IsNullOrEmpty(filter))
+ {
+ typeNames = FactoryMethods.Keys.Where(k => k.Contains(filter)).ToList();
+ }
+ else
+ {
+ typeNames = FactoryMethods.Keys.ToList();
+ }
+
+ Debug.Console(0, "Device Types:");
+
+ foreach (var type in typeNames)
+ {
+ Debug.Console(0, "type: '{0}'", type);
+ }
+ }
}
@@ -96,7 +120,7 @@ namespace PepperDash.Essentials.Core
{
public CoreDeviceFactory()
{
- var genComm = new GenericComm.Factory() as IDeviceFactory;
+ var genComm = new GenericCommFactory() as IDeviceFactory;
genComm.LoadTypeFactories();
}
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/IDeviceFactory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/IDeviceFactory.cs
index 0781d647..ef792868 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/IDeviceFactory.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Factory/IDeviceFactory.cs
@@ -4,6 +4,9 @@ using System.Linq;
using System.Text;
using Crestron.SimplSharp;
+using PepperDash.Core;
+using PepperDash.Essentials.Core.Config;
+
namespace PepperDash.Essentials.Core
{
///
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
index 8ea1cf7f..fbbad609 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
@@ -48,16 +48,17 @@ namespace PepperDash.Essentials.Core
if (joinMapSerialzed != null)
{
- var joinMap = JsonConvert.DeserializeObject>(joinMapSerialzed);
+ var joinMapData = JsonConvert.DeserializeObject>(joinMapSerialzed);
- if (joinMap != null)
- return joinMap;
+ if (joinMapData != null)
+ return joinMapData;
else
return null;
}
else
return null;
}
+
}
///
@@ -87,14 +88,17 @@ namespace PepperDash.Essentials.Core
// Get the joins of each type and print them
Debug.Console(0, "Digitals:");
var digitals = Joins.Where(j => (j.Value.JoinType & eJoinType.Digital) == eJoinType.Digital).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Digital Joins", digitals.Count);
PrintJoinList(GetSortedJoins(digitals));
Debug.Console(0, "Analogs:");
var analogs = Joins.Where(j => (j.Value.JoinType & eJoinType.Analog) == eJoinType.Analog).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Analog Joins", analogs.Count);
PrintJoinList(GetSortedJoins(analogs));
Debug.Console(0, "Serials:");
var serials = Joins.Where(j => (j.Value.JoinType & eJoinType.Serial) == eJoinType.Serial).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Serial Joins", serials.Count);
PrintJoinList(GetSortedJoins(serials));
}
@@ -165,24 +169,43 @@ namespace PepperDash.Essentials.Core
///
/// The collection of joins and associated metadata
///
- public Dictionary Joins = new Dictionary();
+ public Dictionary Joins { get; private set; }
protected JoinMapBaseAdvanced(uint joinStart)
{
+ Joins = new Dictionary();
+
_joinOffset = joinStart - 1;
// Add all the JoinDataComplete properties to the Joins Dictionary and pass in the offset
- Joins = GetType()
+ Joins = this.GetType()
.GetCType()
- .GetProperties()
- .Where(prop => prop.IsDefined(typeof(JoinNameAttribute), false))
- .Select(prop => (JoinDataComplete)prop.GetValue(this, null))
- .ToDictionary(join => join.GetNameAttribute(), join =>
+ .GetFields(BindingFlags.Public | BindingFlags.Instance)
+ .Where(field => field.IsDefined(typeof(JoinNameAttribute), false))
+ .Select(prop => (JoinDataComplete)prop.GetValue(this))
+ .ToDictionary(join => join.GetNameAttribute(), join =>
{
join.SetJoinOffset(_joinOffset);
return join;
});
+ //var type = this.GetType();
+ //var cType = type.GetCType();
+ //var fields = cType.GetFields(BindingFlags.Public | BindingFlags.Instance);
+ //foreach (var field in fields)
+ //{
+ // if (field.IsDefined(typeof(JoinNameAttribute), true))
+ // {
+ // var value = field.GetValue(this) as JoinDataComplete;
+
+ // if (value != null)
+ // {
+ // value.SetJoinOffset(_joinOffset);
+ // Joins.Add(value.GetNameAttribute(), value);
+ // }
+ // }
+ //}
+
PrintJoinMapInfo();
}
@@ -196,14 +219,17 @@ namespace PepperDash.Essentials.Core
// Get the joins of each type and print them
Debug.Console(0, "Digitals:");
var digitals = Joins.Where(j => (j.Value.Metadata.JoinType & eJoinType.Digital) == eJoinType.Digital).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Digital Joins", digitals.Count);
PrintJoinList(GetSortedJoins(digitals));
Debug.Console(0, "Analogs:");
var analogs = Joins.Where(j => (j.Value.Metadata.JoinType & eJoinType.Analog) == eJoinType.Analog).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Analog Joins", analogs.Count);
PrintJoinList(GetSortedJoins(analogs));
Debug.Console(0, "Serials:");
var serials = Joins.Where(j => (j.Value.Metadata.JoinType & eJoinType.Serial) == eJoinType.Serial).ToDictionary(j => j.Key, j => j.Value);
+ Debug.Console(2, "Found {0} Serial Joins", serials.Count);
PrintJoinList(GetSortedJoins(serials));
}
@@ -255,6 +281,8 @@ namespace PepperDash.Essentials.Core
Debug.Console(2, "No mathcing key found in join map for: '{0}'", customJoinData.Key);
}
}
+
+ PrintJoinMapInfo();
}
/////
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index c3ea8202..de778fc5 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -7,7 +7,7 @@
{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
Library
Properties
- PepperDash.Essentials.Core
+ PepperDash_Essentials_Core
PepperDash_Essentials_Core
{0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
WindowsCE
@@ -161,7 +161,6 @@
-
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginEntrypointAttribute.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginEntrypointAttribute.cs
deleted file mode 100644
index f802211f..00000000
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginEntrypointAttribute.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace PepperDash.Essentials.Core.Plugins
-{
- [AttributeUsage(AttributeTargets.Class)]
- public sealed class PluginEntryPointAttribute : Attribute
- {
- private readonly string _uniqueKey;
-
- public string UniqueKey {
- get { return _uniqueKey; }
- }
-
- public PluginEntryPointAttribute(string key)
- {
- _uniqueKey = key;
- }
- }
-}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
index 3870159d..c0d84714 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
@@ -69,6 +69,11 @@ namespace PepperDash.Essentials
{
version = Global.AssemblyVersion;
assembly = Assembly.GetExecutingAssembly();
+ break;
+ }
+ case ("PepperDashEssentialsBase.dll"):
+ {
+
break;
}
case ("PepperDash_Core.dll"):
@@ -338,47 +343,19 @@ namespace PepperDash.Essentials
{
try
{
- var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static);
- var loadPlugin = methods.FirstOrDefault(m => m.Name.Equals("LoadPlugin"));
- if (loadPlugin != null)
+ if (typeof(IPluginDeviceFactory).IsAssignableFrom(type))
{
- Debug.Console(2, "LoadPlugin method found in {0}", type.Name);
-
- var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static);
-
- var minimumVersion = fields.FirstOrDefault(p => p.Name.Equals("MinimumEssentialsFrameworkVersion"));
- if (minimumVersion != null)
+ var plugin = (IPluginDeviceFactory)Crestron.SimplSharp.Reflection.Activator.CreateInstance(type);
+ LoadCustomPlugin(plugin, loadedAssembly);
+ }
+ else
+ {
+ var methods = type.GetMethods(BindingFlags.Public | BindingFlags.Static);
+ var loadPlugin = methods.FirstOrDefault(m => m.Name.Equals("LoadPlugin"));
+ if (loadPlugin != null)
{
- Debug.Console(2, "MinimumEssentialsFrameworkVersion found");
-
- var minimumVersionString = minimumVersion.GetValue(null) as string;
-
- if (!string.IsNullOrEmpty(minimumVersionString))
- {
- var passed = Global.IsRunningMinimumVersionOrHigher(minimumVersionString);
-
- if (!passed)
- {
- Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", minimumVersionString);
- continue;
- }
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", minimumVersionString);
- }
- }
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion found but not set. Loading plugin, but your mileage may vary.");
- }
+ LoadCustomLegacyPlugin(type, loadPlugin, loadedAssembly);
}
- else
- {
- Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion not found. Loading plugin, but your mileage may vary.");
- }
-
- Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding plugin: {0}", loadedAssembly.Name);
- loadPlugin.Invoke(null, null);
}
}
catch (Exception e)
@@ -400,6 +377,75 @@ namespace PepperDash.Essentials
Debug.Console(0, "Done Loading Custom Plugin Types.");
}
+ ///
+ /// Loads a
+ ///
+ ///
+ static void LoadCustomPlugin(IPluginDeviceFactory plugin, LoadedAssembly loadedAssembly)
+ {
+ var passed = Global.IsRunningMinimumVersionOrHigher(plugin.MinimumEssentialsFrameworkVersion);
+
+ if (!passed)
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", plugin.MinimumEssentialsFrameworkVersion);
+ return;
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", plugin.MinimumEssentialsFrameworkVersion);
+ }
+
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading plugin: {0}", loadedAssembly.Name);
+ plugin.LoadTypeFactories();
+ }
+
+ ///
+ /// Loads a a custom plugin via the legacy method
+ ///
+ ///
+ ///
+ static void LoadCustomLegacyPlugin(CType type, MethodInfo loadPlugin, LoadedAssembly loadedAssembly)
+ {
+ Debug.Console(2, "LoadPlugin method found in {0}", type.Name);
+
+ var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static);
+
+ var minimumVersion = fields.FirstOrDefault(p => p.Name.Equals("MinimumEssentialsFrameworkVersion"));
+ if (minimumVersion != null)
+ {
+ Debug.Console(2, "MinimumEssentialsFrameworkVersion found");
+
+ var minimumVersionString = minimumVersion.GetValue(null) as string;
+
+ if (!string.IsNullOrEmpty(minimumVersionString))
+ {
+ var passed = Global.IsRunningMinimumVersionOrHigher(minimumVersionString);
+
+ if (!passed)
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Error, "Plugin indicates minimum Essentials version {0}. Dependency check failed. Skipping Plugin", minimumVersionString);
+ return;
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Passed plugin passed dependency check (required version {0})", minimumVersionString);
+ }
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion found but not set. Loading plugin, but your mileage may vary.");
+ }
+ }
+ else
+ {
+ Debug.Console(0, Debug.ErrorLogLevel.Warning, "MinimumEssentialsFrameworkVersion not found. Loading plugin, but your mileage may vary.");
+ }
+
+ Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading legacy plugin: {0}", loadedAssembly.Name);
+ loadPlugin.Invoke(null, null);
+
+ }
+
///
/// Loads plugins
///
@@ -415,15 +461,17 @@ namespace PepperDash.Essentials
// Deal with any .cplz files
UnzipAndMoveCplzArchives();
- if(Directory.Exists(_loadedPluginsDirectoryPath)) {
- // Load the assemblies from the loadedPlugins folder into the AppDomain
- LoadPluginAssemblies();
+ if (Directory.Exists(_loadedPluginsDirectoryPath))
+ {
+ // Load the assemblies from the loadedPlugins folder into the AppDomain
+ LoadPluginAssemblies();
- // Load the types from any custom plugin assemblies
- LoadCustomPluginTypes();
- }
+ // Load the types from any custom plugin assemblies
+ LoadCustomPluginTypes();
+ }
}
}
+
}
///
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs
index 6c648a29..c9a5f605 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Touchpanels/Mpc3Touchpanel.cs
@@ -28,7 +28,6 @@ namespace PepperDash.Essentials.Core.Touchpanels
_Touchpanel.ButtonStateChange += new Crestron.SimplSharpPro.DeviceSupport.ButtonEventHandler(_Touchpanel_ButtonStateChange);
-
AddPostActivationAction(() =>
{
// Link up the button feedbacks to the specified BoolFeedbacks
@@ -40,7 +39,7 @@ namespace PepperDash.Essentials.Core.Touchpanels
{
var bKey = button.Key.ToLower();
- var feedback = device.GetFeedbackProperty(feedbackConfig.BoolFeedbackName);
+ var feedback = device.GetFeedbackProperty(feedbackConfig.FeedbackName);
var bFeedback = feedback as BoolFeedback;
var iFeedback = feedback as IntFeedback;
@@ -72,7 +71,7 @@ namespace PepperDash.Essentials.Core.Touchpanels
}
else
{
- Debug.Console(1, this, "Unable to get BoolFeedback with name: {0} from device: {1}", feedbackConfig.BoolFeedbackName, device.Key);
+ Debug.Console(1, this, "Unable to get BoolFeedback with name: {0} from device: {1}", feedbackConfig.FeedbackName, device.Key);
}
}
else
@@ -140,6 +139,6 @@ namespace PepperDash.Essentials.Core.Touchpanels
public class KeypadButtonFeedback
{
public string DeviceKey { get; set; }
- public string BoolFeedbackName { get; set; }
+ public string FeedbackName { get; set; }
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Essentials_DM.csproj b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
similarity index 97%
rename from essentials-framework/Essentials DM/Essentials_DM/Essentials_DM.csproj
rename to essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
index 94154d6c..f8ea57a9 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Essentials_DM.csproj
+++ b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
@@ -1,159 +1,159 @@
-
-
- Release
- AnyCPU
- 9.0.30729
- 2.0
- {9199CE8A-0C9F-4952-8672-3EED798B284F}
- Library
- Properties
- PepperDash.Essentials.DM
- PepperDash_Essentials_DM
- {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- WindowsCE
- E2BECB1F-8C8C-41ba-B736-9BE7D946A398
- 5.0
- SmartDeviceProject1
- v3.5
- Windows CE
-
-
-
-
- .allowedReferenceRelatedFileExtensions
- true
- full
- false
- bin\
- DEBUG;TRACE;
- prompt
- 4
- 512
- true
- true
- off
-
-
- .allowedReferenceRelatedFileExtensions
- none
- true
- bin\
- prompt
- 4
- 512
- true
- true
- off
-
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
-
-
-
- False
- ..\..\pepperdashcore-builds\PepperDash_Core.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll
- False
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll
- False
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe
- False
-
-
- False
- ..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
- PepperDash_Essentials_Core
-
-
-
-
-
-
-
-
- rem S# Pro preparation will execute after these operations
-
+
+
+ Release
+ AnyCPU
+ 9.0.30729
+ 2.0
+ {9199CE8A-0C9F-4952-8672-3EED798B284F}
+ Library
+ Properties
+ PepperDash_Essentials_DM
+ PepperDash_Essentials_DM
+ {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ WindowsCE
+ E2BECB1F-8C8C-41ba-B736-9BE7D946A398
+ 5.0
+ SmartDeviceProject1
+ v3.5
+ Windows CE
+
+
+
+
+ .allowedReferenceRelatedFileExtensions
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE;
+ prompt
+ 4
+ 512
+ true
+ true
+ off
+
+
+ .allowedReferenceRelatedFileExtensions
+ none
+ true
+ bin\
+ prompt
+ 4
+ 512
+ true
+ true
+ off
+
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
+
+
+
+ False
+ ..\..\pepperdashcore-builds\PepperDash_Core.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
+ PepperDash_Essentials_Core
+
+
+
+
+
+
+
+
+ rem S# Pro preparation will execute after these operations
+
\ No newline at end of file
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs b/essentials-framework/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs
index 1f506f3a..c829e44a 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs
@@ -1,7 +1,7 @@
using System.Reflection;
using Crestron.SimplSharp.Reflection;
-[assembly: System.Reflection.AssemblyTitle("Essentials_DM")]
+[assembly: System.Reflection.AssemblyTitle("PepperDash_Essentials_DM")]
[assembly: System.Reflection.AssemblyCompany("PepperDash Technology Corp")]
[assembly: System.Reflection.AssemblyProduct("PepperDashEssentials")]
[assembly: System.Reflection.AssemblyCopyright("Copyright © PepperDash Technology Corp 2020")]