diff --git a/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs b/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
index ad1b5ca9..83d77cea 100644
--- a/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
@@ -1,99 +1,110 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DM;
-using Crestron.SimplSharpPro.DM.Endpoints;
-using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- ///
- ///
- public abstract class DisplayBase : Device, IHasFeedback, IRoutingSinkWithSwitching, IPower, IWarmingCooling
- {
- public BoolFeedback PowerIsOnFeedback { get; protected set; }
- public BoolFeedback IsCoolingDownFeedback { get; protected set; }
- public BoolFeedback IsWarmingUpFeedback { get; private set; }
-
- public uint WarmupTime { get; set; }
- public uint CooldownTime { get; set; }
-
- ///
- /// Bool Func that will provide a value for the PowerIsOn Output. Must be implemented
- /// by concrete sub-classes
- ///
- abstract protected Func PowerIsOnFeedbackFunc { get; }
- abstract protected Func IsCoolingDownFeedbackFunc { get; }
- abstract protected Func IsWarmingUpFeedbackFunc { get; }
-
- protected CTimer WarmupTimer;
- protected CTimer CooldownTimer;
-
- #region IRoutingInputs Members
-
- public RoutingPortCollection InputPorts { get; private set; }
-
- #endregion
-
- public DisplayBase(string key, string name)
- : base(key, name)
- {
- PowerIsOnFeedback = new BoolFeedback(CommonBoolCue.PowerOnFeedback, PowerIsOnFeedbackFunc);
- IsCoolingDownFeedback = new BoolFeedback(CommonBoolCue.IsCoolingDown, IsCoolingDownFeedbackFunc);
- IsWarmingUpFeedback = new BoolFeedback(CommonBoolCue.IsWarmingUp, IsWarmingUpFeedbackFunc);
-
- InputPorts = new RoutingPortCollection();
- }
-
- public abstract void PowerOn();
- public abstract void PowerOff();
- public abstract void PowerToggle();
-
- public virtual List Feedbacks
- {
- get
- {
- return new List
- {
- PowerIsOnFeedback,
- IsCoolingDownFeedback,
- IsWarmingUpFeedback
- };
- }
- }
-
- public abstract void ExecuteSwitch(object selector);
-
- }
-
- ///
- ///
- ///
- public abstract class TwoWayDisplayBase : DisplayBase
- {
- public static MockDisplay DefaultDisplay {
- get
- {
- if (_DefaultDisplay == null)
- _DefaultDisplay = new MockDisplay("default", "Default Display");
- return _DefaultDisplay;
- }
- }
- static MockDisplay _DefaultDisplay;
-
- public TwoWayDisplayBase(string key, string name)
- : base(key, name)
- {
- WarmupTime = 7000;
- CooldownTime = 15000;
- }
-
- }
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro;
+using Crestron.SimplSharpPro.DM;
+using Crestron.SimplSharpPro.DM.Endpoints;
+using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
+
+using PepperDash.Core;
+
+
+namespace PepperDash.Essentials.Core
+{
+ ///
+ ///
+ ///
+ public abstract class DisplayBase : Device, IHasFeedback, IRoutingSinkWithSwitching, IPower, IWarmingCooling
+ {
+ public BoolFeedback PowerIsOnFeedback { get; protected set; }
+ public BoolFeedback IsCoolingDownFeedback { get; protected set; }
+ public BoolFeedback IsWarmingUpFeedback { get; private set; }
+
+ public uint WarmupTime { get; set; }
+ public uint CooldownTime { get; set; }
+
+ ///
+ /// Bool Func that will provide a value for the PowerIsOn Output. Must be implemented
+ /// by concrete sub-classes
+ ///
+ abstract protected Func PowerIsOnFeedbackFunc { get; }
+ abstract protected Func IsCoolingDownFeedbackFunc { get; }
+ abstract protected Func IsWarmingUpFeedbackFunc { get; }
+
+
+ protected CTimer WarmupTimer;
+ protected CTimer CooldownTimer;
+
+ #region IRoutingInputs Members
+
+ public RoutingPortCollection InputPorts { get; private set; }
+
+ #endregion
+
+ public DisplayBase(string key, string name)
+ : base(key, name)
+ {
+ PowerIsOnFeedback = new BoolFeedback(CommonBoolCue.PowerOnFeedback, PowerIsOnFeedbackFunc);
+ IsCoolingDownFeedback = new BoolFeedback(CommonBoolCue.IsCoolingDown, IsCoolingDownFeedbackFunc);
+ IsWarmingUpFeedback = new BoolFeedback(CommonBoolCue.IsWarmingUp, IsWarmingUpFeedbackFunc);
+
+ InputPorts = new RoutingPortCollection();
+ }
+
+ public abstract void PowerOn();
+ public abstract void PowerOff();
+ public abstract void PowerToggle();
+
+ public virtual List Feedbacks
+ {
+ get
+ {
+ return new List
+ {
+ PowerIsOnFeedback,
+ IsCoolingDownFeedback,
+ IsWarmingUpFeedback
+ };
+ }
+ }
+
+ public abstract void ExecuteSwitch(object selector);
+
+ }
+
+ ///
+ ///
+ ///
+ public abstract class TwoWayDisplayBase : DisplayBase
+ {
+ public StringFeedback CurrentInputFeedback { get; private set; }
+
+ abstract protected Func CurrentInputFeedbackFunc { get; }
+
+
+ public static MockDisplay DefaultDisplay
+ {
+ get
+ {
+ if (_DefaultDisplay == null)
+ _DefaultDisplay = new MockDisplay("default", "Default Display");
+ return _DefaultDisplay;
+ }
+ }
+ static MockDisplay _DefaultDisplay;
+
+ public TwoWayDisplayBase(string key, string name)
+ : base(key, name)
+ {
+ CurrentInputFeedback = new StringFeedback(CurrentInputFeedbackFunc);
+
+ WarmupTime = 7000;
+ CooldownTime = 15000;
+
+ Feedbacks.Add(CurrentInputFeedback);
+ }
+
+ }
}
\ No newline at end of file
diff --git a/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs b/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
index db064059..dfa09b78 100644
--- a/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
@@ -33,6 +33,7 @@ namespace PepperDash.Essentials.Core
protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } }
protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } }
protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } }
+ protected override Func CurrentInputFeedbackFunc { get { return () => "Not Implemented"; } }
int VolumeHeldRepeatInterval = 200;
ushort VolumeInterval = 655;
diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo
index 1bcc9dfe..d0c3f4d4 100644
Binary files a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo and b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo differ
diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs
index 8440763a..886f4857 100644
--- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs
@@ -1,200 +1,201 @@
-using System;
-using System.Collections.Generic;
-
-using PepperDash.Core;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- /// Base class for RoutingInput and Output ports
- ///
- public abstract class RoutingPort : IKeyed
- {
- public string Key { get; private set; }
- public eRoutingSignalType Type { get; private set; }
- public eRoutingPortConnectionType ConnectionType { get; private set; }
- public readonly object Selector;
- public bool IsInternal { get; private set; }
-
- public RoutingPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, bool isInternal)
- {
- Key = key;
- Type = type;
- ConnectionType = connType;
- Selector = selector;
- IsInternal = IsInternal;
- }
- }
-
- public enum eRoutingSignalType
- {
- Audio,
- Video,
- AudioVideo
- }
-
- public enum eRoutingPortConnectionType
- {
- None, BackplaneOnly, DisplayPort, Dvi, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi,
- Composite, Component, DmCat, DmMmFiber, DmSmFiber, Speaker
- }
-
- ///
- /// Basic RoutingInput with no statuses.
- ///
- public class RoutingInputPort : RoutingPort
- {
- ///
- /// The IRoutingInputs object this lives on
- ///
- public IRoutingInputs ParentDevice { get; private set; }
-
- ///
- /// Constructor for a basic RoutingInputPort
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingInputs object this lives on
- public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingInputs parent)
- : this (key, type, connType, selector, parent, false)
- {
- }
-
- ///
- /// Constructor for a virtual routing input port that lives inside a device. For example
- /// the ports that link a DM card to a DM matrix bus
- ///
- /// true for internal ports
- public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingInputs parent, bool isInternal)
- : base(key, type, connType, selector, isInternal)
- {
- if (parent == null)
- throw new ArgumentNullException("parent");
- ParentDevice = parent;
- }
-
-
- /////
- ///// Static method to get a named port from a named device
- /////
- ///// Returns null if device or port doesn't exist
- //public static RoutingInputPort GetDevicePort(string deviceKey, string portKey)
- //{
- // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingInputs;
- // if (sourceDev == null)
- // return null;
- // return sourceDev.InputPorts[portKey];
- //}
-
- /////
- ///// Static method to get a named port from a card in a named ICardPortsDevice device
- ///// Uses ICardPortsDevice.GetChildInputPort
- /////
- ///// 'input-N'
- ///// null if device, card or port doesn't exist
- //public static RoutingInputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey)
- //{
- // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice;
- // if (sourceDev == null)
- // return null;
- // return sourceDev.GetChildInputPort(cardKey, portKey);
- //}
- }
-
- ///
- /// A RoutingInputPort for devices like DM-TX and DM input cards.
- /// Will provide video statistics on connected signals
- ///
- public class RoutingInputPortWithVideoStatuses : RoutingInputPort
- {
- ///
- /// Video statuses attached to this port
- ///
- public VideoStatusOutputs VideoStatus { get; private set; }
-
- ///
- /// Constructor
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingInputs object this lives on
- /// A VideoStatusFuncsWrapper used to assign the callback funcs that will get
- /// the values for the various stats
- public RoutingInputPortWithVideoStatuses(string key,
- eRoutingSignalType type, eRoutingPortConnectionType connType, object selector,
- IRoutingInputs parent, VideoStatusFuncsWrapper funcs) :
- base(key, type, connType, selector, parent)
- {
- VideoStatus = new VideoStatusOutputs(funcs);
- }
- }
-
- public class RoutingOutputPort : RoutingPort
- {
- ///
- /// The IRoutingOutputs object this port lives on
- ///
- public IRoutingOutputs ParentDevice { get; private set; }
-
- public InUseTracking InUseTracker { get; private set; }
-
-
- ///
- ///
- /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
- /// May be string, number, whatever
- /// The IRoutingOutputs object this port lives on
- public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingOutputs parent)
- : this(key, type, connType, selector, parent, false)
- {
- }
-
- public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
- object selector, IRoutingOutputs parent, bool isInternal)
- : base(key, type, connType, selector, isInternal)
- {
- if (parent == null)
- throw new ArgumentNullException("parent");
- ParentDevice = parent;
- InUseTracker = new InUseTracking();
- }
-
- public override string ToString()
- {
- return ParentDevice.Key + ":" + Key;
- }
-
- /////
- ///// Static method to get a named port from a named device
- /////
- ///// Returns null if device or port doesn't exist
- //public static RoutingOutputPort GetDevicePort(string deviceKey, string portKey)
- //{
- // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingOutputs;
- // if (sourceDev == null)
- // return null;
- // var port = sourceDev.OutputPorts[portKey];
- // if (port == null)
- // Debug.Console(0, "WARNING: Device '{0}' does does not contain output port '{1}'", deviceKey, portKey);
- // return port;
- //}
-
- /////
- ///// Static method to get a named port from a card in a named ICardPortsDevice device
- ///// Uses ICardPortsDevice.GetChildOutputPort on that device
- /////
- ///// 'input-N' or 'output-N'
- ///// null if device, card or port doesn't exist
- //public static RoutingOutputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey)
- //{
- // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice;
- // if (sourceDev == null)
- // return null;
- // var port = sourceDev.GetChildOutputPort(cardKey, portKey);
- //}
- }
+using System;
+using System.Collections.Generic;
+
+using PepperDash.Core;
+
+
+namespace PepperDash.Essentials.Core
+{
+ ///
+ /// Base class for RoutingInput and Output ports
+ ///
+ public abstract class RoutingPort : IKeyed
+ {
+ public string Key { get; private set; }
+ public eRoutingSignalType Type { get; private set; }
+ public eRoutingPortConnectionType ConnectionType { get; private set; }
+ public readonly object Selector;
+ public bool IsInternal { get; private set; }
+ public object FeedbackMatchObject { get; set; }
+
+ public RoutingPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, bool isInternal)
+ {
+ Key = key;
+ Type = type;
+ ConnectionType = connType;
+ Selector = selector;
+ IsInternal = IsInternal;
+ }
+ }
+
+ public enum eRoutingSignalType
+ {
+ Audio,
+ Video,
+ AudioVideo
+ }
+
+ public enum eRoutingPortConnectionType
+ {
+ None, BackplaneOnly, DisplayPort, Dvi, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi,
+ Composite, Component, DmCat, DmMmFiber, DmSmFiber, Speaker
+ }
+
+ ///
+ /// Basic RoutingInput with no statuses.
+ ///
+ public class RoutingInputPort : RoutingPort
+ {
+ ///
+ /// The IRoutingInputs object this lives on
+ ///
+ public IRoutingInputs ParentDevice { get; private set; }
+
+ ///
+ /// Constructor for a basic RoutingInputPort
+ ///
+ /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
+ /// May be string, number, whatever
+ /// The IRoutingInputs object this lives on
+ public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
+ object selector, IRoutingInputs parent)
+ : this (key, type, connType, selector, parent, false)
+ {
+ }
+
+ ///
+ /// Constructor for a virtual routing input port that lives inside a device. For example
+ /// the ports that link a DM card to a DM matrix bus
+ ///
+ /// true for internal ports
+ public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
+ object selector, IRoutingInputs parent, bool isInternal)
+ : base(key, type, connType, selector, isInternal)
+ {
+ if (parent == null)
+ throw new ArgumentNullException("parent");
+ ParentDevice = parent;
+ }
+
+
+ /////
+ ///// Static method to get a named port from a named device
+ /////
+ ///// Returns null if device or port doesn't exist
+ //public static RoutingInputPort GetDevicePort(string deviceKey, string portKey)
+ //{
+ // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingInputs;
+ // if (sourceDev == null)
+ // return null;
+ // return sourceDev.InputPorts[portKey];
+ //}
+
+ /////
+ ///// Static method to get a named port from a card in a named ICardPortsDevice device
+ ///// Uses ICardPortsDevice.GetChildInputPort
+ /////
+ ///// 'input-N'
+ ///// null if device, card or port doesn't exist
+ //public static RoutingInputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey)
+ //{
+ // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice;
+ // if (sourceDev == null)
+ // return null;
+ // return sourceDev.GetChildInputPort(cardKey, portKey);
+ //}
+ }
+
+ ///
+ /// A RoutingInputPort for devices like DM-TX and DM input cards.
+ /// Will provide video statistics on connected signals
+ ///
+ public class RoutingInputPortWithVideoStatuses : RoutingInputPort
+ {
+ ///
+ /// Video statuses attached to this port
+ ///
+ public VideoStatusOutputs VideoStatus { get; private set; }
+
+ ///
+ /// Constructor
+ ///
+ /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
+ /// May be string, number, whatever
+ /// The IRoutingInputs object this lives on
+ /// A VideoStatusFuncsWrapper used to assign the callback funcs that will get
+ /// the values for the various stats
+ public RoutingInputPortWithVideoStatuses(string key,
+ eRoutingSignalType type, eRoutingPortConnectionType connType, object selector,
+ IRoutingInputs parent, VideoStatusFuncsWrapper funcs) :
+ base(key, type, connType, selector, parent)
+ {
+ VideoStatus = new VideoStatusOutputs(funcs);
+ }
+ }
+
+ public class RoutingOutputPort : RoutingPort
+ {
+ ///
+ /// The IRoutingOutputs object this port lives on
+ ///
+ public IRoutingOutputs ParentDevice { get; private set; }
+
+ public InUseTracking InUseTracker { get; private set; }
+
+
+ ///
+ ///
+ /// An object used to refer to this port in the IRouting device's ExecuteSwitch method.
+ /// May be string, number, whatever
+ /// The IRoutingOutputs object this port lives on
+ public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
+ object selector, IRoutingOutputs parent)
+ : this(key, type, connType, selector, parent, false)
+ {
+ }
+
+ public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
+ object selector, IRoutingOutputs parent, bool isInternal)
+ : base(key, type, connType, selector, isInternal)
+ {
+ if (parent == null)
+ throw new ArgumentNullException("parent");
+ ParentDevice = parent;
+ InUseTracker = new InUseTracking();
+ }
+
+ public override string ToString()
+ {
+ return ParentDevice.Key + ":" + Key;
+ }
+
+ /////
+ ///// Static method to get a named port from a named device
+ /////
+ ///// Returns null if device or port doesn't exist
+ //public static RoutingOutputPort GetDevicePort(string deviceKey, string portKey)
+ //{
+ // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingOutputs;
+ // if (sourceDev == null)
+ // return null;
+ // var port = sourceDev.OutputPorts[portKey];
+ // if (port == null)
+ // Debug.Console(0, "WARNING: Device '{0}' does does not contain output port '{1}'", deviceKey, portKey);
+ // return port;
+ //}
+
+ /////
+ ///// Static method to get a named port from a card in a named ICardPortsDevice device
+ ///// Uses ICardPortsDevice.GetChildOutputPort on that device
+ /////
+ ///// 'input-N' or 'output-N'
+ ///// null if device, card or port doesn't exist
+ //public static RoutingOutputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey)
+ //{
+ // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice;
+ // if (sourceDev == null)
+ // return null;
+ // var port = sourceDev.GetChildOutputPort(cardKey, portKey);
+ //}
+ }
}
\ No newline at end of file
diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
index 97c119b4..758bd233 100644
--- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
@@ -29,8 +29,9 @@ namespace PepperDash.Essentials.Core.Routing
public const string DisplayPortOut = "displayPortOut";
public const string DmIn = "dmIn";
public const string DmOut = "dmOut";
- public const string DviIn = "dviIn";
- public const string DviOut = "dviOut";
+ public const string DviIn = "dviIn";
+ public const string DviIn1 = "dviIn1";
+ public const string DviOut = "dviOut";
public const string HdmiIn = "hdmiIn";
public const string HdmiIn1 = "hdmiIn1";
public const string HdmiIn2 = "hdmiIn2";
@@ -39,7 +40,9 @@ namespace PepperDash.Essentials.Core.Routing
public const string HdmiIn5 = "hdmiIn5";
public const string HdmiIn6 = "hdmiIn6";
public const string HdmiOut = "hdmiOut";
- public const string RgbIn = "rgbIn";
+ public const string RgbIn = "rgbIn";
+ public const string RgbIn1 = "rgbIn1";
+ public const string RgbIn2 = "rgbIn2";
public const string VgaIn = "vgaIn";
public const string VgaOut = "vgaOut";
}
diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo
index ad2c3757..004ed3ba 100644
Binary files a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo and b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo differ
diff --git a/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs b/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs
index 42a2544a..de4d42df 100644
--- a/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs
+++ b/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs
@@ -42,7 +42,7 @@ namespace PepperDash.Essentials.Devices.Displays
{
var comm = CommFactory.CreateCommForDevice(dc);
if (comm != null)
- return new SamsungMDC(dc.Key, dc.Name, comm, Convert.ToByte(dc.Properties["byte"]));
+ return new SamsungMDC(dc.Key, dc.Name, comm, dc.Properties["id"].Value());
}
}
diff --git a/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
index 00853062..fe526e8c 100644
--- a/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
+++ b/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
@@ -64,6 +64,8 @@ namespace PepperDash.Essentials.Devices.Displays
protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } }
protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } }
protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } }
+ protected override Func CurrentInputFeedbackFunc { get { return () => "Not Implemented"; } }
+
///
/// Constructor for IBasicCommunication
diff --git a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
index 2150998d..ebd31876 100644
--- a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
+++ b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
@@ -19,144 +19,50 @@ namespace PepperDash.Essentials.Devices.Displays
public CommunicationGather PortGather { get; private set; }
public StatusMonitorBase CommunicationMonitor { get; private set; }
+ private StringBuilder Buffer = new StringBuilder();
+
#region Command constants
- public string Ack
- {
- get { return AssembleCommand(string.Format("\xAA\xFF{0}\x03A", ID)); }
- }
- public string Nak
- {
- get { return AssembleCommand(string.Format("\xAA\xFF{0}\x03N", ID)); }
- }
+ public string Ack { get; private set; }
+ public string Nak { get; private set; }
+
// Power Commands
- public string PowerGetCmd
- {
- get { return AssembleCommand(string.Format("\x11{0}\x00", ID)); }
- }
+ public string PowerGetCmd { get; private set; }
- public string PowerOnCmd
- {
- get { return AssembleCommand(string.Format("\x11{0}\x01\x01", ID)); }
- }
+ public string PowerOnCmd { get; private set; }
- public string PowerOffCmd
- {
- get { return AssembleCommand(string.Format("\x11{0}\x01\x00", ID)); }
- }
+ public string PowerOffCmd { get; private set; }
// Input Commands
- public string InputGetCmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x00", ID)); }
- }
+ public string InputGetCmd { get; private set; }
- public string Dp1Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x25", ID)); }
- }
-
- public string Hdmi1Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x21", ID)); }
- }
-
- public string Hdmi2Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x23", ID)); }
- }
-
- public string Hdmi3Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x32", ID)); }
- }
-
- public string Dvi1Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x18", ID)); }
- }
-
- public string Rgb1Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x14", ID)); }
- }
-
- public string Rgb2Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x1E", ID)); }
- }
-
- public string Video1Cmd
- {
- get { return AssembleCommand(string.Format("\x14{0}\x01\x08", ID)); }
- }
+ public string Dp1Cmd { get; private set; }
+ public string Hdmi1Cmd { get; private set; }
+ public string Hdmi2Cmd { get; private set; }
+ public string Hdmi3Cmd { get; private set; }
+ public string Dvi1Cmd { get; private set; }
+ public string Video1Cmd { get; private set; }
+ public string Rgb1Cmd { get; private set; }
+ public string Rgb2Cmd { get; private set; }
// Volume Commands
- public string MuteGetCmd
- {
- get { return AssembleCommand(string.Format("\x13{0}\x00", ID)); }
- }
+ public string MuteGetCmd { get; private set; }
- public string MuteOnCmd
- {
- get { return AssembleCommand(string.Format("\x13{0}\x01\x01", ID)); }
- }
+ public string MuteOnCmd { get; private set; }
- public string MuteOffCmd
- {
- get { return AssembleCommand(string.Format("\x13{0}\x01\x00", ID)); }
- }
+ public string MuteOffCmd { get; private set; }
- public string VolumeGetCmd
- {
- get { return AssembleCommand(string.Format("\x12{0}\x00", ID)); }
- }
+ public string VolumeGetCmd { get; private set; }
///
/// To be appended with the requested volume level. Does not include checksum calculation
///
- public string VolumeLevelPartialCmd
- {
- get { return string.Format("\x12{0}\x01", ID); }
- }
+ public string VolumeLevelPartialCmd { get; private set; }
- //public string InputGetCmd = "";
- //public const string Hdmi1Cmd = "";
- //public const string Hdmi2Cmd = "";
- //public const string Hdmi3Cmd = "";
- //public const string Hdmi4Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x38\x33\x03\x79\x0D";
- //public const string Dp1Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x30\x46\x03\x04\x0D";
- //public const string Dp2Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x31\x30\x03\x73\x0D";
- //public const string Dvi1Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x30\x33\x03\x71\x0d";
- //public const string Video1Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x30\x35\x03\x77\x0D";
- //public const string VgaCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x30\x31\x03\x73\x0D";
- //public const string RgbCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x30\x32\x03\x70\x0D";
-
- //public const string PowerOnCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x30\x33\x44\x36\x30\x30\x30\x31\x03\x73\x0D";
- //public const string PowerOffCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x30\x33\x44\x36\x30\x30\x30\x34\x03\x76\x0D";
- //public const string PowerToggleIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x30\x33\x30\x33\x03\x02\x0D";
-
- //public const string MuteOffCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x38\x44\x30\x30\x30\x30\x03\x08\x0D";
- //public const string MuteOnCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x38\x44\x30\x30\x30\x31\x03\x09\x0D";
- //public const string MuteToggleIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x31\x42\x30\x33\x03\x72\x0D";
- //public const string MuteGetCmd = "\x01\x30\x41\x30\x43\x30\x36\x02\x30\x30\x38\x44\x03\x79\x0D";
-
- //public const string VolumeGetCmd = "\x01\x30\x41\x30\x43\x30\x36\x02\x30\x30\x36\x32\x03\x01\x0D";
- //public const string VolumeLevelPartialCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x32"; //\x46\x46\x46\x46\x03\xNN\x0D
- //public const string VolumeUpCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x31\x30\x41\x44\x30\x30\x30\x31\x03\x71\x0D";
- //public const string VolumeDownCmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x31\x30\x41\x44\x30\x30\x30\x32\x03\x72\x0D";
-
- //public const string MenuIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x32\x30\x30\x33\x03\x03\x0D";
- //public const string UpIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x31\x35\x30\x33\x03\x05\x0D";
- //public const string DownIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x31\x34\x30\x33\x03\x04\x0D";
- //public const string LeftIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x32\x31\x30\x33\x03\x02\x0D";
- //public const string RightIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x32\x32\x30\x33\x03\x01\x0D";
- //public const string SelectIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x32\x33\x30\x33\x03\x00\x0D";
- //public const string ExitIrCmd = "\x01\x30\x41\x30\x41\x30\x43\x02\x43\x32\x31\x30\x30\x30\x31\x46\x30\x33\x03\x76\x0D";
#endregion
@@ -167,17 +73,22 @@ namespace PepperDash.Essentials.Devices.Displays
///
///
///
- private string AssembleCommand(string command)
+ private string AppendChecksum(string command)
{
int checksum = 0;
- var bytes = command.ToCharArray();
+ //var bytes = command.ToCharArray();
- for (int i = 1; i < bytes.Length; i++)
+ byte[] bytes = Encoding.ASCII.GetBytes(command);
+
+ for (int i = 1; i < bytes.Length; i++) /*Convert.ToByte(bytes[i]*/
{
- checksum = checksum + Convert.ToByte(bytes[i]);
+ checksum = checksum + bytes[i];
}
+ if (checksum >= 0x100) // Check if value is greater than 0x100 and if so, remove the first digit by subtracting 0x100
+ checksum = checksum - 0x100;
+
var checksumByte = Convert.ToByte(checksum);
string result = string.Format("{0}{1}", command, (char)checksumByte);
@@ -191,82 +102,144 @@ namespace PepperDash.Essentials.Devices.Displays
bool _IsCoolingDown;
ushort _VolumeLevel;
bool _IsMuted;
- object _CurrentInputPort;
-#warning Add Input FeedbackFunc object
+ RoutingInputPort _CurrentInputPort;
protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } }
protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } }
protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } }
+ protected override Func CurrentInputFeedbackFunc { get { return () => _CurrentInputPort.Key; } }
+
///
/// Constructor for IBasicCommunication
///
- public SamsungMDC(string key, string name, IBasicCommunication comm, byte id)
+ public SamsungMDC(string key, string name, IBasicCommunication comm, string id)
: base(key, name)
{
Communication = comm;
- ID = id;
- Init();
+ Communication.TextReceived += new EventHandler(Communication_TextReceived);
+ ID = id == null ? (byte)0x01 : Convert.ToByte(id); // If id is null, set default value of 0x01, otherwise assign value passed in constructor
+ Init();
}
+
+
+
+
///
/// Constructor for TCP
///
- public SamsungMDC(string key, string name, string hostname, int port, byte id)
+ public SamsungMDC(string key, string name, string hostname, int port, string id)
: base(key, name)
{
Communication = new GenericTcpIpClient(key + "-tcp", hostname, port, 5000);
- ID = id;
- Init();
+ Communication.TextReceived += new EventHandler(Communication_TextReceived);
+ ID = id == null ? (byte)0x01 : Convert.ToByte(id); // If id is null, set default value of 0x01, otherwise assign value passed in constructor
+ Init();
}
///
/// Constructor for COM
///
- public SamsungMDC(string key, string name, ComPort port, ComPort.ComPortSpec spec, byte id)
+ public SamsungMDC(string key, string name, ComPort port, ComPort.ComPortSpec spec, string id)
: base(key, name)
{
Communication = new ComPortController(key + "-com", port, spec);
- ID = id;
- Init();
+ Communication.TextReceived += new EventHandler(Communication_TextReceived);
+ ID = id == null ? (byte)0x01 : Convert.ToByte(id); // If id is null, set default value of 0x01, otherwise assign value passed in constructor
+ Init();
}
+ void AddRoutingInputPort(RoutingInputPort port, string cmdPrefix, byte fbMatch)
+ {
+ port.FeedbackMatchObject = fbMatch;
+ InputPorts.Add(port);
+
+ }
+
void Init()
{
- PortGather = new CommunicationGather(Communication, '\x0d');
- PortGather.LineReceived += this.Port_LineReceived;
- CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, "xx\x0d");
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.DviIn, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Dvi, new Action(InputDvi1), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.CompositeIn, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Composite, new Action(InputVideo1), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.VgaIn, eRoutingSignalType.Video,
- eRoutingPortConnectionType.Vga, new Action(InputRgb1), this));
- InputPorts.Add(new RoutingInputPort(RoutingPortNames.RgbIn, eRoutingSignalType.Video,
- eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb2)), this));
+ CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, AppendChecksum(string.Format("\x11{0}\x01\x01", ID)));
-#warning Add missing input ports
+ // Build Command Strings
+
+ Ack = AppendChecksum(string.Format("\xAA\xFF{0}\x03A", ID));
+
+ Nak = AppendChecksum(string.Format("\xAA\xFF{0}\x03N", ID));
+
+ //Power Commands
+
+ PowerGetCmd = AppendChecksum(string.Format("\x11{0}\x00", ID));
+
+ PowerOnCmd = AppendChecksum(string.Format("\x11{0}\x01\x01", ID));
+
+ PowerOffCmd = AppendChecksum(string.Format("\x11{0}\x01\x00", ID));
+
+ //Input Commands
+
+ InputGetCmd = AppendChecksum(string.Format("\x14{0}\x00", ID));
+
+ string cmdPrefix = string.Format("\x14{0}\x01", ID);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this), cmdPrefix, 0x21);
+ Hdmi1Cmd = string.Format("{0}{1}", cmdPrefix, 0x21);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this), cmdPrefix, 0x23);
+ Hdmi2Cmd = string.Format("{0}{1}", cmdPrefix, 0x23);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this), cmdPrefix, 0x32);
+ Hdmi3Cmd = string.Format("{0}{1}", cmdPrefix, 0x32);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this), cmdPrefix, 0x25);
+ Dp1Cmd = string.Format("{0}{1}", cmdPrefix, 0x25);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DviIn, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Dvi, new Action(InputDvi1), this), cmdPrefix, 0x18);
+ Dvi1Cmd = string.Format("{0}{1}", cmdPrefix, 0x18);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.CompositeIn, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Composite, new Action(InputVideo1), this), cmdPrefix, 0x08);
+ Video1Cmd = string.Format("{0}{1}", cmdPrefix, 0x08);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn1, eRoutingSignalType.Video,
+ eRoutingPortConnectionType.Vga, new Action(InputRgb1), this), cmdPrefix, 0x14);
+ Rgb1Cmd = string.Format("{0}{1}", cmdPrefix, 0x14);
+
+ AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn2, eRoutingSignalType.Video,
+ eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb2)), this), cmdPrefix, 0x1E);
+ Rgb2Cmd = string.Format("{0}{1}", cmdPrefix, 0x1E);
+
+ // Mute Commands
+
+ MuteGetCmd = AppendChecksum(string.Format("\x13{0}\x00", ID));
+
+ MuteOnCmd = AppendChecksum(string.Format("\x13{0}\x01\x01", ID));
+
+ MuteOffCmd = AppendChecksum(string.Format("\x13{0}\x01\x00", ID));
+
+ // Volume Commands
+
+ VolumeGetCmd = AppendChecksum(string.Format("\x12{0}\x00", ID));
+
+ VolumeLevelPartialCmd = string.Format("\x12{0}\x01", ID);
VolumeLevelFeedback = new IntFeedback(() => { return _VolumeLevel; });
MuteFeedback = new BoolFeedback(() => _IsMuted);
- // new BoolCueActionPair(CommonBoolCue.Menu, b => { if(b) Send(MenuIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Up, b => { if(b) Send(UpIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Down, b => { if(b) Send(DownIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Left, b => { if(b) Send(LeftIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Right, b => { if(b) Send(RightIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Select, b => { if(b) Send(SelectIrCmd); }),
- // new BoolCueActionPair(CommonBoolCue.Exit, b => { if(b) Send(ExitIrCmd); }),
- //};
+ // Query initial device status
+
+ Send(PowerGetCmd);
+
+ Send(InputGetCmd);
+
+ Send(VolumeGetCmd);
+
+ Send(MuteGetCmd);
}
~SamsungMDC()
@@ -295,109 +268,128 @@ namespace PepperDash.Essentials.Devices.Displays
}
}
- void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args)
- {
- if (Debug.Level == 2)
- Debug.Console(2, this, "Received: '{0}'", ComTextHelper.GetEscapedText(args.Text));
+ void Communication_TextReceived(object sender, GenericCommMethodReceiveTextArgs e)
+ {
+ Buffer.Append(e.Text);
- if (args.Text.IndexOf(Ack) > -1)
- {
- var bytes = args.Text.ToCharArray();
+ if (Debug.Level == 2)
+ Debug.Console(2, this, "Received: '{0}'", ComTextHelper.GetEscapedText(e.Text));
- var commandByte = bytes[5];
+ ParseData();
+ }
- var dataByte = bytes[6];
+ void ParseData()
+ {
+ if(Buffer.Length < 8) // Message length must be > 8 bytes
+ return;
- switch (commandByte)
- {
- case '\x11': // Power State
- {
- if (dataByte == '\x00')
- {
- if (_PowerIsOn)
- {
- _IsWarmingUp = false;
- _IsCoolingDown = true;
- IsCoolingDownFeedback.FireUpdate();
- IsWarmingUpFeedback.FireUpdate();
- _PowerIsOn = false;
- }
- }
- else if (dataByte == '\x01')
- {
- if (!_PowerIsOn)
- {
- _IsCoolingDown = false;
- _IsWarmingUp = true;
- IsCoolingDownFeedback.FireUpdate();
- IsWarmingUpFeedback.FireUpdate();
- _PowerIsOn = true;
- }
- }
+ var sample = Buffer.ToString();
- PowerIsOnFeedback.FireUpdate();
- break;
- }
- case '\x12': // Volume Level
- {
- _VolumeLevel = (ushort)Scale(dataByte, 0, 100, 0, 65535);
+ var messageStart = sample.IndexOf("\xAA\xFF");
- VolumeLevelFeedback.FireUpdate();
- break;
- }
- case '\x13': // Mute State
- {
- if (dataByte == '\x00')
- {
- _IsMuted = false;
- }
- else if (dataByte == '\x01')
- {
- _IsMuted = true;
- }
-
-
- MuteFeedback.FireUpdate();
- break;
- }
- case '\x14': // Input State
- {
- switch (dataByte)
- {
- case '\x25': // DisplayPort
- {
-#warning Handle input port types
-
- //_CurrentInputPort =
- break;
- }
- }
-
- break;
- }
- case '\x15': // Aspect Ratio
- {
-
- break;
- }
- default:
- {
- Debug.Console(2, this, "Unreckocnized Response Command Type: {0}", commandByte);
- break;
- }
- }
- }
- else if (args.Text.IndexOf(Nak) > -1)
+ if (messageStart > -1)
{
- Debug.Console(2, this, "Nak received");
- }
- }
+ StringBuilder garbage;
+ if(messageStart > 0) // Check for leftover bytes before first full message and remove
+ garbage = Buffer.Remove(0, messageStart - 1);
+
+ var chunk = Buffer.Remove(messageStart, 8); // Remove first message
+
+ var message = chunk.ToString();
+
+ if (message.IndexOf(Ack) > -1) // Check to see if Ack message
+ {
+ var bytes = message.ToCharArray();
+
+ var commandByte = bytes[5];
+
+ var dataByte = bytes[6];
+
+ switch (commandByte)
+ {
+ case '\x11': // Power State
+ {
+ var currentState = _PowerIsOn;
+
+ if (dataByte == '\x00')
+ _PowerIsOn = false;
+
+ else if (dataByte == '\x01')
+ _PowerIsOn = true;
+
+ if(currentState != _PowerIsOn)
+ PowerIsOnFeedback.FireUpdate();
+
+ break;
+ }
+ case '\x12': // Volume Level
+ {
+ _VolumeLevel = (ushort)Scale(dataByte, 0, 100, 0, 65535);
+
+ VolumeLevelFeedback.FireUpdate();
+ break;
+ }
+ case '\x13': // Mute State
+ {
+ if (dataByte == '\x00')
+ {
+ _IsMuted = false;
+ }
+ else if (dataByte == '\x01')
+ {
+ _IsMuted = true;
+ }
+
+
+ MuteFeedback.FireUpdate();
+ break;
+ }
+ case '\x14': // Input State
+ {
+ var currentInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(dataByte));
+
+ if (currentInput != null)
+ {
+ _CurrentInputPort = currentInput;
+
+ CurrentInputFeedback.FireUpdate();
+ }
+
+ break;
+ }
+ case '\x15': // Aspect Ratio
+ {
+ // Not implemented yet
+
+ break;
+ }
+ default:
+ {
+ Debug.Console(2, this, "Unreckocnized Response Command Type: {0}", commandByte);
+ break;
+ }
+ }
+ }
+ else if (message.IndexOf(Nak) > -1)
+ {
+ Debug.Console(2, this, "Nak received");
+ }
+
+ }
+ }
+
+ ///
+ /// Append checksup and send command to device
+ ///
+ ///
void Send(string s)
{
+ var cmd = AppendChecksum(s);
+
if (Debug.Level == 2)
- Debug.Console(2, this, "Send: '{0}'", ComTextHelper.GetEscapedText(s));
- Communication.SendText(s);
+ Debug.Console(2, this, "Send: '{0}'", ComTextHelper.GetEscapedText(cmd));
+ Communication.SendText(cmd);
}
@@ -506,9 +498,8 @@ namespace PepperDash.Essentials.Devices.Displays
var scaledLevel = Scale(level, 0, 65535, 0, 100);
var levelString = string.Format("{0}{1}", VolumeLevelPartialCmd, Convert.ToByte(scaledLevel));
- var command = AssembleCommand(levelString);
- Debug.Console(2, this, "Volume:{0}", ComTextHelper.GetEscapedText(command));
- Send(command);
+ Debug.Console(2, this, "Volume:{0}", ComTextHelper.GetEscapedText(levelString));
+ Send(levelString);
_VolumeLevel = level;
VolumeLevelFeedback.FireUpdate();
}
diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo
index faf56049..6375fbb5 100644
Binary files a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo and b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo differ
diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs b/Essentials/PepperDashEssentials/ControlSystem.cs
index 6cba22e5..1cc3a000 100644
--- a/Essentials/PepperDashEssentials/ControlSystem.cs
+++ b/Essentials/PepperDashEssentials/ControlSystem.cs
@@ -29,8 +29,8 @@ namespace PepperDash.Essentials
///
public override void InitializeSystem()
{
- //CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Reloads configuration file",
- // ConsoleAccessLevelEnum.AccessOperator);
+ CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Reloads configuration file",
+ ConsoleAccessLevelEnum.AccessOperator);
//CrestronConsole.AddNewConsoleCommand(s => TearDown(), "ungo", "Reloads configuration file",
// ConsoleAccessLevelEnum.AccessOperator);
CrestronConsole.AddNewConsoleCommand(s =>
@@ -40,7 +40,7 @@ namespace PepperDash.Essentials
},
"listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator);
- GoWithLoad();
+ //GoWithLoad();
}
///
diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo
index fc218d04..41a197af 100644
Binary files a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo and b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo differ
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
index f2a603b0..942476f7 100644
Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
index 298f0b74..32825d6f 100644
Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ